2014-11-09 76 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)