所以,我知道有一个使用if语句的解决方案,如下所示
(defun numdigits (n)
(if (< -10 n 10)
1
(1+ (numdigits (truncate n 10)))))
但是我试图加深我的知识并理解将if语句转换为cond语句。所以我尝试使用cond语句,但是我收到一个错误,老实说,我不知道为什么。
这就是我的所作所为:
(defun nbDigits (digit)
(cond
((> 0 (- digit 10)) 1)
(t (1 + (nbDigits (truncate digit 10))))
)
)
我所拥有的逻辑是: 如果0大于x-10,则返回1(这意味着该数字小于10)。否则,返回1 + nbDigits(当数字除以10时的数字的商数),直到达到基本情况为止。
我收到错误: 算子位置的非法论证:1 in(1 +(NBDIGITS(TRUNCATE DIGIT 10)))。 但我不明白如何解决这个错误..我做错了电话吗? 感谢。
答案 0 :(得分:3)
1
和+
之间的简单空格正在将函数1+
更改为两个元素。删除那个空间,你就完成了。
顺便说一下,通过编写(< digit 10)
代替(> 0 (- digit 10))
最后它应该是这样的:
(defun nbDigits (digit)
(cond
((< digit 10) 1)
(t (1+ (nbDigits (truncate digit 10))))
)
)