변경할 수없는 이진 검색 트리를 만들려고합니다. 나는 빈리스트를 생성하기 위해 생성자를 생성하고 다음 코드를 사용하여 트리에 하나씩 요소를 추가하는 메서드로 시작했다.라켓에 이진 검색 트리를 만드시겠습니까?
#lang racket
(define (constructTree) '())
(define (addToTree Tree k v)
(cond [(null? Tree)
(cons Tree cons((cons k '()) v))]
[else
(cond [(>(car Tree) k)
(cons Tree cons((cons k '()) v))
]
[else
(cons Tree '() cons((cons k '()) v))
]
)]
)
)
(define bst (addToTree (addToTree (addToTree (addToTree (constructTree)3 "3") 1 "1") 2 "2") 5 "5"))
bst
내가 불변을 의미하는 것은 내가 '()
(define b1 (addToTree b0 4 "4"))
b1
이 '(4 "4"()())
(define b2 (addToTree b1 6 "6"))
b2
이 ... '(4 "4"() (6 "6"()()))
등을 반환해야합니다 반환해야합니다 반환해야
b0
(define b0 (constructTree))
를 호출하는 경우 입니다.
하지만이 오류가 발생합니다 : 응용 프로그램 : 프로 시저가 아닙니다; 주어진 인수에 적용 할 수있는 절차는 다음과 같습니다. '(3) arguments ... :
이 오류가 발생하는 이유는 무엇입니까? 미리 감사드립니다.
즉각적인 문제는 어떤 경우에는 괄호 밖에 '죄수'를 넣었다는 것입니다. –
@BrendanCannell 나는 당신이 무엇을 의미하는지 정확히 이해하지 못했다. 일반적으로 라켓과 함수 언어로 된 나의 처음 코드를 알고있다. – kero
세 가지 경우 모두에서 (cons tree cons ((cons k '()) v))'should be (cons tree (cons k '()) v))'. –