如果我有一个函数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)
答案 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
生成的流上来获取其尾部。