0

我有 :

type 'a box =
  | Item of ('a * 'a box)
  | Empty

我需要创建函数concat

val concat : 'a box box -> 'a box

连接一盒盒子。参数的元素都连接在一起(以相同的顺序)以给出结果。

我不明白如何创建一个像'a box box.

我试着做:

let elt  = Item(1, Item(2,Empty)) 
let elt2 = Item(elt, Item(20, Empty)),

但它失败了!你知道为什么吗?

4

1 回答 1

3

通过执行以下操作创建一个 int box 类型的元素:

let elt = Item(3,Empty)

现在你可以创建一个 int box box 类型的元素,方法是把这个东西放在一个盒子里:

let elt2 = Item(elt,empty)

(框实际上只是列表类型)

有了一个列表,它将是:

let elt = [3]
let elt2 = [elt] (* which is [ [3] ], the list containing one list, which contains 3*)

关于你自己的例子,第二个失败了,因为你试图创建一个包含两个不同东西的盒子:一个盒子和一个整数。但是一个盒子只能包含一种类型的东西。

于 2013-03-05T19:18:27.503 回答