给定定义树:
(define tree
'("S" (("-" ("A" 3333) ("A" 4444))
("W" (("+" ("R" 0) ("R" 1))
("+" ("R" 1) ("R" 2))
("+" ("R" 2) ("R" 3))
("+" ("R" 3) ("R" 4))
("+" ("R" 4) ("R" 5)))
(("-" ("R" 0) ("R" 1))
("-" ("R" 1) ("R" 2))
("-" ("R" 2) ("R" 3))
("-" ("R" 3) ("R" 4))
("-" ("A" 1000) ("A" 2000)))))))
我正在尝试访问这些值。执行car
和cdr
适用于第一个并完成剩下的工作,但当我尝试获取特定值("A" 1000)
时,我会收到错误:
cdr:合同违规
预期:对? 给出:'()。
我尝试了(car (cdr (cdr (cdr '(tree)))))
,(cdddr tree)
,但我总是遇到这个错误。任何有用的提示将不胜感激。
答案 0 :(得分:1)
您不能将tree
放在列表中:'(tree)
,这只是一个符号为'tree
的列表,与您之前定义的实际变量的值没有关系。要访问所需的元素,请执行以下操作:
(car (cdr (car (car (cdr tree)))))
=> '("A" 3333)
另外,我建议您重新考虑表示和/或遍历信息的方式,正如您所看到的,从这样一个复杂的树中提取数据非常困难......