Recursion 调试简单的LISP函数。
我对lisp很陌生,我甚至很难把脚弄湿。我敢肯定,一旦我有了一些函数,我就能够在它们的基础上,处理更高阶的函数和更复杂的问题 有人能指出我在下面代码中的错误吗Recursion 调试简单的LISP函数。,recursion,lisp,funcall,Recursion,Lisp,Funcall,我对lisp很陌生,我甚至很难把脚弄湿。我敢肯定,一旦我有了一些函数,我就能够在它们的基础上,处理更高阶的函数和更复杂的问题 有人能指出我在下面代码中的错误吗 (defun indeHelper(A L N) (cond (Null N) nil) ((= A (first L) (cons N (indeHelper A (rest L) (+ 1 N))))) (t (indeHelper A (rest L) (+ 1 N)))) (defun inde(A L) (funca
(defun indeHelper(A L N)
(cond (Null N) nil)
((= A (first L) (cons N (indeHelper A (rest L) (+ 1 N)))))
(t (indeHelper A (rest L) (+ 1 N))))
(defun inde(A L)
(funcall indeHelper(A L 1)))
我怎么称呼这个?我有一个函数,我认为它可以正常工作,但是我不能得到调用它的语法。谢谢您的帮助。您有许多语法问题
COND
的语法是:
(cond (test1 body1...)
(test2 body2...)
...)
您的test1
应该是(null n)
,而body1
应该是nil
,但您没有将它们括在括号中。然后,您的其他测试和主体在cond
之外,从缩进中可以明显看出这一点
应该是:
(defun indeHelper(A L N)
(cond ((Null N) nil)
((= A (first L) (cons N (indeHelper A (rest L) (+ 1 N)))))
(t (indeHelper A (rest L) (+ 1 N)))))
在第二个函数中,不需要使用funcall
。当您调用动态确定的函数时(例如,编写高阶函数时),使用该函数,但您只是调用已知函数。应该是:
(defun inde(A L)
(indeHelper A L 1))
如果确实需要使用funcall
,则语法为:
(funcall someVariable A L 1)
使用
funcall
时,参数不会放入嵌套列表中,它们只是funcall
的普通参数。您有一些基本语法问题,从第一个函数的缩进中可以明显看出。请注意,第3行和第4行没有相对于(cond
)缩进。感谢Barmar,这将使我朝着正确的方向前进!