将变量值列表添加到Lisp中的列表中

时间:2014-01-01 14:36:06

标签: list lisp append common-lisp

这是我的第一篇文章,所以如果我太模糊或没有正确完成,我道歉!

所以我有一个空列表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) ) ...

我有什么想法可以做到这一点?

非常感谢任何帮助!

1 个答案:

答案 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)))))