0

有人可以告诉我如何在 ATS 中实现以下功能:

fun int2double (x: int): double

谢谢!

4

4 回答 4

2

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

fun int2double(x: int): double = $UN.cast{double}(x)
于 2016-10-16T10:55:20.863 回答
1

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

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

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

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

如果编译为 JavaScript,则 int2double 已经定义。

于 2016-10-15T17:05:07.610 回答
1

一般来说,可以简单地使用目标语言中可用的任何东西来实现所需的功能。例如,假设您在 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 等,这同样适用。

于 2016-10-19T18:16:31.403 回答
0

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

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

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

于 2016-10-17T11:22:14.250 回答