我似乎无法让我的代码运行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);;
答案 0 :(得分:0)
您需要区分类型的名称和用于创建该类型元素的构造函数名称。对于您的代码,类型名称可以是queue
(类型名称以小写字母开头),您可以只有一个名为Queue
的构造函数(构造函数以大写字母开头)。
类型声明如下所示:
type 'a queue = Queue of 'a list * 'a list
请注意,此类型由队列元素的类型参数化(在声明中表示为'a
)。
在您的代码中,模式匹配应该针对构造函数Queue
,而不是类型名称queue
。
我还要说一下,你的代码中的所有案例对我来说都是一样的。我怀疑可能只有一个案例。