如何仅用cons函数重构Common Lisp列表(1 3 ((2))(7))?
用cons构造嵌套列表的解决方案
你当前代码的问题出在第三个元素:目标列表的第三个元素是((2)),这是一个以(2)为唯一元素的列表,而你写的'(2)只是(2)本身,少了一层嵌套。
要构造((2)),需要先构造内层的(2),再把它作为元素放到新的列表里:
- 构造
(2):(cons '2 nil) - 把
(2)作为元素构造((2)):(cons (cons '2 nil) nil)
把这个替换到你原来的代码里,就能得到目标列表:
(cons '1 (cons '3 (cons (cons (cons '2 nil) nil) (cons '(7) nil))))
如果要完全严格只用cons(不用'直接创建列表),'(7)也可以替换成(cons '7 nil),最终代码:
(cons '1 (cons '3 (cons (cons (cons '2 nil) nil) (cons (cons '7 nil) nil))))
运行这段代码,就能得到你想要的(1 3 ((2)) (7))。
内容的提问来源于stack exchange,提问作者CL-Beginner Zoni
相关产品推荐
相关产品推荐

