2017-04-22 3 views
0

가 정의 트리를 감안할 때() '주어진 CDR 계약 위반 예상 쌍을 정의 : 나는 값에 액세스하려고방식은

(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) 같은 특정 값을 얻을하려고 할 때 오류 얻을 : 나는 (car (cdr (cdr (cdr '(tree))))), (cdddr tree)을 시도했지만 나는 항상 오류가

cdr: contract violation
expected: pair?
given: '().

합니다. 도움이되는 정보를 제공해 주시면 감사하겠습니다.

답변

1

tree을 목록에 넣지 마십시오. '(tree)은 그저 이전에 정의한 실제 변수의 값과 관계가없는 'tree 기호가있는 목록 일뿐입니다. 그리고 원하는 요소에 액세스하려면 다음을 수행하십시오

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

을 또한, 나는 당신이 볼 수있는 당신이, 당신이 대표 및/또는 정보를 가로 지르는있는 방법을 재고 것을 제안하고 싶습니다, 그것은에 꽤 어렵다 그런 복잡한 나무에서 데이터를 추출하십시오 ...

+0

ok yea 나는 캐딜러에 의해 정보에 더 잘 접근 할 수있는 방법을 찾았지만 나무를 가로 지르며 벽에 들어갑니다. 마지막 노드와 같지 않으면 재귀를 사용하려고 시도했다. 하지만 하드 코딩없이 실제로 내 위치를 이동하는 방법을 알아낼 수는 없습니다. – mspice