さかもとのブログ

つらつらと

2009-06-23から1日間の記事一覧

SICP演習問題4.13

;;exercise4.13 ;;今見てる環境の変数のみを削除 ;;内部で使おうとして上の環境の変数も削除されては大変 (define (unbind! variable env) (let ((frame (first-frame env))) (define (scan-and-delete variables values) (cond [(null? variables) (error "…

SICP演習問題4.12

;;exercise4.12 ;;解答確認 (define (env-loop variable env emptyproc hitproc err) (define (scan variables values) (cond [(null? variables) (emptyproc env)] [(eq? variable (car variables) (hitproc values))] [else (scan (cdr variables) (cdr va…

SICP演習問題4.11

map, assoc, cut を使ってしまった.完全に反則だな. 時間があれば書き直す.でもassocは演習問題4.5の中で,もともと使っているぞ? と自分を慰める.しかもテストをしていないので,たぶん間違えがある. ;;exercise4.11 (define (make-frame variables v…

SICP演習問題4.8

なかなか苦戦した. どうやってlambdaに変換したらよいか. 変換は以下のようにする. (let loop ((a 5)) (if (< a 0) 0 (+ a (loop (- a 1))))) ;=> 15 ((lambda () (define (loop a) (if (< a 0) 0 (+ a (loop (- a 1))))) (loop 5))) ;=> 15 プログラム読み…

演習問題4.6, 4.7

評価器を作っているので,mapを使うのに少し抵抗を感じる. ;;exercise4.6 ;evalの中 ((let? exp) (eval (let->combination exp) env)) === (define (let? exp) (tagged-list? exp 'let)) (define (let-clauses exp) (cdr exp)) (define (let-bindings exp) (…

SICP演習問題4.5

一応結果も載せる. ;;exercise4.5 (define (cond-recipient? clause) (eq? (car (cond-actions clause)) '=>)) (define (test->recipient clause) (let ((predicate (cond-predicate clause)) (action (cadr (cond-actions clause)))) ;1引数の手続き (list …

SICP演習問題4.4

評価器のprimitive-proceduresにandとorを追加するのを忘れずに. ;;exercise4.4 (define (and? exp) (tagged-list? exp 'and)) (define (or? exp) (tagged-list? exp 'or)) (define (eval-and exps env) (if (null? exps) #f (let eval-and-loop ((exps (cdr…

SICP課題プログラム実行用評価器

まだ評価器が完成していないのに,課題ではそれをつかって試さなければならない. どうしようかぁと考えていた. ここはとりあえず参照させていただいて,本を進めるにつれて,自分で書き直そうということにした. 評価器参照元 http://www.serendip.ws/archive…

SICP演習問題4.3

いまいちわからなかったので,参照した. ;exercise4.3 (define (eval exp env) (cond [(self-evaluating? exp) exp] [(variable? exp) (lookup-variable-value exp env)] [else (if (get 'eval (operator exp)) ((get 'eval (operator exp)) exp env) (if (a…