Closed. This question is off-topic. It is not currently accepting answers. Learn more
想改进这个问题吗Update the question所以堆栈溢出的值小于aa>。
两年前关闭。
我对口齿不清还很陌生,连脚都湿了都很难我敢肯定,一旦我有几个函数在工作,我将能够建立在它们之上,并处理更高阶的函数和更复杂的问题。
有人能在下面的代码中指出我的错误吗。
(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的普通参数。

关于recursion - 调试简单的LISP功能。 ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43127783/

10-08 21:53