Scheme 方案定义cdr合同违约预期对给定';()

Scheme 方案定义cdr合同违约预期对给定';(),scheme,racket,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)))

给定定义树:

(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)
,但我总是遇到这个错误。任何有用的提示都将不胜感激。

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

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

此外,我建议您重新考虑表示和/或遍历信息的方式,正如您所见,从如此复杂的树中提取数据非常困难…

好的,是的,我找到了一种通过caadr更好地访问信息的方法,但是遍历树我遇到了麻烦。我试图使用递归,如果它不等于最后一个节点,那么它将称之为self。但是我想不出一个方法来移动我的位置而不硬编码