将函数应用于流

时间:2012-03-06 17:18:22

标签: f# f#-interactive

如果我有一个函数f和一个流s。如何将此功能应用于流。类似于List.map如何工作。

这是任何类型的无限流:

type 'a stream = Cons of 'a * (unit -> 'a stream)

我已经想出了这个,这肯定是错的,但至少它重演了我想要做的事情

type 'a stream = Cons of 'a * (unit -> 'a stream) 

let rec map f (cons(x,xsf)) = f x then map f (xsf)

1 个答案:

答案 0 :(得分:4)

这样的事情应该有效:

module Stream =
    let rec map f (Cons(x,xs)) =
        Cons(f x,fun () -> xs() |> map f)

这定义了一个Stream模块,我们可以在其中保留有用的函数来处理流(类似于List模块),其中只有一个map函数。 map函数接受一个函数f和一个由x到函数xs的流,并在流上映射f,返回一个头为f x的新流并且通过将f映射到调用xs生成的流上来获取其尾部。