【发布时间】:2017-10-06 10:06:13
【问题描述】:
我想创建一个函数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的使用也是正确的。我们课程中提出的书已经过时了。我正在学习这两种风格,只是为了让学习更容易。 -
F#的书很多,比如fsharpforfunandprofit.com/posts/fsharp-in-60-seconds就可以了。
-
我同意。我通常与Functional programming with F# 集成。我喜欢整本书的方法。它只是缺少一些带有解决方案的练习。
标签: f#