【问题标题】:Hash table of procedures in scheme方案中过程的哈希表
【发布时间】:2014-11-09 00:07:06
【问题描述】:

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

(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检查,里面的值是程序,但我不知道他们做了什么,我怀疑这不是我想要他们做的。

【问题讨论】:

    标签: scheme racket lambda


    【解决方案1】:

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

    用途:

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

    然后得到函数:

    ((f-get '+) 1 2)
    

    【讨论】:

      猜你喜欢
      • 2011-01-22
      • 2016-02-24
      • 2017-11-17
      • 2018-11-05
      • 2012-12-30
      • 2012-02-02
      • 1970-01-01
      • 1970-01-01
      • 2015-12-23
      相关资源
      最近更新 更多