初めて sml を学習していますが、パターン マッチングの構文についてよくわかりません。
練習として、2 進数に関する簡単なプログラムをいくつか作成してみました。
datatype Digit = Zero | One
type Nat = Digit list
fun inc [] = One::[]
| inc (Zero::rest) = (One::rest)
| inc (One::rest) = Zero::inc(rest)
fun dec [] = []
| dec (One::rest) = (Zero::rest)
| dec (Zero::rest) = One::dec(rest)
fun add (ds1, ds2) =
let
fun addition ([],[],Zero) = []
| addition (ds1, [], Zero) = ds1
| addition ([], ds2, Zero) = ds2
| addition (One, Zero, Zero) = (One::ds1)
| addition (One, Zero, One) = Zero::addition(ds1,ds2,One)
| addition (Zero, One, Zero) = (One::ds1)
| addition (Zero, One, One) = Zero::addition(ds1,ds2,One)
| addition (Zero, Zero, Zero) = (Zero::ds1)
| addition (Zero, Zero, One) = (One::ds1)
| addition (One, One, Zero) = Zero::addition(ds1,ds2,One)
| addition (One, One, One) = One::addition(ds1,ds2,One)
in
addition(ds1, ds2, Zero)
end
最初の 2 つの作業は見つかりましたが、追加作業を行うことができません。3 番目の関数のポイントは、2 進数を加算して数字のリストを返すことです。
どんな助けでも大歓迎です。ありがとう