前置式を中置式に変換する (lisp 実装)

前置式を中置式に変換するのは比較的簡単です。

実装コード

実装関数コードは次のとおりです。

;求得运算符号
(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))))

操作の結果は次のとおりです。

 

 

おすすめ

転載: blog.csdn.net/Alexabc3000/article/details/127350011