Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Haskell数字文字需要以数字开头和结尾?_Haskell_Floating Point_Literals_Rational Numbers - Fatal编程技术网

为什么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时代起,我就一直有一种怪癖,几乎每个人都告诉我要停止它。