我想创建一个函数map3
,给定一个函数f
和一个元组(a, b, c)
将f
应用于元组的每个成员。功能的预期签名应该是:函数签名
('a -> 'b) -> 'a * 'a * 'a -> 'b * 'b * 'b
。
我试了几种方法:
> let map3 = fun x -> let f = fun (a, b, c) -> (a, b, c) in f x;;
val map3 : 'a * 'b * 'c -> 'a * 'b * 'c
> let map3 = fun x y -> x (let f = fun (a, b, c) -> (a, b, c) in f y);;
val map3 : x:('a * 'b * 'c -> 'd) -> 'a * 'b * 'c -> 'd
> let map3 = fun (x, y, z) -> let f = fun (a, b, c) -> (a, b, c) in f (x, y, z);;
val map3 : x:'a * y:'b * z:'c -> 'a * 'b * 'c
我强烈怀疑,我没有得到函数签名是如何工作的。根据what I get,map3
应该有一个输入和一个输出,而f
应该输入一个三元组并返回一个三元组。但是这显然是错误的。我在尝试实施它时遇到了什么?
这是一个提示 - 从'let map3 f ='开始。此外,人们不倾向于使用'in'语法 –
我正在努力!我没有想到这种方法。你也正确的使用'in'。我们课程中提出的这本书很过时。我正在学习这两种风格,只是为了让学习更容易。 – Worice
有许多F#书籍,你可以看看例如http://fsharpforfunandprofit.com/posts/fsharp-in-60-seconds/。 – s952163