有没有一种方法可以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 ...)。
这个问题与https://github.com/racket/racket/pull/2483非常相关。在链接中,您会发现:
(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)