gpt4 book ai didi

functional-programming - 是否可以在 OCaml 中使其完全多态?

转载 作者:行者123 更新时间:2023-12-04 16:36:16 30 4
gpt4 key购买 nike

在 OCaml 中

    let nth_diff_type i (x, y, z) =
match i with
1 -> x
|2 -> y
|3 -> z
|_ -> raise (Invalid_argument "nth")

所以当前类型是 int->('a,'a,'a)->'a ,对吗?

这意味着 x, y, z 必须具有相同的类型。

所以我的问题是 是否有可能给它最大的多态性 ,以便 x, y, z 不需要具有相同的类型?

最佳答案

不,不是。

OCaml 中的函数应该只有一种返回类型。如果您的返回类型是唯一的,您可以有不同的参数类型:

let nth_diff_type i (x, y, z) =
match i with
| 1 -> `Fst x
| 2 -> `Snd y
| 3 -> `Thd z
|_ -> raise (Invalid_argument "nth")

// val nth_diff_type :
// int -> 'a * 'b * 'c -> [> `Fst of 'a | `Snd of 'b | `Thd of 'c ] = <fun>

如果您想为三元组创建一些实用函数,不幸的是您必须单独定义它们:
let fst3 (x, _, _) = x
let snd3 (_, y, _) = y
let thd3 (_, _, z) = z

关于functional-programming - 是否可以在 OCaml 中使其完全多态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14364145/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com