Chat (Lingr.com)
Informaiton
Daily
Column
- MySQL日本語の旅(5/1)
- アクセス向上秘伝(5/9)
- 一風変ったHaskellλ門(6/13)
- SICP Answer Book (5/31) 問題3.26追加
Zope Solution
Extra
アーカイブ
OSS案内所
Site Info
関連リンク
##(link2sicp "book-Z-H-22.html#%_thm_3.25" "Exercise 3.25")
解答例
(define (make-table)
(let ((local-table (list '*table*)))
(define (lookup key)
(let ((record (assoc key (cdr local-table))))
(if record
(cdr record)
false)))
(define (insert! key value)
(let ((record (assoc key (cdr local-table))))
(if record
(set-cdr! record value)
(set-cdr! local-table
(cons (cons key value)
(cdr local-table))))
'ok))
(define (print-table) (display local-table) (newline))
(define (dispatch m)
(cond ((eq? m 'lookup-proc) lookup)
((eq? m 'insert-proc!) insert!)
((eq? m 'print-proc) print-table)
(else (error "Unknown operation -- TABLE" m))))
dispatch))
実行例
gosh> (define operation-table (make-table)) operation-table gosh> (define get (operation-table 'lookup-proc)) get gosh> (define put (operation-table 'insert-proc!)) put gosh> (define print (operation-table 'print-proc)) print gosh> (put '(1) 1) ok gosh> (put '(2) 2) ok gosh> (put '(1 1) 11) ok gosh> (put '(1 2) 12) ok gosh> (put '(2 1) 21) ok gosh> (put '(2 2) 22) ok gosh> (put '(1 1 1) 111) ok gosh> (put '(1 2 2) 122) ok gosh> (put '(2 2 2) 222) ok gosh> (put '(1 2 3 4) 1234) ok gosh> (get '(1)) 1 gosh> (get '(5)) #f gosh> (get '(1 1)) 11 gosh> (get '(2 2)) 22 gosh> (get '(1 2 3)) #f gosh> (get '(1 2 3 4)) 1234 gosh> (put '(1 2 3 4) 1000) ok gosh> (get '(1 2 3 4)) 1000
--hidenao
コード
##(sicp-answer-code "ex-3.25.scm")