3

Rationals(int * int)の構造を作成していて、関数の1つは次のとおりです。

  fun diff ((n, d), (n', d')) = let val (top, bot) = sum ((n, d), (~n', d'))
                                  in 
                                    (top / gcd(top, bot), bot / gcd(top, bot))
                                  end

gcdは私に最大公約数を与えるので、私は2/8ではなく、本来の1/4になります。gcdはmodを使用してgcdを検索するため、intを返します。しかし、除算を使用した式をintとして入力することはできません。diff宣言の最後に追加しようとする: int * intと、式real*realとint*intが一致しないという型エラーが発生します。

整数除算を強制したり、式を整数にキャストしたりするにはどうすればよいですか?両方が可能であれば、どちらが良いですか?

4

2 に答える 2

5

ええ、あなたは間違った演算子を使用しています。/は浮動小数点除算演算子です。div(D.Shawleyが述べたように)は整数除算演算子です。div2つの整数を除算していて、整数を取得したいので、この場合に使用するのは正しいことです。

于 2009-04-14T05:36:08.137 に答える
2

ひょっとして SML にはdiv演算子がありますか? ML で遊んでから何年も経ちますが、整数除算を強制するかなり標準的な方法のようです。

于 2009-04-14T03:09:15.027 に答える