Namaran

Code daily. Without assist.

2026-09-19

SafeDiv.hs

safeDiv :: Int -> Int -> Maybe Int
-- write this: Nothing when the divisor is 0, Just (quotient) otherwise
-- (don't signal failure with a sentinel value like -1)

safeDivを実装してください。0除算のときは-1のような番兵値ではなくNothingを返すこと。

Reference
safeDiv :: Int -> Int -> Maybe Int
safeDiv _ 0 = Nothing
safeDiv x y = Just (x `div` y)

Intだけを返す型のままだと、「失敗」を表すのに-1のような番兵値を選ばざるを得ませんが、(-7) `div` 7のように負の数の割り算では商そのものが-1になり得るので、その値が本物の商なのか失敗の印なのか、戻り値だけからは区別できません。Maybe Intにすると、「値がある(Just)」と「値がない(Nothing)」がIntの値域とは独立した型レベルの区別になるので、番兵値がたまたま正当な結果と衝突する心配がなくなります。これは参考実装であり、唯一の正解ではありません。