我正在球拍中制作一个哈希表,它将函数名与它们所代表的过程相关联。到目前为止,我有
(define *function-table* (make-hash)) (define (f-get key) (hash-ref *function-table* key)) (define (f-put! key value) (hash-set! *function-table* key value)) ;;and then to initialize it with a few functions (for-each (lambda (fn) (f-put! fn (lambda (fn args) ((fn) args)))) (list abs +))
所以我希望它能工作,这样我就可以像一样打电话
(f-get+)12)
然后返回3,但是我得到的当前错误是:
申请:不是程序;应为可应用于参数的过程给定:1参数…:[无]
我确信问题出在如何初始化表上。使用drrack进行检查,其中的值是过程,但我不知道它们做什么,我怀疑这不是我希望它们做的。
您的哈希表应该是从符号'+
到函数+
的映射。您的代码似乎试图通过在哈希表中查找函数而不是通过符号'+
来获取函数。
用途:
(for-each f-put! '(abs +) (list abs +))
然后用获取函数
((f-get '+) 1 2)