JIJ*_*JJH 1 ocaml pattern-matching
我试图在OCaml中创建一个函数,该函数表示数字a是否为素数.
这是功能:
let isprime a b =
match b with
a -> true
|_ -> if a mod b = 0 then false else isprime (a)(b+1);;
Run Code Online (Sandbox Code Playgroud)
当我跑:isprime (4)(2);;它说我true,但我不明白为什么,因为在这种情况下4 mod 2 = 0,因此它应该返回false...
使用标识符作为模式时,您将匹配的值绑定到该标识符.同
match b with
| a -> true
Run Code Online (Sandbox Code Playgroud)
相反的比较b来a,你要创建一个新的局部变量a和分配给它的价值b.这将永远成功,因此关于_分支未被使用的警告.
我建议只使用if/else:
let rec isprime a b =
if a = b then
true
else if a mod b = 0 then
false
else
isprime a (b+1)
Run Code Online (Sandbox Code Playgroud)
编辑:或者你可以做
let rec isprime a b =
match () with
| _ when a = b -> true
| _ when a mod b = 0 -> false
| _ -> isprime a (b+1)
Run Code Online (Sandbox Code Playgroud)
但由于这不会进行任何实际的模式匹配,因此会if/else传达您正在做得更好的事情.
注意:您也错过了rec我在上面添加的关键字.
| 归档时间: |
|
| 查看次数: |
151 次 |
| 最近记录: |