BIGAL 发表于 2022-7-6 00:16:13

Snownut使代码更清晰
 
 

(setqlmbrlst (list '(2.0 1) '(3.0 1) '(5.0 1) '(6.0 1) '(7.0 3) '(12.0 4) '(14.0 1) '(16.0 2) '(18.0 5)))


(setq lgth (length lmbrlst))
       textstr (strcat (itoa(cadr(assoc lgth lmbrlst))) " @ " (rtos lgth 2 1)"' long")
)
请参见上述修订内容

ymg3 发表于 2022-7-6 00:18:20

斯派克,
 
虽然BIGAL和Snownut代码肯定会工作,但也许您应该研究一下
创建列表并使其成为真正的点对列表的例程。
 
可以很简单地更改如下语句:
 

(setq yourlist (cons (list a b) yourlist)

to
(setq yourlist (cons (cons b a) yourlist))

Snownut 发表于 2022-7-6 00:22:17

ymg3,
 
我试着向斯派克展示,在他最后一条关于这个主题的帖子“列表操作”中。。。。(包括代码)

ymg3 发表于 2022-7-6 00:23:58

雪果,
 
你知道有句谚语:“你可以把马牵到河边,但你不能强迫他喝水。”。
 
ymg公司

BIGAL 发表于 2022-7-6 00:26:56

好的,他要求点对,但是((a b c d)(f g h i)(j k l m))呢,因为列表不再是点对。您可以使库defun 2 vars、3 vars等等。

Lee Mac 发表于 2022-7-6 00:31:35

 
反过来说:“你的列表不是点对”
 
为了完整性,可以通过使用原子作为第二个参数评估cons函数来构造点对,例如:
或者,如果点对包含文字数据,则可以通过使用撇号或引号函数和文字列表来形成:
你也可以用两个以上的参数构造点列表,然而,在我的经验中很少用到这些参数:
然而,列表不一定是虚线对的列表,它在程序中“可行”,您可以使用当前的列表结构而不会出现问题:
事实上,如果在程序的未来扩展中,每个列表项可能有两个以上的项,则该列表结构允许扩展,同时保留向后兼容性,因为cadr总是访问列表中的第二项。
 
然而,如果使用点对列表,则在不修改代码其他部分的情况下,不可能将更多项合并到每一对中(因为cdr将返回列表而不是原子)。

ymg3 发表于 2022-7-6 00:34:33

李,
 
同意我们可以在程序中使用列表。
 
这是我们在Lisp中主要做的。
 
不管你怎么说,这是一个列表,不是虚线列表。
 
我们知道,我们可以在该列表中使用assoc。
 
ymg公司

Lee Mac 发表于 2022-7-6 00:37:46

 
对不起,你的观点是什么?

BIGAL 发表于 2022-7-6 00:39:51

比如李,你的观点是什么?李和我都同意,只要列出一份清单,列出满足任务所需的尽可能多的小组

spiker7221 发表于 2022-7-6 00:44:20

这能行吗。。。?
 
11
 
 
页: 1 [2]
查看完整版本: 从虚线中提取文本