Lisp编程错误(堆栈溢出(深))

时间:2013-03-04 01:44:28

标签: recursion lisp

我要编写一个lisp程序来生成十六进制数的实际值。我编写了一个函数,但似乎得到了stackoverflow(深层)错误。我想知道是否有人能指出我的错误或指导我朝着正确的方向前进。

如果没有为此问题发布代码,我将不胜感激,因为这是家庭作业的一部分。因此,我只想解释或指示我可能出错的地方。

我觉得我的问题是我的递归没有终止,但我不知道如何解决它。

这是我的代码:

(defun calc (hex)
  (if hex
    (if (> (length hex) 1)
     ( + (first (reverse hex)) (* 16 (calc (reverse hex)))) hex))) 

提前致谢。

1 个答案:

答案 0 :(得分:3)

“基本情况”(递归实际停止的情况/状态)是hex的长度为1或更小。告诉我,每次再次致电calc时,calc的输入是否会越来越小?如果没有,那么从数学上讲,输入无法达到基本情况。

假设hex以长度9开头。当您再次拨打calc时,您已撤消hex。所以现在hex被反转,但它的长度仍为9 。我怀疑这就是为什么递归永远不会停止。