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。但是我想不出一个方法来移动我的位置而不硬编码