调试简单的 LISP 函数



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

最新更新