2011-10-03 43 views
3

The Haskell 98 Report它說,爲什麼Haskell數字文字需要以數字開頭和結尾?

浮動文字都必須前和小數點後包含數字;這確保小數點不能被誤認爲是另一個點號字符的用法。

這可能是什麼其他用途?我無法想象任何這樣的法律表達。

(澄清的動機:我知道有很多人寫的像9.00.7所有的時間數不需要,但我不能完全與此交好自己我行與0.7,而那麼更緊湊,但否則不會更好.7,但被覆寫的尾隨零感覺我錯了,除非他們表達某些數量精確到十分之一,這在很少的情況下,在Haskell使我寫9.0-數字的情況很少。)


我忘了編寫沒有圍繞空白的函數組合是合法的!這當然是一種可能性,但可以通過貪婪地解析浮動文字來避免此問題,例如 replicate 3 . pred$8((replicate 3) . pred) 8replicate 3.pred$8(replicate 3.0 pred)8


沒有表達式,其中整數文字是要求直接站在.旁邊,沒有空格?

+0

您自己給出了最好的例子,爲什麼數字文字不應該以'。'開頭或以'。'開頭。你提出的「解決方案」對我來說聽起來很糟糕 - 至少它破壞了正交性(也就是說,爲什麼我可以寫'abs 3 + b',而不是'max 3.b',我的意思是'(。)(max 3)b ' – Ingo

+1

@Ingo爲記錄,這個例子取自Rotors的答案 - 至於正交性:你不能'最大Ab'(用'A'作爲'Ord'實例的數據構造函數,這樣'( )(最大A)b'是合法的) – leftaroundabout

回答

4

其他用途的一個示例是點運算符(或其他任何以點開頭或結尾的運算符):replicate 3.pred$8

另一種可能的用途是使用範圍表達式:[1..10]。另外,您可以(幾乎)總是寫9而不是9.0,從而完全避免需要.

+0

事實上,能夠爲任何'Num'實例編寫「整數」文字是Haskell的一大優點,至於範圍,這些看起來毫不含糊,不是嗎? ?至少,'[1.0 0.10]'是非法的 – leftaroundabout

+0

@leftaroundabout哦,但這就是你錯了的地方!在lambdabot中試一下:它的計算結果爲'1.0',你需要的是一個函數實例'Num' –

3

(.)最突出的用法之一是函數組合。因此,haskell編譯器解釋了用數字組成函數a並且不知道該做什麼的a . 1;類似地,另一種方式是「循環」。其他用法(.)可以找到here

.70.7的其他問題我不知道。

3

對於允許'9',我看起來並沒有太大的問題。和'.7'。我認爲當前的設計更多地反映了Haskell原始設計師的想法。

2

雖然它可能會被消除歧義,但我認爲從允許.77.不會獲得太多收益。代碼應該被以及機器讀取,並且在字面的任意一端意外地丟失小數點比在中間更容易。

我會在任何一天對保存的字節進行額外的可讀性。

+2

這是一個論點,因爲人們被用於周圍零符號 - 如果他們是_計算機科學可能是的,但在科學並且設計一個結尾的零帶有額外的準確性信息,所以對於我們來說,這是相當混亂和減少可讀性的。 - 我不能爭辯說離開__零__,這更像是自從我的QBasic時代以來,我幾乎每個人都會說的一種習慣做法,幾乎所有人都告訴我要阻止它。 – leftaroundabout

相關問題