recursion - 调试简单的 LISP 函数。

标签 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)
  (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/

相关文章:

algorithm - 计算走 1、2 或 3 步后爬 n 步的方法

lisp - 查找输入列表中每个元素出现次数的函数

loops - for循环方案

common-lisp - Common Lisp - 如何使用关键字参数调用/应用函数?

python - 如何使用递归计算嵌套列表的最大长度?

php - 计算混合数组php中字符串的次数

python - 基于递归的合并排序逻辑的替代方案

string - 从 lisp 中的八位字节解码单个字符

c - 如何在没有 rb_string_eval 的情况下使用 C API 调用 ObjectSpace.each_object?