scheme中过程的哈希表



我正在球拍中制作一个哈希表,它将函数名与它们所代表的过程相关联。到目前为止,我有

(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)

最新更新