嵌套列表
下午好,提前感谢您的帮助。我有一个嵌套列表,希望提取列表嵌套部分中的项目,但不确定如何执行。
我想没有人能告诉我该找什么?
例如,我有一个名为mylist的嵌套列表:
(列表0(项目01A项目01B项目01C)列表1(项目1A项目1B项目1C)列表2….)
我可以使用函数(nth x mylist),其中x是列表编号(1给出“list1”),但我如何从该列表中获取项目?(如第1A项或第2C项等)。
再次感谢 它们是您可以使用的示例列表的结构化方式(cadr(成员:
(cadr (member "list2"
(list "list1" '("item1a" "item1b" "item1c") "list2" '("item2a" "item2b" "item2c")
"list3" '("item3a" "item3b" "item3c")
)
)
)
如果它的结构更像这样,您可以使用(cdr(assoc:
(cdr (assoc "list2"
'(("list1" ("item1a" "item1b" "item1c"))
("list2" ("item2a" "item2b" "item2c"))
("list3" ("item3a" "item3b" "item3c"))
)
)
)
然后您可以使用vl-some:
(vl-some '(lambda (x)
(if (= "item2b" x)
x
)
)
(cadr (member "list2"
(list "list1" '("item1a" "item1b" "item1c") "list2"
'("item2a" "item2b" "item2c") "list3" '("item3a" "item3b" "item3c")
)
)
)
) 这对我来说并不适用,但我将查看cadr命令,看看是否可以解决这个问题。
在上面的示例中,这是否允许您指定要返回嵌套列表中的哪一项?我看不出它是怎么做到的 您列表中的数据类型是什么?也许发布实际列表?还要注意,如果这些是字符串,则函数区分大小写。 您可能需要研究(原子)函数-大卫 你好
列表中的项目是字符串,其形式如下:
((项目1(项目1A项目2A项目3A项目4A))(项目2(项目2A))(项目3(项目3A))(项目4(项目4A))(项目5(项目5A项目5B项目5C)))
例程的前面部分组成了列表,这就是它在命令行中的显示方式)
所以在位置y的列表中寻找嵌套的列表项x。
如果我这样做(第2个mylist),它将返回“item3”-主列表名。太好了,反正我以后需要。但是看看如何从列表中选择项目1、2或3。如果有意义的话,可以把第2个命令连接起来。
CDR和CADR说他们只返回列表中的第二项?
或者我可以将嵌套列表分开,然后滚动浏览它吗
(我使用嵌套列表的原因是我不知道每次会有多少个列表,否则我会选择一组简单的列表,填充每个列表,并以更简单的方式查看它们) (cadr(成员是您的数据结构所需要的。如果还不太晚,我会将其重组为关联列表。
下面是一个使用两个索引号的快速示例。。虽然有很多方法可以剥这只猫的皮
(defun _getsomething (l idx1 idx2) (nth idx2 (cadr (member (nth idx1 l) l))))
(_getsomething
(list "list1" '("item1a" "item1b" "item1c") "list2" '("item2a" "item2b" "item2c") "list3"
'("item3a" "item3b" "item3c")
)
2
2
)
回到使用NTH,你可以在这里直接把它们放在多个层次上作为例子
(setq lst (list "list1" '("item1a" "item1b" "item1c") "list2" '("item2a" "item2b" "item2c") "list3" '("item3a" "item3b" "item3c")))
(setq num (/ (length lst) 2))
(setq y 0) ;2nd item
(setq x 0)
(repeat num
(setq y 0)
(setq valname (nth x lst))
(setq x (+ x 1))
(setq val1 (nth y (nth x lst)))
(setq val2 (nth (setq y (+ y 1))(nth x lst)))
(setq val3 (nth (setq y (+ y 1))(nth x lst)))
(setq x (+ x 1))
(alert (strcat valname "\n" val1 "\n" val2 "\n" val3))
)
页:
[1]