不确定数据类型上的 OCaml 函数

问题描述 投票:0回答:1

我有一个数据类型,

type data = IntData of int list | FloatData of float list

我想编写一个带有签名

map : data -> ('a -> 'a) -> data
的函数,它将把给定的函数应用于数据列表中的每个元素。

出于可以理解的原因,编译器不喜欢以下代码。

let rec map dat func =
  match dat with 
  | IntData il = IntData (List.map func il)
  | FloatData fl = FloatData (List.map func fl)

当然,编译器无法理解

func
在每种情况下可能具有不同类型的想法。

另一方面,我想不出如何完成这种行为,除了编写一个单独的地图函数,一个用于

IntData
,另一个用于
FloatData
。但这似乎是 OCaml 努力避免的那种浪费性的重复代码。

types ocaml
1个回答
0
投票

可能想要一种可以表示 int 或 float 的数据类型。

type num = Int of i | Float of i

哪里

data
是:

type data = num list

现在您的

func
参数可以是类型为
num -> num
的函数,但不是
num -> 'a
,因为您想要
num
列表作为结果。

当然,这意味着您不能保证您的列表仅包含整数或仅包含浮点数。指定您想要这样做的原因非常重要,因为对于更大的问题可能有更好的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.