球拍:如何将流转换为列表?

时间:2015-10-03 03:08:29

标签: racket

在Racket中,如何将流转换为列表?

我认为它是一个通用的界面,但似乎像map这样的面向列表的函数不适用于流。那么如何将它们变成列表呢?

3 个答案:

答案 0 :(得分:4)

有一个程序:stream->list。例如:

(define s (stream 1 2 3 4 5))
(stream->list s)
=> '(1 2 3 4 5)

确保检查documentation,有几个操作流的过程可以反映列表可用的流。

答案 1 :(得分:3)

有一个直截了当的stream->list函数。它来自racket/stream库,您可以看到许多其他类似列表的函数,包括stream-map

(但是如果您正在使用它,请注意,此库可能会比使用流更严重的性能损失。)

答案 2 :(得分:1)

stream->list之外,还有一个更通用的sequence->list可将任何sequence?转换为列表。

> (sequence->list (stream 1 2 3))
'(1 2 3)
> (sequence->list "abc")
'(#\a #\b #\c)
> (sequence->list (set 1 2 3))
'(1 2 3)