GNUClISPを使用してCommonLispでプログラムを作成してコンパイルしようとしています。次のようなリストを入力したいと思い(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関数でラムダを使用する必要があるというコンパイルエラーが発生します。これはdouble((コマンドを期待しているためデータの前にありますが、そこに何を置くべきかわかりません。再帰ループを妨げるため、condは機能しないと思います。また、データLはそのまま印刷されますか?コンパイラはを認識しませんでした(print (data L))
。
私はこのコードに1週間以上取り組んでおり、自分でトラブルシューティングを試みていますが、途方に暮れています。誰かが私が間違っていることを説明してくれれば幸いです。
私が持っているもう1つの質問は、コンパイルされたファイルを実行すると、funcallエラーが発生する代わりにプログラムが実行されるように、プログラムにユーザーに(pre'(A ...など))を入力するように求める行を表示させる方法です。 ?
お時間をいただきありがとうございます。