我想知道为什么在下面的代码中,d
没有被cons
编入x
.任何提示都非常感谢.
(defun it (x)
(setq f '(a b c))
(dolist (d f)
(cons d x))
(print x))
Run Code Online (Sandbox Code Playgroud)
谢谢!
Car*_*icz 10
我对LISP了解不多,但我认为我知道的一些事情可能会对你有所帮助:
(cons dx)不将d"放入"x; 它创建一个由d组成的新值,后跟x的内容.如果x是列表,那么(cons dx)也将是一个列表.
(cons dx)不会改变任何东西; 它会创建一个值,但是如果您没有捕获该值,它将再次被丢弃.特别是,该表达式不会改变x.
您需要使用PUSH来破坏性地更新变量.CONS只返回一个新的cons小区.如果你没有对那个利弊细胞做任何事情,那就消失了.也不是你需要声明所有变量.LET引入了一个新的局部变量F,因此LET在您的示例中很有用.在未声明的变量上执行SETQ或SETF并不是一件好事 - 实际上在Lisp标准中,后果对于这样的操作是不确定的.
(defun it (x)
(let ((f '(a b c)))
(dolist (d f)
(push d x))
(print x)))
Run Code Online (Sandbox Code Playgroud)
或者使用更实用的方法.
(defun it (x)
(print (append '(a b c) x)))
Run Code Online (Sandbox Code Playgroud)
您也可能想要调用REVERSE以获得不同的列表元素顺序.
归档时间: |
|
查看次数: |
630 次 |
最近记录: |