我们今天在课堂上刚刚介绍了循环,我有一些事情需要做。简而言之,我必须使用循环而不是递归来构建一个列表。我似乎在这里遇到了绊脚石。对于这个例子,我们需要做一个简单的倒计时。该函数接受一个参数,然后返回小于或等于初始参数的所有正整数的列表。(倒计时 5) => (5 4 3 2 1)
无论出于何种原因,我都很难获得循环。我们谈到的是 Loop、Do、Dotimes 和 Dolist。我已经尝试了几个循环,并且总是得到类似的结果。
(defun countdown (num)
(cond ((= num 0) nil)
(T (let* ((list nil))
(loop
(if (= num 0) (return list)
(setf list (cons list num)))
(setf num (- num 1)))))))
我的输出显示如下:
(((((NIL . 5) . 4) . 3) . 2) .1)
更新:我已经解决了这个问题。显然我需要颠倒 中的顺序cons
,所以num
在前面list
。有人愿意解释一下吗?我以为您将列表放在首位,然后将您放在第二位的内容添加到列表的末尾。至少,到目前为止我是这样使用它的,没有问题。