就像标题所说的那样.我已经实现了这个,但是这个函数可能已经有了一个通用的名称,并且存在于标准库中.
关于此功能的其他建议是受欢迎的.也许有更清洁的实施.
let transform x funcList = transform' x [x] funcList
where transform' startVal accum funcList
| null funcList = reverse accum
| otherwise = let result = (head funcList) startVal
in transform' result (result:accum) $ tail funcList
Run Code Online (Sandbox Code Playgroud)
执行时,它执行以下操作:
> transform 2 [(2 + ),((-1) +),(3 *)]
[2,4,3,9]
Run Code Online (Sandbox Code Playgroud)
Lee*_*Lee 10
你可以用scanl以下方法定义它:
let transform = scanl (\v f -> f v)
Run Code Online (Sandbox Code Playgroud)
要么
let transform = scanl (flip ($))
Run Code Online (Sandbox Code Playgroud)