F#类型选项问题

时间:2010-11-07 13:26:38

标签: f# types option

我有以下代码:

let rec sums1 n = function
            | (a,b,x:int array,s,k) when (s<n&&b=x.Length-1) -> []//None
            | (a,b,x:int array,s,k) when (a=b&&((x.Length-1)=b))->[]// None 
            | (a,b,x,s,k) when (s=n) -> (Array.toList(Array.sub x a k)) 
            | (a,b,x,s,k) when (s<n) -> sums1 n (a,b+1,x,s+x.[b+1],k+1)
            | (a,b,x,s,k) when (s>n) -> sums1 n (a+1,b,x,s-x.[a],k-1)    
            | (a,b,c,d,e) -> []//None

let neco n s =match (sums1 n (0,-1,s,0,0)) with
        | [] ->None
        | x ->Some x
let ssum n xs:list<int> = neco n (List.toArray xs)

编译器如何不允许我从类型选项&lt;的类型的ssum值返回?列表&lt; int&gt;取代。我将返回此类型,而不是其他类型。 有人知道吗? 非常感谢。

2 个答案:

答案 0 :(得分:5)

我认为你只是错过了parens:

let ssum n (xs:list<int>) = neco n (List.toArray xs) 
           ^            ^

没有它们,您将描述ssum的返回类型,而不是xs的参数类型。

答案 1 :(得分:0)

在这种情况下,您可以让类型推断完成它的工作并删除类型声明:

 let ssum n xs = neco n (List.toArray xs)