Как превратить целое число в двойное в ATS?

Может ли кто-нибудь сказать мне, как реализовать следующую функцию в ATS:

fun int2double (x: int): double

Спасибо!


ats
person Hongwei Xi    schedule 15.10.2016    source источник
comment
Я тестирую stackoverflow.   -  person Hongwei Xi    schedule 16.10.2016


Ответы (4)


Я думаю, вы однажды сказали, что следовать лучше...

fun int2double(x: int): double = $UN.cast{double}(x)
person masterq    schedule 16.10.2016
comment
Есть ли способ удалить два предыдущих комментария? - person Hongwei Xi; 16.10.2016
comment
Вы должны быть в состоянии сделать это, нажав кнопку удаления этого комментария, которая появляется при наведении курсора на комментарий. - person Arets Paeglis; 19.10.2016
comment
Я не вижу ничего зависшего прямо сейчас; может быть, я еще не заработал привилегию :) - person Hongwei Xi; 19.10.2016

Это зависит от целевого языка, на который вы хотите скомпилировать.

Если вы скомпилируете в C, вы можете просто сделать:

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

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

Если вы компилируете в JavaScript, то int2double уже определен.

person Hongwei Xi    schedule 15.10.2016

В общем, можно просто использовать все, что доступно на целевом языке, для реализации необходимой функции. Например, скажем, у вас есть следующая функция в C:

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

Затем вы можете объявить следующее в ATS:

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

Для каждого вызова int2double в ATS компилятор генерирует вызов int2double_in_c в сгенерированном коде. То же самое применимо, если вы хотите скомпилировать в JS, Python, PHP и т. д.

person Hongwei Xi    schedule 19.10.2016

Если вы компилируете код C, вам придется использовать что-то вроде следующего:

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

которая является встроенной функцией (подробнее см. $ATSHOME/prelude/SATS/float.sats).

person Artyom Shalkhakov    schedule 17.10.2016