scheme/racket은 prefix 표기법을 사용하므로 적용되는 모든 프로 시저가 열기 및 닫기 대괄호 ((function-name arg1 arg2 ...)
)로 묶입니다.
가
이 의미 car(n)
, cdr(n)
, even-list(...)
등 잘못된 구문이며, 각각 (car n)
, (cdr n)
, (even-list ...)
등으로 대체되어야한다. 프로 시저 even-list
에 수정을 할 때 당신이 있기 때문에 단순히
even-list (list 1 2 3 4 5 6 7 8 9 10)
를 작성하면/바인딩하지 않을 수도 식별자 (even-list
)를 호출하는으로, 출력에 어떤 변화가 표시되지 않는 이유
이
은 또한 (이 경우에는 함수 정의로 바인드됩니다), 표현식은
(list 1 2 3 4 5 6 7 8 9 10)
입니다. 이 표현식이 목록 출력을 반환하는 것이므로
even-list
내에서 변경 한 내용은 실제로 프로 시저에 인수로 전달하지 않았기 때문에
list
내장 함수를 사용하여이 목록에 반영되지 않습니다 순서.
당신이 줄을 수정하면 :
(even-list (list 1 2 3 4 5 6 7 8 9 10))
당신은 당신의 프로 시저 로직에서 줄기 오류를 발견하기 시작합니다. 예를 들어, recursive 함수에는 기본 사례가 없습니다. 즉, 함수가 목록을 통해 반복 될 때 '()
요소 목록에 도달하면 (car n)
을 적용하려고 시도합니다. 이는 car
에 대한 계약 위반입니다. 인수에 대해서는 pair?
입니다. 사용
(define (even-list lst)
(cond
((null? lst) empty) ; base case (empty? list)
((even? (car lst)) ; even? first element
(cons (car lst) (even-list (cdr lst))))
(else (even-list (cdr lst)))))
또는 내장 filter
절차 :
는 다음과 같은 고려
유효 체계/라켓이 아니다
(define (even-list lst)
(filter even? lst))
이 ... 질문을 게시하기 전에 구문 오류를 수정. – naomik