如何在 ATS 中将整数转换为双精度数?

How to turn an integer into a double in ATS?

有人能告诉我如何实现以下内容吗 ATS 中的函数:

fun int2double (x: int): double

谢谢!

这取决于您要编译成的目标语言。

如果你编译成C,你可以这样做:

staload
UN = "prelude/SATS/unsafe.sats"

fun int2double(x: int): double = $UN.cast(x)

如果你编译成JavaScript,那么int2double已经被定义了。

我想你曾经说过以下是更好的方式...

fun int2double(x: int): double = $UN.cast{double}(x)

如果您要编译为 C 代码,则必须使用如下内容:

fun int2double(x:int): double = g0int2float_int_double (x)

这是一个内置函数(详见$ATSHOME/prelude/SATS/float.sats)。

一般来说,可以简单地使用目标语言中可用的任何东西来实现所需的功能。例如,假设您在 C 中有以下函数:

double int2double_in_c(int x) { return (double)x; }

然后你可以在ATS中声明如下:

fun int2double(x: int): double = "mac#int2double_in_c"

对于 ATS 中对 int2double 的每次调用,编译器都会在生成的代码中生成对 int2double_in_c 的调用。如果你想编译成JS,同样适用Python、PHP等