这个符号在 Racket 中是什么意思?

What does this symbol mean in Racket?

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

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

在这种情况下,它的意思与

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

一般来说,

的条件子句
(foo => bar)

意味着如果 foo 的计算结果为真值,那么它的值将被保存,并作为参数传递给 bar(它应该计算为一个接受一个参数的过程)。

这意味着:如果条件的计算结果为真值,则将该值发送到右边的函数。它在 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

子句 [result => second]cond 这样处理:

  1. 计算表达式结果并将结果存储在临时变量中,例如 t
  2. 如果该值不为假,则计算表达式 second 并将结果存储在 f.
  3. 如果值 f 是一个函数,则计算 (f t) 并且其结果成为 cond 表达式的结果。
  4. 如果 f 不是函数,则会发出错误信号。

扩展

(cond
  [result => second]
  [else something])

类似于

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