这个符号在Racket中意味着什么?

时间:2015-01-13 20:28:06

标签: scheme racket

(define result (assoc n cache))
(cond
  [result => second]
  [else ...])

=>是什么意思?我猜它在second上运行result并返回值?这叫什么,我在哪里可以找到更多相关信息?

3 个答案:

答案 0 :(得分:2)

在这种情况下,它与

相同
(cond (result (second result))
      (else ...))

一般来说,

的cond条款
(foo => bar)

表示如果foo求值为truthy值,则保存其值,并作为参数传递给bar(它应该计算为带有一个参数的过程)。

答案 1 :(得分:2)

这意味着:如果条件评估为真值,则将该值发送到右侧的函数。它在documentation中。例如:

(define alst '((x 1) (y 2) (z 3)))

; if the list contains an association with the `y` key, return the second element
; of that association, which happens to be the value `2`
(cond ((assoc 'y alst) => second)
      (else #f))
=> 2

答案 2 :(得分:2)

条款[result => second]cond

处理
  1. 评估表达式结果,并将结果存储在临时变量中,例如t
  2. 如果值为非假,则会计算表达式second,并将结果存储在f中。
  3. 如果值f是函数,则会计算(f t),其结果将成为cond表达式的结果。
  4. 如果f不是函数,则会发出错误信号。
  5. 的扩展
    (cond
      [result => second]
      [else something])
    

    就像是

    (let ()
      (define t result)
        (if t (second t)
            something))))