私は、次のコードを持っている:より効率的な整数データ型の処理方法はありますか?
datatype eInt = infinity of int | 0 | Int of int;
exception undefined;
fun eAdd(e1:eInt, 0:eInt) = e1
| eAdd(0, e2) = e2
| eAdd(e1, infinity) = infinity
| eAdd(infinity, e1) = infinity
| eAdd(infinity, ~infinity) = raise undefined
| eAdd(~infinity, infinity) = raise undefined
| eAdd(e1, e2) = e1 + e2;
3種類が可能になり、新たなデータ型があります:無限大、0、およびintは。私は0がここで重複するかもしれないと思うが、私はすべて確信していない。
パターンマッチングを使用して、2つのeIntを一緒に追加することでさまざまな種類の可能な結果を作成しました。
4つの異なる結果があります。 0がある場合
- 、∞がある場合、の2の追加を返し、それ以外の
- 未定義何も返し、∞と-∞がある場合∞
- を返すint型
- 他を返しますそれら
私はこのアルゴリズムは、より効率的になりたと考えることができる唯一のことは、私は二重の例を削除した場合で、かつ最後に、実行アルゴリズムを(e1、e2)から(e2、e1)に反転した後に再び行う。
これをより効率的にするためのアイデアはありますか?私はさらに多くのケースを持つ部門などの他の業務を追加する予定です。
こんにちはサイモン、ちょうど全体的にありがとうと言いたいと思っていました。あなたは私をたくさん助けてくれるし、あなたがしていることに本当に感謝しています。私はそれを投稿してから私の答えを改訂しました。私はあなたが持っているほとんどの変更を加えましたが、それ以上の変更があります。私は自分の質問を変更して、他の人が私が現在持っているものを見ることができるようにします唯一の違いは、このシナリオで 'NONE'と' SOME'が何をするのか尋ねることができますか? –
@AndrewRaleigh:StackOverflowに関するコメントは、前後の議論にはあまり適していません。 [H&R](http://www.it.dtu.dk/introSML/)のような入門書の適切なセクションを読むことをお勧めします。または、あなたはgoogleを使うことができます:[here](http://stackoverflow.com/questions/24980801/what-are-the-options-some-and-none-sml)、[here](http://courses.cs .washington.edu/courses/cse341/04wi/lectures/10-ml-exceptions.html)(最後のリソースはかなり良いようです)。 –
本のためにありがとう、私は良いものを探していた:) –