我正在制作一个球拍中的哈希表,它将函数名称与它们所代表的过程相关联。到目前为止我已经
了(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检查,其中的值是程序,但我不知道他们做了什么,我怀疑这不是我想要他们做的。
答案 0 :(得分:1)
您的哈希表应该是从符号'+
到函数+
的地图。您的代码似乎试图通过哈希表中的函数而不是符号'+
查找函数来获取函数。
使用:
(for-each f-put! '(abs +) (list abs +))
然后使用以下函数获取函数:
((f-get '+) 1 2)