일반적으로 Scheme 및 기능 언어를 완전히 처음 접했습니다. 이진 검색 트리를 만들려고합니다. 노드의 형식은 세 요소의 목록입니다. 첫 번째 요소는 노드의 값이고 두 번째 요소는 왼쪽 자식 노드이고 세 번째 요소는 오른쪽 자식 노드입니다. 나는 빈 트리를 만드는 "make"함수를 가지고있다 : (()()()). 삽입 기능도 있습니다. 내가 확인하고있다Scheme 이진 검색 트리 오류 (R5RS)
application: not a procedure;
expected a procedure that can be applied to arguments
given: (2 (()()()) (()()()))
arguments...: [none]
다시 확인 :
> (define b1 (make))
> (define b2 (insert b1 1))
> b2
(1 (()()()) (()()()))
> (define b3 (insert b2 2))
난 후 다음과 같은 오류가 나타날 수
;Inserts a number into the tree
(define (insert t x)
(cond ((null? (car t))
(list x (make) (make)))
((< x (car t))
((list (car t) ((insert (cadr t) x)) (caddr t))))
((> x (car t))
((list (car t) (cadr t) ((insert (caddr t) x)))))
)
)
;Makes a new empty tree
(define (make)
(list (list) (list) (list))
)
내가 다음 줄을 실행을 테스트하려면 다음은 코드입니다 내 괄호 ... 그리고 디버그 모드에서 실행, 나는 그것이 나무에 2를 삽입하는 끝에서 실패 참조하십시오. 그 때까지, 그것은 계획대로 작동합니다. 이 부분이 어리석은 구문/논리 오류의 원인입니까?
정말 고마워요! 나는 그것이 내 멍청한 실수라고 생각했다. 매력처럼 일했습니다. 나는 "의심 스러울 때, 더 많은 괄호를 더한다"는 전체가 여기에 적용되지 않는다고 생각합니다. –
@ Ryan Python이 들여 쓰기에 민감하고 Ruby가 공백에 민감한 것을 알고 있습니까? Lisp와 Scheme은 괄호에 민감합니다. –