方案定义cdr合同违规预期对给出'()

时间:2017-04-22 18:24:55

标签: scheme racket

给定定义树:

(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)))))))

我正在尝试访问这些值。执行carcdr适用于第一个并完成剩下的工作,但当我尝试获取特定值("A" 1000)时,我会收到错误:

  

cdr:合同违规
    预期:对?     给出:'()。

我尝试了(car (cdr (cdr (cdr '(tree)))))(cdddr tree),但我总是遇到这个错误。任何有用的提示将不胜感激。

1 个答案:

答案 0 :(得分:1)

您不能将tree放在列表中:'(tree),这只是一个符号为'tree的列表,与您之前定义的实际变量的值没有关系。要访问所需的元素,请执行以下操作:

(car (cdr (car (car (cdr tree)))))
=> '("A" 3333)

另外,我建议您重新考虑表示和/或遍历信息的方式,正如您所看到的,从这样一个复杂的树中提取数据非常困难......