2017-01-15 7 views
2

私はヘルパー関数 'a - > boolを持つ関数を記述しようとしています。私の問題は、私はこのヘルパー関数からの戻り値を使用しようとしているとき、私はエラーを取得する、である(それは関数ですので?)F#での等価チェック

タイプ'a -> bool' does not support the 'equality' constraint

があります私は戻り値を使用することができるように関数を事前評価するためにそれを得る方法?

例:

let primelist n = 
    let rec prim n = function 
     | []     -> true 
     | x::xs when n % x = 0 -> false 
     | x::xs    -> prim n xs 

    let rec help n list = function 
     | n when (prim n = true) -> List.rev (n::list) 
     | n      -> List.rev list 
     | i when (prim i = true) -> help n (i::list) (i+1) 
     | i      -> help n list (i+1) 
    help [2] n 
+0

ちょうど私の自己^^ – kam

答えて

2

このような何かが、トリックを行うだろう:

ここ
let primelist n = 
    let rec prim n = function 
     | []     -> true 
     | x::xs when n % x = 0 -> false 
     | x::xs    -> prim n xs 

    let rec help n list arg = 
     let prime n = prim n list 
     match arg with 
     | n when (prime n = true) -> List.rev (n::list) 
     | n      -> List.rev list 
     | i when (prime i = true) -> help n (i::list) (i+1) 
     | i      -> help n list (i+1) 
    help [2] n 

私は新しい関数を作成するためにカリー化を使用しています。

+3

が見つかりませんでした。 n(素数n =真) 'と' |私は(プライムi =真) '重複するケース? '| nと '| '私は? – ildjarn

+0

は間違いなくこのケースを見ていますが、一度に1つだけ修正したと思っています –