Scheme (LISP)에 간단한 재귀 적 정의를 쓰려고합니다.목록의 원자 요소를 계산하는 Scheme 함수
목표는 목록의 원자 요소 수를 계산하고 내부 목록 원자도 재귀 적으로 계산하는 것입니다. 예를 들어
:
(num_items '((a b) c d))
반환한다은 :
4
"b"
, "c"
및 "d"
, "a"
때문에 목록/서브리스트에서 4 개 개의 원자 원소이다.
다음과 같이 내 코드는 지금까지 있습니다 :
는(define (num_items X)
(cond
((null? X) 0)
(list? (car X) (+ (num_items(car X)) (num_items(cdr X))))
(else (+ 1 (num_items(cdr X))))
))
(display(num_items '((a b) c d)))
는 오류가 4 번째 줄에 발생합니다 : 지금까지 내가 말할 수있는
(list? (car X) (+ (num_items(car X)) (num_items(cdr X))))
, 추가의 (num_items(car X))
재귀에 보인다 오류의 원인이 될 수 있습니다.
(list? (car X) (+ 1 (num_items(cdr X))))
그런 다음 코드를 컴파일하고 실행하지만, 그것은 문제가 해결되지 않은 : 나는
1
과 라인의 일부를 교체하는 경우 예를 얻을합니다.
코드를 테스트/실행하려면 Compile Online을 사용하고 있습니다. 이 발생 오류 : 괄호 한 쌍의 네 번째 행에서 누락
$gosh main.scheme
gosh: "error": pair required, but got a