我最近刚接触F#所以请耐心等待。我遇到的问题是我试图找到素数。
我已经写了这段代码:
let isPrime n =
let rec check i =
i > n/2 || (n % i <> 0 && check (i + 1))
check 2;;
let listNums = List.filter isPrime >> List.length;;
let nums = [ 16; 17; 3; 4; 2; 5; 11; 6; 7; 18; 13; 14; ];;
let countPrimes (x:int) = x |> List.ofSeq |> listNums;;
试图打电话
countPrimes nums;;
但是这个消息失败了:
The type 'int' is not compatible with the type 'seq<'a>'
任何帮助将不胜感激
答案 0 :(得分:2)
我找到了解决方案
panelMain.add(panel1, BorderLayout.PAGE_END);
panelMain.add(panel2, BorderLayout.LINE_START);
panelMain.add(panel3, BorderLayout.LINE_END);
panelMain.add(jtf, BorderLayout.CENTER);
全部谢谢!
答案 1 :(得分:1)
x |&gt; List.ofSeq
对我来说似乎是个问题。您正在将int传递给需要列表的函数。 List.toSeq将列表更改为序列。您希望函数countPrimes采用整数列表,而不仅仅是整数。虽然Carsten是正确的,但listNums已经采用整数列表(编辑:并计算你想要提供的值isPrime是否正确)。
答案 2 :(得分:0)
您无需单独计算惩罚。足够删除并将工作:
let isPrime n =
let rec check i =
i > n/2 || (n % i <> 0 && check (i + 1))
check 2
let nums = [ 16; 17; 3; 4; 2; 5; 11; 6; 7; 18; 13; 14; ]
let listPrime lst =
lst |> List.filter isPrime
nums |> listPrime |> printfn "%A"
输出: [17; 3; 2; 5; 11; 7; 13]