SICP 読み (103) 3.3.1 可変リスト構造
微妙。
(define (count-pairs-iter x l) (if (pair? x) (begin (set-list! l x) (count-pairs-iter (car x) l) (count-pairs-iter (cdr x) l)) (if (null? x) l)))
count-pairs-iter なんですが、たまたま動いてる感満点です。でもリストの終端は cdr 部分が '() なソレ、というのが前提であるとするなら、上記でも良いっちゃ良いようにも思えるなぁ。cdr 側で二回も '() を検出する事はあり得ないだろうし。
あるいは、(pair? x) が #f で (null? x) も #f だった場合は #
ってか、この手法を使えば次の問題のループ検出ができるな。cdr が指してるソレを保存しておきつつ、eq? なソレがあったらダウト、みたいな感じですか。(逆