1

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

4

2 回答 2

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
于 2013-10-22T20:50:41.003 回答
1

Rascal 不支持无穷大。

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

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

然后,您可以使用模式匹配或 is 或其他任何方法来处理差异。

if (arity is inf) {...}
int foo(fixed(int size)) = ...; 
int foo(inf()) = ...;
于 2013-10-22T20:03:30.410 回答