管道的ocaml实现

时间:2013-04-14 20:18:46

标签: ocaml

我正在尝试实现类似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

1 个答案:

答案 0 :(得分:3)

(fun h -> (g -> f))在语法上不正确,我不确定它应该是什么意思。

你的composite函数的模式匹配看起来就像你为递归函数编写的那样,但是你试图非递归地定义它以与fold_left一起使用。无论哪种方式都是好的,但你需要下定决心,因为在这里你有一个不起作用的悲伤妥协。