有人可以告诉我如何在 ATS 中实现以下功能:
fun int2double (x: int): double
谢谢!
我想你曾经说过以下是更好的方式......
fun int2double(x: int): double = $UN.cast{double}(x)
这取决于您要编译到的目标语言。
如果你编译成 C,你可以这样做:
staload
UN = "prelude/SATS/unsafe.sats"
fun int2double(x: int): double = $UN.cast(x)
如果编译为 JavaScript,则 int2double 已经定义。
一般来说,可以简单地使用目标语言中可用的任何东西来实现所需的功能。例如,假设您在 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 等,这同样适用。
如果要编译为 C 代码,则必须使用以下内容:
fun int2double(x:int): double = g0int2float_int_double (x)
这是一个内置函数(详见$ATSHOME/prelude/SATS/float.sats
)。