【问题标题】:Clarification of `assoc` syntax in racket澄清球拍中的 `assoc` 语法
【发布时间】:2012-10-26 01:36:03
【问题描述】:

我正在尝试在球拍中使用assoc 创建一个备忘录表,并希望将有序对 (x,y) 与一个值相关联,但我对语法有点不清楚。

例如我有:

[f (lambda (x y)
               (let ([ans (assoc [x y] memo)])

但这是不正确的。

【问题讨论】:

    标签: scheme racket


    【解决方案1】:

    assoc 过程的第一个参数是您要查找的元素的“键”,第二个参数是关联列表 - 在这种情况下,关联是只是一个键值对。它将返回与给定键对应的第一个关联,如果没有找到则返回#f。例如:

    (assoc 'x '((a 1) (b 2) (x 3) (c 4)))
    > '(x 3)
    

    如果您需要使用对作为键,那很好,它会像这样工作:

    (assoc (list 1 2) '(((1 2) x) ((3 4) y)))
    > '((1 2) x)
    

    【讨论】:

    • 当然,如果您打算使用一对值作为关联的“键”部分,那很好。这有效:(assoc '(1 2) '(((1 2) x) ((3 4) y))) => '((1 2) x)
    【解决方案2】:

    要添加,在专业级的球拍中,您还可以使用hash tables 构建查找表。

     (define table (make-hash))
     (hash-set! table 'password "location-of-treasure")
     (printf "Where is the treasure?  ~s\n" (hash-ref table 'password))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-10
      • 2018-07-04
      • 1970-01-01
      相关资源
      最近更新 更多