前缀表达式转中缀表达式是比较简单的。
实现代码
实现函数代码如下:
;求得运算符号
(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)) ;翻译其余部分
)
)
)
)
在portacle中添加定义
直接将代码复制到窗口中。如下图所示。

程序运行效果
依次输入命令
(prefix_to_infix '(times a b))
(prefix_to_infix '(TIMES PRINCIPAL (EXPT (PLUS 1.0 INTEREST) YEARS)))
(prefix_to_infix '(SETQ TOTAL (TIMES PRINCIPAL (EXPT (PLUS 1.0 INTEREST) YEARS))))
运行结果如下:

前缀转中缀
本文介绍了一种将前缀表达式转换为中缀表达式的LISP函数实现方法,并提供了具体的代码示例。通过该方法可以方便地进行表达式转换。
1120

被折叠的 条评论
为什么被折叠?



