在F#中,相等運算符(=)通常是擴展的,而不是內涵。那很棒!不幸的是,在我看來,F#並沒有使用指針相等來縮短這些擴展比較。F#中的快捷等式檢查?
例如,下面的代碼:
type Z = MT | NMT of Z ref // create a Z: let a = ref MT // make it point to itself: a := NMT a // check to see whether it's equal to itself: printf "a = a: %A\n" (a = a)
...給了我一個大胖子分段錯誤[*],儘管事實是 'A' 和 'A' 都計算出相同的參考。這並不好。其他函數式語言(如PLT Scheme)通過保守地使用指針比較得到了正確的結果,當它可以使用指針比較來確定時返回「真」。因此:我會接受F#的平等運算符不使用捷徑的事實;有沒有辦法執行內涵(基於指針的)相等性檢查? (==)運算符沒有在我的類型中定義,如果有人能夠告訴我它有某種方式可用,我會喜歡它。
或者告訴我,我錯了,我的情況分析:我很喜歡這個,太...
[*]這很可能是Windows上的堆棧溢出;有一些關於莫諾我不喜歡...
謝謝!順便說一句:是的,這實際上是在mono/osx上轉儲核心。也許tail-calling在我使用的mono/fsharp的特定組合中進行相等性檢查時沒有正確執行。 – 2010-04-21 21:09:17