【发布时间】:2016-04-13 14:19:46
【问题描述】:
我昨天开始用 lisp 编程,所以如果我犯了一些真正的新手错误,请原谅。我正在尝试创建一个函数,该函数使用钟形三角形计算钟形数,而我的递归三角形函数无法正常工作。我还确定如果我的递归三角形函数正常工作,那么我的递归钟形函数也会以某种方式被破坏。
当我测试我的三角形函数时,我得到了输出:
(defun bell(l n)
(if(< n 1)(list 1))
(if (= n 1)(last l))
(bell (triangle (reverse l) (last l) (list-length l)) (- n 1))
)
(defun triangle(pL nL i)
(if(<= i 0)
(write "equals zero!")
(reverse nL)
)
(triangle pL (append (list (+ (nth i pL) (nth i nL))) nL) (- i 1))
)
(write (triangle '(1) '(1) 0))
=>
"equals zero!""equals zero!"
*** - NTH: -1 is not a non-negative integer
由于某种原因,它会打印我的调试代码两次,即使该函数在第一次调用时应该满足我的基本情况。
【问题讨论】:
-
我回滚了对标题的编辑,因为当 OP is 试图创建一个三角形时,OP 也发现了真正的问题:函数 isn't 终止于预期的基本情况,这是因为 if 的分组。虽然三角形的解决方案可能对 OP 有所帮助,但问题实际上集中在为什么
(defun foo (n) (if (= n 0) 35) 42)将总是返回 42,即使 n 为 0。这是因为代码忽略了如果. -
@JoshuaTaylor 我明白你的意思。 OP 不是在问如何解决三角形,而是问他为什么会出现这个错误。无论如何,我认为这篇文章可能会更有帮助,并且更容易找到更合适的标题,因为当前的帖子甚至不代表错误。
标签: recursion lisp common-lisp