使用cond使用lisp的数字中的位数

时间:2016-11-15 22:16:53

标签: lisp

所以,我知道有一个使用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)))。 但我不明白如何解决这个错误..我做错了电话吗? 感谢。

1 个答案:

答案 0 :(得分:3)

1+之间的简单空格正在将函数1+更改为两个元素。删除那个空间,你就完成了。

顺便说一下,通过编写(< digit 10)代替(> 0 (- digit 10))

来简化数学运算

最后它应该是这样的:

(defun nbDigits (digit)
     (cond 
          ((< digit 10) 1)
          (t (1+ (nbDigits (truncate digit 10))))
      )
     )