明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 931|回复: 4

[提问] Cons 用法的一点疑问

[复制链接]
发表于 2023-6-14 16:43:32 | 显示全部楼层 |阅读模式
平时用Cons,经常是形成点对。(cons 1 2)返回(1 . 2),(cons '1 2)返回(1 . 2)。这两个返回值中的1,有什么不同么?

另外,我想生成(1 . (3  4 5 6 7)或者 (“1” . (1 2 3 4 5 6))这样的表对,可以么?
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2023-6-14 17:03:54 | 显示全部楼层
点对的最后一项一定是atom,前边是什么没有具体要求,比如(1 . 2),(1 2 3 4 . 5),((1 2 3 4) . 5)都是有效点对,虽然后边两种实际基本用不到,但都是有效的点对;
但类似(1 . (3  4 5 6 7))或者 (“1” . (1 2 3 4 5 6))的数据是不存在的,CAD的list认为它是不合法的,所以无法构建出它们,哪怕通过read都得不到这样的数据,(read"(1 . (3  4 5 6 7))")将得到的(1 3 4 5 6 7)
CONS的作用有两个,构建点对只是其中一个作用,另一个作用是给已有的表在表头位置增加一个元素,Adds an element to the beginning of a list, or constructs a dotted list
(cons new-first-element list-or-atom)
(cons'(1 2 3 4)5)->((1 2 3 4) . 5),(cons 1 nil)->(1)
另一个和CONS极其相似但不尽相同的是vl-list*,但都无法构建出楼主希望的数据,因为那样的数据本身是不合法的表或点对


点评

(1 . (3 4 5 6 7))是合法的,只是princ显示为(1 3 4 5 6 7),带点的才是最合法,不带点为省略显示  发表于 2023-6-15 16:32
回复 支持 1 反对 0

使用道具 举报

发表于 2023-6-14 17:13:02 | 显示全部楼层
本帖最后由 vitalgg 于 2023-6-14 18:26 编辑

(1 .  (3 4 5 6 7)) 与 (1 3 4 5 6 7) 是等价的。

构成lisp基本元素是原子和点对,而不是原子和列表。
列表是由点对组成的。
Lisp 在打印链表的时候,会有一些原则:它输出的时候会省略掉一些 . 连结点对的点,以及 () 括号。而省略的原则如下,如果这个点对的 CDR 是 NIL 的话,那这个 NIL 跟它前面的连结点将不会被印出来;如果这个点对 A 的 CDR 是另外一个点对 B 的话,那在点对 B 前面的连结点以及点对 B 本身的小括号都不会被印出来。

更详细的内容见:
https://gitee.com/atlisp/atlisp- ... E9%97%A8/1-lisp.org

评分

参与人数 1明经币 +1 收起 理由
tryhi + 1 赞一个!

查看全部评分

发表于 2023-6-16 12:54:28 | 显示全部楼层
太高级学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-16 20:35 , Processed in 0.172179 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表