是否有人可以帮助我在共同的LISP中编写一个计算列表中数字的函数? 我写的代码如下,但它不起作用!
(defun count-numbers(lst)
(let(result()))
(dolist(number lst)
(push number result))
(length result))
例如,当我输入此查询"(count'(r 4 f d w 2 3 4 1 z))"
时,我必须得到5。
答案 0 :(得分:5)
既然是家庭作业,我只想指点一下。第一:简单。如果您是Common-Lisp的新手,只需使用其基本功能即可。例如:递归。纯粹的功能风格。想想这样的事情:
(defun count (list counter)
;; something
)
我们首先检查列表。如果它是空的,我们已经检查了所有元素,所以我们返回计数器。如果 list 不为空,我们
使用(numberp n)。如果 n 是数字,则返回T,否则返回NIL。
答案 1 :(得分:0)
(defun count-numbers (lst)
(let (result ()))
(dolist (number lst)
(push number result))
(length result))
检查缩进。那是你想要的吗?也许不是。
然后你还将所有元素都推送到结果列表?这就是你想要的吗?
以下是数字上的函数列表。 http://www.lispworks.com/documentation/HyperSpec/Body/c_number.htm 也许你需要一个?
这是一本很好的Lisp入门书:http://www.cs.cmu.edu/~dst/LispBook/
答案 2 :(得分:0)
我想说有很多方法可以解决这个问题,一个是命令式循环,就像已经编写的大多数正确的解决方案一样,递归计数功能(这可能是最糟糕的方式,因为在CL中无法保证你不会破坏堆栈),或者你可能实际在生产中使用的功能方法。最后一个是:
(defun count-numbers (list) (count-if #'numberp list))