2012-03-06 15 views
1

如果我有一个函数f和流s。我如何将这个函数应用到流中。熟悉List.map的工作方式。应用功能到流

这是任何类型的无限流:

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

我想出了这一点,这肯定是错误的,但至少它reperesents什么,我试图做

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

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

什么是您的流是什么样子?一个小代码片段会有很大的帮助。 – pad 2012-03-06 17:24:46

+0

我已更新我的问题。 – 2012-03-06 17:27:07

回答

4

东西像这样应该工作:

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

这定义了一个Stream模块,其中我们可以保留有用的功能与流(类似于List模块)的交易,只有在一个单一map功能。地图功能采用功能fxxs功能,并将f映射到流上,返回一个新流,其头部为f x,其尾部通过将f映射到由调用xs产生的流获得。

+0

你能ellaboratete就可以了吗?我是一个F#小白=) – 2012-03-06 17:49:46

+0

@JudithMorales - 我已经添加了一个解释。让我知道你是否有其他问题。 – kvb 2012-03-06 17:56:53

+0

太好了,谢谢你的解释。 – 2012-03-06 18:05:28