clisp 中的 cons

;nil -> c -> b c -> a b c
(cons 'a (cons 'b (cons 'c ())))
; b c -> a b c
(cons 'a '(b c))
;c -> b c -> a b c
(cons 'a (cons 'b '(c)))

刚学clisp,做到一个习题:

给出 3 种不同表示 (a b c) cons表达式。

于是乎,傻傻地敲了几下。快速找到了两种:即上面两种。

对于第三种我尝试了很多写法:

(cons 'a (cons 'b 'c))

输出为:(A B . C)

(cons 'a (cons (cons 'b ()) (cons 'c ())))

输出为:(A (B) C)

(cons 'a (cons 'b (cons () 'c)))

输出为:(A B NIL . C)

(cons '(a b c) nil)
输出为:((A B C))

快把我折磨疯了。最后求助于google。

找到一篇文章:理解lisp中的cons点击打开链接

感觉说得很有道理,什么点列表, 真列表。貌似找到了答案。多厉害啊,一条规则。但是,如何解释

(cons 'a '(b c))

而且,他的想法也就只能推出

(cons 'a (cons 'b (cons 'c ())))
而且我从来不喜欢什么定理,规律。死记硬背的东西,我一向不屑。因为我坚持所有定理规律都是人写的,那么一定是有原因的,是可以被理解的。

后来我发现我已经成功的两个列表中,貌似都是; a b c ()构成的。而且()都是在最右端。(这点和他说的一致:真列表最右端为nil,这是成为真列表的必要条件)

我又尝试了多次后发现,按照优先级,最里层的括号内先执行,并且按照执行顺序进行cons,在cons过程中需要保证真列表(*)位于最右边。(比较理论的表达)

土鳖表达:先定义模板:(*),然后自右向左塞入元素。(多简单啊,多和谐啊)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值