0

我正在尝试实现类似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将是 list 头部的参数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
4

1 回答 1

3

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

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

于 2013-04-14T21:11:20.657 回答