lisp函数的意思,前缀表达式转换为中缀表达式
lisp函数的意思,前缀表达式转换为中缀表达式((equal x 'times) '*)((equal x 'difference) '-)(cond((equal x 'setq) '=) ;给定的lisp函数。((equal x 'plus) ' )
前缀表达式转中缀表达式是比较简单的。
实现代码实现函数代码如下:
;求得运算符号
(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))))
运行结果如下: