我有下面的代碼:處理整數數據類型是否有更有效的方法?
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;
有一個新的數據類型,允許三類:無窮大,0,和INT。我認爲0在這裏可能是多餘的,但我並不確定。
我使用模式匹配來從相加兩個eInts一起制定了不同類型的可能的結果。
有四種不同的結果。
- 如果有一個0,返回其他INT
- 如果有一個∞,返回∞
- 如果有一個∞和-∞,返回undefined
- 別的,返回加兩個的他們
我能想到的唯一的事情使得這個算法更有效的是,如果我刪除重複的情況,並在年底運行(e1,e2)到(e2,e1)後再次執行該算法。
進行此更高效的任何想法?我會加入其他行動,例如分裂,這將有更多的案件。
嗨西蒙,只是想說整體感謝你。你在幫我很多,我真的很感謝你在做什麼。自從發佈以來,我修改了我的答案。我做了大部分更改,除了有更多更改。我會修改我的問題,讓其他人可以看到我現在擁有的東西。唯一的區別是,在這種情況下,我可以問一下'NONE'和'SOME'嗎? –
@AndrewRaleigh:關於StackOverflow的評論並不適用於前後討論。我建議您閱讀[H&R](http://www.it.dtu.dk/introSML/)等介紹性書籍的相應部分。或者你可以谷歌周圍:[這裏](http://stackoverflow.com/questions/24980801/what-are-the-options-some-and-none-sml),[這裏](http://courses.cs .washington.edu/courses/cse341/04wi/lectures/10-ml-exceptionss.html)(最後一個資源看起來相當不錯)。 –
感謝這本書,我一直在尋找一個好的:) –