Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# F中的等式检查#_F#_Constraints - Fatal编程技术网

F# F中的等式检查#

F# F中的等式检查#,f#,constraints,F#,Constraints,我试图写一个函数,其中有一个辅助函数,'a->bool。我的问题是,当我试图使用这个helper函数的返回值时,我得到了错误(因为它是一个函数?) 类型'a->bool'不支持“相等”约束 有没有办法让它预先评估函数,以便我可以使用返回值 例如: let primelist n = let rec prim n = function | [] -> true | x::xs when n % x = 0 ->

我试图写一个函数,其中有一个辅助函数,'a->bool。我的问题是,当我试图使用这个helper函数的返回值时,我得到了错误(因为它是一个函数?)

类型
'a->bool'不支持“相等”约束

有没有办法让它预先评估函数,以便我可以使用返回值

例如:

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

像这样的东西可以达到目的:

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

在这里,我使用了currying来创建一个新函数。

刚刚发现了一个错误,我自己在(prime n=true)时不是
|n
而在(prime I=true)时是
|I
重复的情况
|n
|i
?看起来确实如此,但我认为一次只解决一件事