“<-”在球拍中做什么?

What does "<-" do in Racket?

我最近在 Racket 的 ffi 文档中偶然发现了这段示例代码:

(let-values ([(data meta) (read-sound* "/tmp/x.wav")])
  (printf ">>> data-length: ~s\n>>> meta: ~s\n" (length data) meta)
  (let* ([data data #;
               (list-of (list (add-half (1st x) (1st y))
                              (add-half (2nd x) (2nd y)))
                        (x <- data
                           and
                           y <- (append (repeated-list (list 0.0 0.0) 11025) data)
                           and
                           i <- 0.1 0.12 ..))])

x <- datay <- ...i <- ... 有什么作用?

我找不到此表示法的任何相关文档。

Link 到有问题的代码。

首先注意#;注释掉了后面的s-expression,所以整个list-of形式在代码示例中被注释掉了。 Looking at the linked code,注意(require swindle)也被注释掉了,提示相关定义可以在那里找到。

查看 documentation for Swindle,发现 list-of 形式是一种列表理解工具,<- 用于此处的生成器子句。特别地,(v <- ... and v <- ...) 是并行生成器子句。