无限的常数是否存在?

时间:2013-10-22 17:41:01

标签: rascal

我注意到Rascal支持大整数。但我无法找到无穷大的常数。它们存在吗?如果没有,我建议添加它们,因为有时它们非常有用。目前,我的解决方法是定义类似int pInf = 1024的内容,但在极端情况下可能会失败。

2 个答案:

答案 0 :(得分:2)

Rascal中的有理数实际上支持无穷大(以零分母的形式),但这更多是实现的副作用,而不是真正的设计选择,所以你可能不想指望它。我也不能保证所有角落案件都得到正确处理。

例如,

rascal>1r0
rat: 1r0

rascal>1r0*2
rat: 1r0

rascal>-1r0
rat: -1r0

rascal>-1r0*(-2)
rat: 1r0

rascal>1 / 1r0
rat: 0r

rascal>12345678901234567890 > 1r0
bool: false

rascal>25r0
rat: 1r0

rascal>25 / 0
|stdin:///|(5,1,<1,5>,<1,6>): ArithmeticException("/ by zero")


rascal>25 / 0r
rat: 1r0

答案 1 :(得分:1)

Rascal不支持无限。

处理这种可变性的“Rascal”方法是引入代数数据类型,如:

data Arity = inf() | fixed(int size)

然后你可以使用模式匹配或者是或者用什么来处理差异。

if (arity is inf) {...}
int foo(fixed(int size)) = ...; 
int foo(inf()) = ...;