問題解答
(define (subsets s)
(display s)(newline)
(if (null? s)
(list ())
(let ((rest (subsets (cdr s))))
(append rest (map (lambda (x) (append (list (car s)) x)) rest)))))
(subsets (list 1 2 3))
rest が、s から先頭を取り除いたもので構成される部分集合になる。rest 本体と、rest の部分集合に対して s の先頭の要素を追加した新たな集合をつくることで、s のすべての部分集合の集合をつくりだしている。
本文
2.2.3 公認インターフェースとしての並び
処理の流れを信号処理に見立てて、処理の要素ごとにモジュール化して繋げた中にデータを通すようにする。
解説を一気に読んで、内容としては理解できた感じなのだけれどもまだきちんと自分で応用できる感じではないので、明日もここから続けるようにする。