如何在 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等
有人能告诉我如何实现以下内容吗 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等