You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Lisp的点对正确表示指定的盒子结构?

Lisp点对实现共享盒子结构的正确方法

你当前代码里两次调用(cons 3 4)会生成两个独立的cons对象,所以输出里显示的两个(3 . 4)只是值相同,但实际上是两个不同的盒子,不符合目标结构里共享同一个盒子的要求。

要实现共享盒子的结构,你需要先把那个要共享的(3 . 4)绑定到一个变量,然后在构建整体结构时复用这个变量,而不是重复创建新的cons对象。

正确的代码如下:

CL-USER> (let ((shared-pair (cons 3 4)))
           (cons 1 (cons shared-pair (cons shared-pair 2))))

执行后输出的形式还是(1 (3 . 4) (3 . 4) . 2),但这里的两个(3 . 4)指向的是同一个cons对象(也就是同一个盒子)。

你可以用eq函数验证它们是否为同一个对象:

CL-USER> (let* ((shared-pair (cons 3 4))
                (result (cons 1 (cons shared-pair (cons shared-pair 2)))))
           (eq (second result) (third result)))
T

而你之前的代码执行后,用同样的eq检查会返回nil,因为是两个完全独立的盒子。

内容的提问来源于stack exchange,提问作者dejvoos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 03:54:56