我正在尝试实现类似pipe
函数的内容。
输入一系列功能
输出一个功能
示例:
# pipe [(fun y -> y+5);(fun y -> y*3)] 1 = 18
# pipe [(fun z -> z*3);(fun z -> z+5)] 1 = 8
我的问题:
辅助函数composite
接受两个参数,即函数f
和函数列表l
。如果列表为空,则返回函数f
。
如果不是,f
将成为列表头g
的参数。
但是,我遇到了语法错误。我不知道发生了什么。
有没有人发现错误?
let pipe l =
let composite f l = match l with
[]->f
| g::gs -> (fun h -> (g -> f)) in
List.fold_left composite (fun x -> x) l
答案 0 :(得分:3)
(fun h -> (g -> f))
在语法上不正确,我不确定它应该是什么意思。
你的composite
函数的模式匹配看起来就像你为递归函数编写的那样,但是你试图非递归地定义它以与fold_left
一起使用。无论哪种方式都是好的,但你需要下定决心,因为在这里你有一个不起作用的悲伤妥协。