774919153 发表于 2023-5-8 14:35:26

cons函数求助

(entmake (list      '(0 . "TEXT")
                              (cons 1 (rtos a 2 1))
                              (cons 10 b)
                              (cons 40 zg)
                              (cons 11 b)
                              '(72 . 1)
                              '(73 . 2)
                              (cons 50 c)
                        )
               )
哪位大神可以解释一下这里面的cons函数是什么含义呀?
我知道的功能是把第一个参数加到第二个参数表里面。
这段语言是一个绘制多段线标注的一部分,好像要实现的功能是对标注样式的设置。还是云里雾里的。

飞雪神光 发表于 2023-5-8 15:04:28

构成像这样格式 '(72 . 1)的点对

774919153 发表于 2023-5-8 15:18:50

飞雪神光 发表于 2023-5-8 15:04
构成像这样格式 '(72 . 1)的点对

还是不了解目的是什么。

774919153 发表于 2023-5-8 15:22:38

(entmake (list
             '(0 . "TEXT" )
                            (cons 1 text)
               ;(cons 7 textst) ;文字样式
               ;(cons 8 textlay);文字图层
               (cons 10 zd);文字插入点坐标
                            (cons 40 0.5);字高10
                            (cons 41 0.8);宽高比0.8
                            (cons 50 ang);文字角度
                                      );end list
   );end entmake
还有一个类似的,也是从论坛里看到的。
不理解为什么cons函数可以实现这些功能。

飞雪神光 发表于 2023-5-8 15:27:01

命令: (cons 41 0.8) (41 . 0.8)   
(cons 41 0.8)等于'(41 . 0.8)组码值为变量时就使用cons 将组码和变量拼成一个点对

vitalgg 发表于 2023-5-8 16:56:03

本帖最后由 vitalgg 于 2023-5-9 00:10 编辑

https://gitee.com/atlisp/atlisp- ... E9%97%A8/1-lisp.org

点对是组成表的基本形式。


链表 list
利用点对(Cons)我们可以创造出很多结构,而当中最简单的,或许就是链表(linked list)。链表其实就是把 Cons 的 CAR 指定成某些元素,而把 CDR 指定到另一个 Cons 或是 NIL 。如下,我们可以经由 list 函数来创造链表。

xcmdos 发表于 2023-5-8 23:23:15

774919153 发表于 2023-5-8 15:18
还是不了解目的是什么。

只需要理解A=B就行啦,至于为什么A要等于B,这是程序内部函数的事,不要去扣这些细节

帝都划水王 发表于 2023-5-9 11:35:54

你这问的。为什么+号 就是把两个数加起来一样

774919153 发表于 2023-5-12 14:02:02

理解了,谢谢各位大佬
页: [1]
查看完整版本: cons函数求助