前置式を中置式に変換するのは比較的簡単です。
実装コード
実装関数コードは次のとおりです。
;求得运算符号
(defun opsymbol(x)
(cond
((equal x 'setq) '=) ;给定的lisp函数。
((equal x 'plus) '+)
((equal x 'difference) '-)
((equal x 'times) '*)
((equal x 'quotient) '/)
((equal x 'remainder) '\\)
((equal x 'expt) '^)
(t x)
)
)
;前缀表达式转中缀表达式
(defun prefix_to_infix(L)
(cond
((null L) ())
((atom L) L) ;简单情况。
(t
(list
(prefix_to_infix (cadr L)) ;翻译第一部分
(opsymbol (car L)) ;查运算符号
(prefix_to_infix (caddr L)) ;翻译其余部分
)
)
)
)
ポータルに定義を追加
コードをウィンドウに直接コピーします。以下に示すように。
プログラム実行効果
コマンドを順番に入力します
(prefix_to_infix '(回 ab))
(prefix_to_infix '(TIMES PRINCIPAL (EXPT (PLUS 1.0 INTEREST) YEARS)))
(prefix_to_infix '(SETQ TOTAL (TIMES PRINCIPAL (EXPT (PLUS 1.0 INTEREST) YEARS))))
操作の結果は次のとおりです。