这就是我所做的,直到现在它告诉我它不是类型列表。
(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)时,我可以看到结果是一个列表。
感谢任何帮助。
答案 0 :(得分:2)
您的解决方案使用全局变量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)))))
答案 1 :(得分:0)
如果你想获得十进制数字然后计算长度,假设数字是0或更大的整数。
(defun number-list (n)
(if (< n 10)
(list n)
(cons (mod n 10)
(number-list (truncate n 10)))))
CL-USER 44 > (length (number-list 123456789))
9
但最好直接计算数字。请参阅其他答案。