我是 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
的普通参数。