为什么Haskell数字文字需要以数字开头和结尾?
据说 浮点文字必须包含小数点前后的数字;这样可以确保小数点不会被误认为是点字符的另一种用法 这还有什么用呢?我无法想象有任何这样的法律表达 (为了澄清动机:我知道很多人总是写像为什么Haskell数字文字需要以数字开头和结尾?,haskell,floating-point,literals,rational-numbers,Haskell,Floating Point,Literals,Rational Numbers,据说 浮点文字必须包含小数点前后的数字;这样可以确保小数点不会被误认为是点字符的另一种用法 这还有什么用呢?我无法想象有任何这样的法律表达 (为了澄清动机:我知道很多人总是写像9.0或0.7这样的数字,而不需要这样做,但我不能完全与之成为朋友。我同意0.7,而不是更紧凑,但在其他方面没有更好的.7,但我觉得写得比后面的零更好,除非我不同意。)hey express有些数量精确到十分之一,这在Haskell让我写9.0-数字的情况下很少出现。) 我忘了在没有空格的情况下编写函数组合是合法的!这当
9.0
或0.7
这样的数字,而不需要这样做,但我不能完全与之成为朋友。我同意0.7
,而不是更紧凑,但在其他方面没有更好的.7
,但我觉得写得比后面的零更好,除非我不同意。)hey express有些数量精确到十分之一,这在Haskell让我写9.0
-数字的情况下很少出现。)
我忘了在没有空格的情况下编写函数组合是合法的!这当然是一种可能性,不过可以通过贪婪地解析浮动文本来避免这个问题,例如
replicate 3.pred$8
≡ <代码>((复制3.pred)8但复制3.pred$8
≡ <代码>(复制3.0 pred)8
没有表达式要求整数文本直接位于
旁边,而不带空格?是最显著的用法之一(.)
是函数组合。因此haskell编译器解释了用数字组合函数a的a.1
,但不知道该做什么;类似地,反过来也可以找到()
的其他用法
我不知道
.7
与0.7
的其他问题。其他用法的一个例子是点运算符(或以点开头或结尾的任何其他运算符):复制3.pred$8
另一种可能的用法是在范围表达式中:[1..10]
而且,你可以(几乎)总是写
9
而不是9.0
,这样就完全不需要
。我觉得允许“9.”和“.7”似乎没有多大问题。我认为当前的设计更多地反映了哈斯克尔最初设计师的想法。虽然可能会消除歧义,但我不认为允许<>代码> 7 和 7。< /Code >。代码既要被人阅读,也要被机器读取,更容易意外地忽略文字两端的小数点,而不是在中间。
我会在任何一天为保存的字节增加额外的可读性。事实上,能够为任何Num
实例编写“整数”文本是Haskell的一大优点。至于范围,它们看起来是明确的,不是吗?至少,[1.0.10]
是非法的。@leftaroundabout噢,但这就是你错的地方!在lambdabot中尝试一下:它的计算结果为1.0
。你所需要的只是Num
的一个函数实例。你自己给出了一个最好的例子,说明为什么数字文字不应该以“.”结尾或以“.”开头。你建议的“解决方案”对我来说,这听起来像是一个糟糕的黑客——至少它破坏了正交性(即为什么我可以写abs3+b
,但不能写max 3.b
当我的意思是()(max 3)b
@Ingo作为记录,这个例子取自Rotsor的答案。-至于正交性:你也不能写max a.b
(使用A
一个Ord
实例的数据构造函数,这样(.(max A)b
是合法的).这是一个论点,因为人们习惯了周围的零符号-如果他们是的话。在计算机科学中可能是的,但在科学和工程中,尾随零携带了额外的准确性信息,因此对我们来说,它相当混乱,并降低了可读性。-我不能争辩是否要去掉前导零,这是一种错误自从我的QBasic时代起,我就一直有一种怪癖,几乎每个人都告诉我要停止它。