这是我的第一篇文章,所以如果我太模糊或没有正确完成,我道歉!
所以我有一个空列表L1和两个变量x和y可以是任何东西。
比如说x = 10,y = 20。
我希望列表L1以x开头,然后我有一个WHEN循环,每次循环时都会将y添加到列表中,但我似乎无法以我想要的格式获取列表。
我目前有:
(let ((L1 x))) ; Adds x to the list
(loop
(when (> n 10) (return)) ; While n < 10, add's y to the list.
(setq L1 (list L1 y))
(incf n)))
返回:
(10 20)
((10 20) 20)
(((10 20) 20) 20)
((((10 20) 20) 20) 20)
(((((10 20) 20) 20) 20) 20) ...
但是我希望它能够回归:
( (10) (20) )
( (10) (20) (20) )
( (10) (20) (20) (20) )
( (10) (20) (20) (20) (20) )
( (10) (20) (20) (20) (20) (20) ) ...
我有什么想法可以做到这一点?
非常感谢任何帮助!
答案 0 :(得分:2)
例如:
(defun test ()
(let ((x 10) (y 20) (n 10))
(cons (list x)
(loop
for i from 1 to n
collect (list y)))))
然后
(test)
=> ((10) (20) (20) (20) (20) (20) (20) (20) (20) (20) (20))
或
(defun test ()
(let ((x 10) (y 20) (n 10))
(cons (list x) (make-list n :initial-element (list y)))))