莫斯科ML模式匹配

时间:2014-01-25 16:24:52

标签: ml

我想检查一下,如果列表中的所有产品都超出限制

fun search([], _) = true 
  | search(x1::xs, limit) = #2(#1 x1) > limit andalso search(xs, limit)`

我收到了unresolve记录模式。我的功能有什么不对。

1 个答案:

答案 0 :(得分:1)

您的函数问题很可能是您使用的#1#2分别用于从给定元组中提取第一个和第二个组件。这应该适用于任何元组,即对,三元组,四元组等。例如,

> #1 (1, 2);
val it = 1: int

> #1 ("a", "b", "c", "d");
val it = "a": string

在你的函数中,编译器(或解释器)无法弄清楚元组x1应该有多少组件。

您可以通过提供类似

的显式类型注释来提供帮助
fun search ([], _) = true
  | search ((x:(int*int)*int)::xs, l) = #2 (#1 x) > l andalso search (xs, l);

或(可能更好)明确拆分模式中的元组x

fun search ([], _) = true
  | search (((_, x), _)::xs, l) = x > l andalso search (xs, l);