2016/01/21

SICP 問題 4.74

;; negate, lisp-value, singleton-streamはflatten-streamを変更して直列にしても問題ないのではという問題
;; 元のflatten-stream
(define (flatten-stream stream)
  (if (stream-null? stream)
      the-empty-stream
      (interleave-delayed
       (stream-car stream)
       (delay (flatten-stream (stream-cdr stream))))))

;; a 差し込みを使わないsimple-flattenの実装
(define (simbple-stream-flatmap proc s)
  (simple-flatten (stream-map proc s)))

(define (simple-flatten stream)
  (stream-map stream-car
              (stream-filter (lambda (s) (not (null? s)))
                             stream)))

;; b
;; negate, lisp-valueはsinbleton-streamを取るので交互にしても直列にしても結果は変わらない.
;; find-assertionsの場合はfetch-assertionsで対応する表明を集めてきているので同じく変わらない.

© 2022 wat-aro