2017-04-02 8 views
0

단지 술어를 사용하고 목록을 반복하는 스키마 코드를 작성합니다. 예를 (filter odd? '(1 2 3))에 대한Scheme - 술어가 null이 됨

(define (filter para lst) 
     (foldr (lambda (x y) 
       (if (para x) 
        (cons x y) y)) '() lst)) 

가 시작 '()과 3 항에서 '(1 3)

람다 가져가 반환됩니다 - 그리고 (odd? '())입니다 (para x)을하고 그것을 작동 :

는 코드입니다.

그러나 (odd? '())이라고 쓰면 오류가 인쇄됩니다.

무엇이 누락 되었습니까?

답변

1

첫 번째 매개 변수 x이 목록의 현재 요소입니다. 두 번째 것, y은 누산기입니다. 따라서 첫 번째 호출에서 x은 3이고 y'()입니다. 따라서 (odd? '())(cons '() 3)을하지 않으면 (odd? 3)(cons 3 '())을 수행하고있는 것입니다.

+0

당신 말이 맞아요! ... 방금 대신 스왑을 시도하고 (para y) 대신 오류가 발생했습니다 ... 감사합니다! –