2014-11-09 84 views
0

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

(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

您的散列表应该是从符号'+到函数+的映射。您的代码似乎试图通过在哈希表中查找函数来查找函数,而不是使用符号'+

用途:

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

,然后得到与功能:

((f-get '+) 1 2)