さかもとのブログ

つらつらと

SICP演習問題4.75

4章もあとちょっと

;; exercise 4.75
(define (uniquely-asserted operands frame-stream)
  (stream-flatmap
   (lambda (frame)
     (let ((result (qeval (uniquely-query operands)
                          (singleton-stream frame))))
       (cond ((stream-null? result) the-empty-stream)
             ((stream-null? (stream-cdr result)) result)
             (else the-empty-stream))))
   frame-stream))
(put 'unique 'qeval uniquely-asserted)

condの順序に注意.この順序でなければ,resultが空の場合, stream-cdrでエラーになってしまう.