我想创建一个函数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
Run Code Online (Sandbox Code Playgroud)
我强烈怀疑我没有得到函数签名实际工作的方式.根据我得到的,map3应该有一个输入和一个输出,并f应作为输入三和返回三元组.但事情显然是错误的.在我尝试实施它的过程中,我错过了什么?
let map3 f (x, y, z) = (f x, f y, f z)
Run Code Online (Sandbox Code Playgroud)
你也可以这样写
let map3 f = fun (x, y, z) -> (f x, f y, f z)
Run Code Online (Sandbox Code Playgroud)
要么
let map3 = fun f (x, y, z) -> (f x, f y, f z)
Run Code Online (Sandbox Code Playgroud)
但我更希望左侧有参数.正如您所看到的,第一个版本更短,更容易阅读.
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |