我正在尝试在 SICP 中做练习 2.78,但 put 和 get 函数未知。我尝试过多种语言,比如相当大、racket、r5rs、mit-scheme、mzscheme等。我什至下载了SICP支持(http://www.neilvandyke.org/sicp-plt/),但没有成功。我怎样才能让这些功能发挥作用?
是的,我发现 SICP 有时因为这样的事情有点烦人。假设存在但实际不存在的函数使得尝试示例变得更加困难。我自己写了(get)和(put),如下(这是在 GNU guile 中):
(define global-array '())
(define (make-entry k v) (list k v))
(define (key entry) (car entry))
(define (value entry) (cadr entry))
(define (put op type item)
(define (put-helper k array)
(cond ((null? array) (list(make-entry k item)))
((equal? (key (car array)) k) array)
(else (cons (car array) (put-helper k (cdr array))))))
(set! global-array (put-helper (list op type) global-array)))
(define (get op type)
(define (get-helper k array)
(cond ((null? array) #f)
((equal? (key (car array)) k) (value (car array)))
(else (get-helper k (cdr array)))))
(get-helper (list op type) global-array))
从本书后面的角度来看,这可能是一个幼稚的实现,但相当简单并且运行良好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)