プログラムを作成しようとしていますが、出力行に重複がなく、指定された行が書き換えられます。私は、コンパイラとして、このウェブサイトを使用しています: https://www.tutorialspoint.com/execute_lisp_online.phpCommon Lispラムダ式エラー
そしてここでは、私のコード
(SETQ X (LIST 2 -3 (LIST 4 3 0 2) (LIST 4 -4) (LIST 2 (LIST 2 0 2))-3))'
(DEFUN SEARCHDEEP (WHAT WHERE) ;Function will find out if atom `WHAT`is in a row `WHERE` => works fine
(COND
((NULL WHERE) NIL)
(T (OR
(COND
((ATOM (CAR WHERE)) (EQUAL WHAT (CAR WHERE)))
(T (SEARCHDEEP WHAT (CAR WHERE)))
)
(SEARCHDEEP WHAT (CDR WHERE))
)
)
)
)
(DEFUN REMDOUBLES (INPUT OUTPUT)
(
(COND
((NULL INPUT) NILL) ;recursion exit
(T ; funstion
(OR ; step into or go forward
(COND
((ATOM (CAR INPUT)) (COND
((NOT (SEARCHDEEP (CAR INPUT) OUTPUT)) (APPEND OUTPUT INPUT)) ;if this atom wasn't added => append
)
)
(T (REMDOUBLES (CAR INPUT) OUTPUT)) ; step into (car input => list
)
(REMDOUBLES (CRD INPUT) OUTPUT) ; go forward, car input is anatom
)
)
)
)
)
(SETQ OUT (QUOTE)) ;Empty row
(REMDOUBLES X OUT)
(PRINT OUT)
である私は、しかし、私は何見当もつかない、スタック上に、ここではこのコードや他の回答を確認し、最後の2時間を費やしています私はここで行方不明です。私はこのエラーを取得しています
:
の書式設定のため申し訳ありません*** - SYSTEM::%EXPAND-FORM:
(COND ((NULL INPUT) NILL)(T(OR (COND ((ATOM (CAR INPUT)) (COND ((NOT (SEARCHDEEP (CAR INPUT) OUTPUT))(APPEND OUTPUT INPUT)))) (T (REMDOUBLES (CAR INPUT) OUTPUT))) (REMDOUBLES (CRD INPUT) OUTPUT)))) should be a lambda expression
、私は関数型プログラミングとLispで初心者だ、と私はそれが適切に行われるべきか見当がつかない。
'(DEFUN REMDOUBLES(INPUT OUTPUT)'と '(COND')の間に余分な開き括弧があります。コードを正しくインデントしてください。任意の半分のエディタがインデントします。 – Gilles
'((NULL INPUT)NILL)'行にもエラーがあります。 '((NULL INPUT)NIL)'にする必要があります。 –