我有:
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)),
但它失败了!你知道为什么吗?
答案 0 :(得分:3)
通过执行以下操作创建int类型的元素:
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*)
关于你自己的例子,第二个失败是因为你试图创建一个包含两个不同内容的框:一个框和一个整数。但是一个盒子只能包含一种类型的东西。