開発環境
- OS X Lion - Apple(OS)
- Emacs、BBEdit - Bare Bones Software, Inc. (Text Editor)
- プログラミング言語: MIT/GNU Scheme
計算機プログラムの構造と解釈(Gerald Jay Sussman(原著)、Julie Sussman(原著)、Harold Abelson(原著)、和田 英一(翻訳)、ピアソンエデュケーション、原書: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の3(標準部品化力, オブジェクトおよび状態)、3.5(ストリーム)、3.53(ストリームパラダイムの開発)、対の無限のストリーム、問題 3.70を解いてみる。
その他参考書籍
問題 3.70
コード(BBEdit)
sample.scm
(define (merge-weighted s1 s2 weight)
(cond ((stream-null? s1) s2)
((stream-null? s2) s1)
(else
(let ((s1car (stream-car s1))
(s2car (stream-car s2)))
(if (< (weight s1car)
(weight s2car))
(cons-stream s1car
(merge-weighted (stream-cdr s1)
s2
weight))
(cons-stream s2car
(merge-weighted s1
(stream-cdr s2)
weight)))))))
(define (weighted-pairs s t weight)
(cons-stream
(list (stream-car s) (stream-car t))
(merge-weighted
(stream-map (lambda (x) (list (stream-car s) x)
(stream-cdr t)))
(weighted-pairs (stream-cdr s) (stream-cdr t) weight)
weight)))
a.
コード(BBEdit)
(define (weight-i+j pair) (+ (car pair) (cadr pair))) (define pairs-weighted-i+j (weighted-pairs integers integers weight-i+j))
b.
コード(BBEdit)
(define (weight-2i+3j+5ij pair)
(let ((i (car pair))
(j (cadr pair)))
(+ (* 2 i)
(* 3 j)
(* 5 i j))))
(define integers-not-div-2-3-5
(stream-filter (lambda (x)
(and (not (= (reminder x 2) 0))
(not (= (reminder x 3) 0))
(not (= (reminder x 5) 0))))
integers))
(define pairs-weighted+2i+3j+5ij
(weighted-pairs integers-not-div-2-3-5
integers-not-div-2-3-5
weight-2i+3j+5ij))
0 コメント:
コメントを投稿