Recursion 调试简单的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

我对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)
  (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,这将使我朝着正确的方向前进!