Vad*_*m.K 0 common-lisp syntax-error
我正在尝试创建一个程序,它将在输出行中重写给定行而不重复.我使用这个网站作为编译器:https: //www.tutorialspoint.com/execute_lisp_online.php
这是我的代码
(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)
Run Code Online (Sandbox Code Playgroud)
我花了最近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)
Run Code Online (Sandbox Code Playgroud)
第二行:你能解释一下单括号应该做什么吗?
(
Run Code Online (Sandbox Code Playgroud)
你还记得基本Lisp表达式的Lisp语法吗?
(operator argument0 argument1 ... argumentn)
Run Code Online (Sandbox Code Playgroud)
不是
((operator argument0 argument1 ... argumentn))
Run Code Online (Sandbox Code Playgroud)
对不起格式化,我是函数式编程和LISP的新手,我不知道它应该如何正确完成.
从Touretzky下载Lisp的入门书籍:https://www.cs.cmu.edu/~dst/LispBook/
然后了解Lisp代码的外观.
您还可以使用Lisp为您格式化代码:
这是您未格式化的代码:
[4]> (pprint '(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))
)
)
)
))
Run Code Online (Sandbox Code Playgroud)
这是格式化的代码:
(DEFUN SEARCHDEEP (WHAT WHERE)
(COND ((NULL WHERE) NIL)
(T
(OR
(COND ((ATOM (CAR WHERE)) (EQUAL WHAT (CAR WHERE)))
(T (SEARCHDEEP WHAT (CAR WHERE))))
(SEARCHDEEP WHAT (CDR WHERE))))))
Run Code Online (Sandbox Code Playgroud)
但它会更好地写成:
(DEFUN SEARCHDEEP (WHAT WHERE)
(WHEN WHERE
(OR (IF (ATOM (CAR WHERE))
(EQUAL WHAT (CAR WHERE))
(SEARCHDEEP WHAT (CAR WHERE)))
(SEARCHDEEP WHAT (CDR WHERE)))))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
131 次 |
| 最近记录: |