プログラミング言語 Standard ML 入門 (問題の解答例)
2 関数を用いたプログラミング

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))