-3

我对 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)))

另外我怎么称呼这个?我有一个我认为可以正常工作的函数,但我无法获得调用它的语法。谢谢你的帮助。

4

1 回答 1

3

您有许多语法问题。

的语法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.

于 2017-03-30T20:40:18.333 回答