2010-11-07 66 views
1

我有以下代码:F#类型的选项问题

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) 

它是如何可能的是,编译器不会允许我从类型选项列表< INT <>>的SSUM返回值。我会返回这种类型,而不是别的。 有人有任何想法吗? 非常感谢。

回答

5

我认为你只是缺少括号:

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

没有他们,你描述的ssum返回类型,没有参数类型的xs

+0

非常感谢你;) – 877 2010-11-07 13:32:06

0

在这种情况下,你可以让类型推断做的工作并删除类型声明:

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