List F#:列出匹配模式中的。[(参数)…]错误
我已经创建了一个函数,希望在其中匹配从给定索引到列表末尾的列表长度。例子。list.[4..]将为您提供一个新列表,其中包含从索引4到末尾的列表中的元素。我知道这是真的,因为我已经做了很多次了 但现在,当我尝试在匹配模式中执行此操作时,它会出错: “基于此程序点之前的信息查找不确定类型的对象。在此程序点之前可能需要类型批注来约束对象的类型。这可能允许解析查找。” 我的代码如下所示:List F#:列出匹配模式中的。[(参数)…]错误,list,indexing,f#,match,List,Indexing,F#,Match,我已经创建了一个函数,希望在其中匹配从给定索引到列表末尾的列表长度。例子。list.[4..]将为您提供一个新列表,其中包含从索引4到末尾的列表中的元素。我知道这是真的,因为我已经做了很多次了 但现在,当我尝试在匹配模式中执行此操作时,它会出错: “基于此程序点之前的信息查找不确定类型的对象。在此程序点之前可能需要类型批注来约束对象的类型。这可能允许解析查找。” 我的代码如下所示: let rec possibilityGuess n p1 p2 p3 p4 p5 p6 p7 p8 p9 p1
let rec possibilityGuess n p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 SS =
match (List.length (SS.[n..])) with
|1 -> match (validate (List.item(0) SS) (List.item(n) SS)) with
|(0,0) -> [(p1+1);p2;p3;p4;p5;p6;p7;p8;p9;p10;p11;p12;p13;p14]
|(0,1) -> [p1;(p2+1);p3;p4;p5;p6;p7;p8;p9;p10;p11;p12;p13;p14]
|(0,2) -> [p1;p2;(p3+1);p4;p5;p6;p7;p8;p9;p10;p11;p12;p13;p14]
|(0,3) -> [p1;p2;p3;(p4+1);p5;p6;p7;p8;p9;p10;p11;p12;p13;p14]
|(0,4) -> [p1;p2;p3;p4;(p5+1);p6;p7;p8;p9;p10;p11;p12;p13;p14]
|(1,0) -> [p1;p2;p3;p4;p5;(p6+1);p7;p8;p9;p10;p11;p12;p13;p14]
|(1,1) -> [p1;p2;p3;p4;p5;p6;(p7+1);p8;p9;p10;p11;p12;p13;p14]
|(1,2) -> [p1;p2;p3;p4;p5;p6;p7;(p8+1);p9;p10;p11;p12;p13;p14]
|(1,3) -> [p1;p2;p3;p4;p5;p6;p7;p8;(p9+1);p10;p11;p12;p13;p14]
|(2,1) -> [p1;p2;p3;p4;p5;p6;p7;p8;p9;(p10+1);p11;p12;p13;p14]
|(2,2) -> [p1;p2;p3;p4;p5;p6;p7;p8;p9;p10;(p11+1);p12;p13;p14]
|(3,0) -> [p1;p2;p3;p4;p5;p6;p7;p8;p9;p10;p11;(p12+1);p13;p14]
|(3,1) -> [p1;p2;p3;p4;p5;p6;p7;p8;p9;p10;p11;p12;(p13+1);p14]
|_ -> [p1;p2;p3;p4;p5;p6;p7;p8;p9;p10;p11;p12;p13;(p14+1)]
|_ -> match (validate (List.item(0) SS) (List.item(n) SS)) with
|(0,0) -> (possibilityGuess (n+1) (p1+1) p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 SS)
|(0,1) -> (possibilityGuess (n+1) p1 (p2+1) p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 SS)
|(0,2) -> (possibilityGuess (n+1) p1 p2 (p3+1) p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 SS)
|(0,3) -> (possibilityGuess (n+1) p1 p2 p3 (p4+1) p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 SS)
|(0,4) -> (possibilityGuess (n+1) p1 p2 p3 p4 (p5+1) p6 p7 p8 p9 p10 p11 p12 p13 p14 SS)
|(1,0) -> (possibilityGuess (n+1) p1 p2 p3 p4 p5 (p6+1) p7 p8 p9 p10 p11 p12 p13 p14 SS)
|(1,1) -> (possibilityGuess (n+1) p1 p2 p3 p4 p5 p6 (p7+1) p8 p9 p10 p11 p12 p13 p14 SS)
|(1,2) -> (possibilityGuess (n+1) p1 p2 p3 p4 p5 p6 p7 (p8+1) p9 p10 p11 p12 p13 p14 SS)
|(1,3) -> (possibilityGuess (n+1) p1 p2 p3 p4 p5 p6 p7 p8 (p9+1) p10 p11 p12 p13 p14 SS)
|(2,1) -> (possibilityGuess (n+1) p1 p2 p3 p4 p5 p6 p7 p8 p9 (p10+1) p11 p12 p13 p14 SS)
|(2,2) -> (possibilityGuess (n+1) p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 (p11+1) p12 p13 p14 SS)
|(3,0) -> (possibilityGuess (n+1) p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 (p12+1) p13 p14 SS)
|(3,1) -> (possibilityGuess (n+1) p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 (p13+1) p14 SS)
|_ -> (possibilityGuess (n+1) p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 (p14+1) SS)
printfn "%A" (possibilityGuess 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 S)
因此,在第二行中,我尝试将List.length SS.[n..]与1]匹配,这就是我无法理解的问题,为什么
n是一个整数,从0开始,每次递归调用加1
我尝试重新排列它,以便在x=List.length SS时将1
与x进行匹配。[n..]
这会给出相同的错误
因此,据我所知,它不会接受匹配模式中的SS.[n..]
,这让我很困惑,因为我知道这个表达式在其他情况下也适用
请帮帮我 事实上,你在匹配中做的SS.[n..]
不是问题所在;真正的问题(由错误消息直接指出)是,在您执行SS.[n..]
时,SS
的类型未知。将该表达式的结果传递给List.length
这一事实没有帮助,因为任何支持切片的类型都可能返回列表。给SS
一个显式的类型注释,一切正常:
let rec possibilityGuess n p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 (SS:list<_>) =
...
let rec posabilityguess n p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14(SS:list)=
...