プログラミング言語 Standard ML 入門 (問題の解答例)
2.9 2項演算子
問 2.26
16を法とした加減乗除を行う以下の演算子を定義せよ.
演算子 | 型 | 結合性 | 意味 |
---|---|---|---|
& |
int -> int | -- | 16で割った余りを求める |
&+ |
int * int -> int | infix 8 | 16を法とする加算 |
&- |
int * int -> int | infix 8 | 16を法とする減算 |
&* |
int * int -> int | infix 9 | 16を法とする乗算 |
&= |
int * int -> int | infix 2 | 16を法とする等値性テスト |
たとえば,以下のように評価される.
- &
17 ;
val it = 1 int
- 4 &*
5 &+
1;
val it = 5 int
解答例
infix 8 &+ &-; infix 9 &*; infix 2 &=; fun & n = n mod 16 fun n &+ m = ((n mod 16) + (m mod 16)) mod 16 fun n &- m = ((n mod 16) - (m mod 16)) mod 16 fun n &* m = ((n mod 16) * (m mod 16)) mod 16 fun n &= m = ((n mod 16) = (m mod 16))