我需要在OCaml中编写一个pipe
函数,以便pipe [f1;...;fn]
(其中f1
,...,fn
是函数!)返回一个函数{{1对于任何x,f
计算f x
。
我需要使用fn(...(f2(f1 x)))
来编写它,并且需要填写函数的参数
List.fold_left
我已经填写了基地。如果管道的第一个参数是空列表,则返回第二个参数。例如:管道[] 3 = 3。 我知道我想要执行累加函数a的函数x。 我不知道怎么写。我写了让f a x = x a但是在我测试时给了我一个错误 pipe [(fun x - > x + x); (有趣的x - > x + 3)] 3
它应该在3上运行x + x然后在结果上运行x + 3并给我9但是当我尝试使用let f a x = x时它给了它一个类型错误 填写部分
let pipe fs =
let f a x = "fill in this part" in
let base = fun x ->x in
List.fold_left f base fs;;
创建一个接收2个函数并相互运行的函数的正确格式是什么。例如:创建一个函数,它接受函数a和b,并在a的结果上运行b。
答案 0 :(得分:1)
评估(fold_left g init fs) x
:
fs
为空时,(fold_left g init fs) x = init x
。在您的情况下,您希望它是x
。fs = fs' @ [fn]
时:根据您希望的真实情况,表达式应该评估为
fn (fold_left g init fs' x)
但使用fold_left
的定义,它也会评估(g (fold_left g init fs') fn) x
。 因此,如果以下等式成立:
init x = x
(g k f) x = f (k x)
init = fun x -> x
和
g k f = fun x -> f (k x)
。
答案 1 :(得分:0)
好吧,base
是一个像fun x -> ...
这样的函数。
同样,你的函数f
需要返回一个函数,所以假设它返回的内容如下:
fun z -> ...
你必须弄清楚这个函数应该用它的参数z
做什么。
答案 2 :(得分:0)
想出来只需要那里的z为a和x来调用