在迭代期间生成多个值

JRR*_*JRR 3 racket

有没有一种方法可以for/list在每次迭代期间生成多个值并使结果“变平”?

例如:

(for/list ([i (range n)]) (values i (+ i 1)))
Run Code Online (Sandbox Code Playgroud)

我希望结果是(list 0 1 1 2 2 3 3 4 ...)

Sor*_*ase 5

这个问题与https://github.com/racket/racket/pull/2483非常相关。在链接中,您会发现:

  • 一个未合并的 PR,可让您编写(for/append-list ([i (range n)]) (list i (+ i 1))).
  • 我建议让你写(for/list* ([i (range n)]) (values i (+ i 1)))(有警告,请参阅链接了解更多详细信息)。

但是由于这些在 Racket 中尚不存在,获得您想要的东西的最简单方法是:

(append* (for/list ([i (range n)]) (list i (+ i 1))))
Run Code Online (Sandbox Code Playgroud)