这就是我到目前为止所做的,它告诉我它不是列表类型。
(defun number_list(n)
(setf x
(if (zerop (truncate n 10))
(list n)
(append (number_list (truncate n 10)) (list (mod n 10)))))
(length x))
当我删除(长度x)时,我可以看到结果是一个列表。
非常感谢任何帮助。
最佳答案
您的解决方案使用全局变量x
,这通常是一个坏主意,特别是在递归函数中。然后,您创建一个列表来计算位数。这其实没有必要。
使用列表
如果您想使用列表,我建议您将问题分成两部分:
1。将数字转换为列表
如果您删除 setf x
,您的函数可以很好地实现此目的:
(defun number_list(n)
(if (zerop (truncate n 10))
(list n)
(append (number_list (truncate n 10)) (list (mod n 10)))))
2。计算位数
(defun numdigits (n)
(length (number_list n))).
替代方案
但我建议一个简单的递归定义,例如:
(defun numdigits (n)
(if (< -10 n 10)
1
(1+ (numdigits (truncate n 10)))))
关于recursion - 定义一个递归函数来计算common lisp中数字的位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20015911/