gpt4 book ai didi

module - 定义一个数值多态模块

转载 作者:行者123 更新时间:2023-12-04 05:59:55 25 4
gpt4 key购买 nike

我想定义一个可以支持int的模块, int64float .例如,

module Matrix =
struct
type 'a t = 'a array array

(* add point-wise 2 matrices with same dimension *)
let add (m: 'a t) (n: 'a t): 'a t =
...
end
add的执行需要运营商 plus ,即 +对于 int , +.对于 floatInt64.add对于 int64 .所以我不能写其中任何一个,否则, Matrix 的类型不再是多态的。

谁能告诉我你是如何解决这个问题的?

我目前的一个想法是制作 Matrix一个仿函数:
module type NUM_TYPE =
sig
type t
val add: t -> t -> t
end

module Matrix =
functor (Elt: NUM_TYPE)
struct
type element = Elt.t
type t = element array array

(* add point-wise 2 matrices with same dimension *)
let add (m: t) (n: t): t =
...
end

然后我必须定义以下数值模块:
module MyInt =
(struct
type t = int
let add (a: t) (b: t): t = a + b
end: NUM_TYPE)

module MyFloat = ...
module MyInt64 = ...

module MatInt = Matrix(MyInt)
module MatFloat = Matrix(MyFloat)
module MatInt64 = Matrix(MyInt64)

通过这种方法,我发现定义 MyInt 很繁琐。 , MyFloatMyInt64 ,尤其是自己的 add功能。有没有人有任何想法来改善这一点?

最佳答案

你可以像这样在一行中写下每一个:

module MatInt = Matrix(struct type t = int let add = (+) end)

关于module - 定义一个数值多态模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9045910/

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