開発環境
- 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 コメント:
コメントを投稿