【发布时间】:2016-11-15 22:16:52
【问题描述】:
所以,我知道有一个使用以下 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)))。 但我不明白如何解决这个错误。我打错电话了吗? 谢谢。
【问题讨论】:
-
Lisp 中函数调用的语法是什么?
-
(函数参数)?
-
@R.DM 没错,所以
(1 + (nbDigits ...))表示将1作为函数调用,+和(nbDigits ...)作为两个参数。注意(1+ ...)和(1 + ...)之间的区别。第一个调用名为1+的函数,第二个调用名为1的函数。 -
空格将函数名与函数参数分开,参数彼此分开。
-
(后面仍然没有函数名。你要调用的函数是+,所以你需要一个看起来像(+ 1 ...)的东西
标签: lisp