2013-10-09 125 views
0

我是新來的計劃...循環爲每個計劃

有人可以請爲我解釋爲什麼for-each語句不打印輸出?

我定義了一個圖:

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

和我的測試代碼:

(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)))) 

運行此(testing graph)時,輸出預計爲((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

爲了準確得到它**顯示正確的方式**是'(顯示(測試圖))' 。 (例如DrRacket中的'#!r6rs',在定義窗口中運行'(test graph)'時它不顯示任何結果) – Sylwester

+0

@Sylwester足夠公平,我編輯了我的答案。謝謝! –