F# F中的等式检查#
我试图写一个函数,其中有一个辅助函数,'a->bool。我的问题是,当我试图使用这个helper函数的返回值时,我得到了错误(因为它是一个函数?) 类型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'不支持“相等”约束
有没有办法让它预先评估函数,以便我可以使用返回值
例如:
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
?看起来确实如此,但我认为一次只解决一件事