0

私はSchemeが初めてです...

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

1 に答える 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))
于 2013-10-09T13:49:41.040 に答える