我正在尝试使用 GNU ClISP 在 Common Lisp 中编写一个程序来编译它。我想输入一个列表,例如(A(B (C) ()) (D (E) (F (G) ())))
并根据第一个单词打印出前序、中序或后序遍历。例子:
(pre '(A(B (C)... etc))
我无法将我的逻辑放入 Clisp 表示法中。我目前有以下代码:
(defun leftchild (L)(cadr L))
(defun rightchild (L)(caddr L))
(defun data (L)(car L))
(defun pre (L)(if (null L) '()((data L)(pre(leftchild L))(pre(rightchild L)))))
... similar in and post functions
我收到编译错误,说我应该在我的 pre 函数中使用 lambda。我认为这是由于双 (( 在 data 前面,因为它需要一个命令,但我不确定应该放什么。我不认为 cond 会起作用,因为这会阻碍递归循环。另外,数据 L 会按现在的样子打印吗?编译器无法识别(print (data L))
.
我已经在这个代码上工作了一个多星期,试图自己解决它,但我不知所措。如果有人能解释我做错了什么,我将不胜感激。
我的另一个问题是如何让程序提示用户输入 (pre '(A... etc)) 以便当我运行编译文件时程序将运行而不是给出 funcall 错误?
感谢您的时间。