n
与えられた数値が完全平方かどうかを調べる関数を書き込もうとしています。これが私の試みです:
local
fun perfect_square_iter x z = let val sqr = z * z in
case (x,z) of
(sqr,_) => true
| (_, 0) => false
| _ => perfect_square_iter x (z - 1)
end
in fun perfect_square n = perfect_square_iter n n
end
これを で実行しようとするとsml myfile.sml
、次のエラーが表示されます。
lab03.sml:17.5-20.43 Error: match redundant
(sqr,_) => ...
--> (_,0) => ...
--> _ => ...
/usr/lib/smlnj/bin/sml: Fatal error -- Uncaught exception Error with 0
raised at ../compiler/FLINT/trans/translate.sml:1735.13-1735.21
これは、2 つの定数にのみ一致し、それ以外のすべてに一致するため、冗長なパターンではないようです。コンパイラがこれを冗長と見なすのはなぜですか?