Ocaml的队列 - enq

时间:2018-04-19 08:33:29

标签: algorithm ocaml

我似乎无法让我的代码运行enq。我怎么应该声明队列数据类型呢?

    let enq (q,x) =
match q with
queue ([],b) -> queue([],x::b)
|queue(f,[]) -> queue(f,[x])
|queue(f,b) -> queue(f,x::b);;

1 个答案:

答案 0 :(得分:0)

您需要区分类型的名称和用于创建该类型元素的构造函数名称。对于您的代码,类型名称可以是queue(类型名称以小写字母开头),您可以只有一个名为Queue的构造函数(构造函数以大写字母开头)。

类型声明如下所示:

type 'a queue = Queue of 'a list * 'a list

请注意,此类型由队列元素的类型参数化(在声明中表示为'a)。

在您的代码中,模式匹配应该针对构造函数Queue,而不是类型名称queue

我还要说一下,你的代码中的所有案例对我来说都是一样的。我怀疑可能只有一个案例。