2013-10-09 3 views
0

나는 Scheme을 처음 사용했습니다 ...스키마의 각 for 루프

누군가가 for-each 문이 결과를 출력하지 못하는 이유를 설명 해주십시오.

(define graph '((a (b.c)) (c (d)))) 

내 테스트 코드 :

나는 정의 된 그래프가 ...이 (testing graph)을 실행할 때,

(define testing 
    (lambda (a-list) 
    (if (null? a-list) 
     "size = 0" 
     (for-each (lambda (i) 
        (cons (car i) (length (cdr i))) 
        (length a-list)) 
        a-list)))) 

를 출력 예상은 ((a . 2) (c . 1))이지만 아무것도 표시되지

답변

4

for-each 프로 시저가 목록을 출력으로 작성하지 않으면 입력 목록의 각 요소에 대한 프로 시저 만 실행됩니다. 입력 목록의 각 요소에 함수를 적용한 결과로 새 목록을 만드는 map을 찾고 있습니다. 또한 그래프 생성/탐색과 관련하여 코드에 버그가 있음을 알 수 있습니다.

(define graph 
    '((a (b c)) ; fixed a bug here 
    (c (d)))) 

(define testing 
    (lambda (a-list) 
    (if (null? a-list) 
     "size = 0" 
     (map (lambda (i) 
       (cons (car i) (length (cadr i)))) ; fixed a bug here 
      a-list)))) 

지금은 예상대로 작동합니다 :이 문제를 해결해야

(display (testing graph)) 
=> '((a . 2) (c . 1)) 
+0

그것이 ** 표시하려면 올바른 방법 정확하기를 ** 것'(디스플레이 (테스트 그래프))' . (정의 윈도우에서'(test graph)'를 실행할 때 어떤 결과도 표시하지 않는 DrRacket의 #! r6rs). – Sylwester

+0

@Sylwester 정답. 나는 대답을 편집했다. 감사! –