方案中的哈希表程序

时间:2014-11-09 00:07:07

标签: scheme racket lambda

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

(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 +)1 2)

然后返回3,但我得到的当前错误是:

  

申请:不是程序;    期望一个可以应用于参数的过程     给出:1     参数......:[无]

我很确定问题在于我如何初始化表格。用drracket检查,其中的值是程序,但我不知道他们做了什么,我怀疑这不是我想要他们做的。

1 个答案:

答案 0 :(得分:1)

您的哈希表应该是从符号'+到函数+的地图。您的代码似乎试图通过哈希表中的函数而不是符号'+查找函数来获取函数。

使用:

(for-each f-put! '(abs +) (list abs +))

然后使用以下函数获取函数:

((f-get '+) 1 2)