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

#ats

#ats

Вопрос:

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

 fun int2double (x: int): double
 

Спасибо!

Комментарии:

1. Я тестирую stackoverflow.

Ответ №1:

Я думаю, вы однажды сказали, что следующий способ лучше…

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

Комментарии:

1. Есть ли способ удалить предыдущие два комментария?

2. Вы должны быть в состоянии сделать это, нажав кнопку «удалить этот комментарий», которая появляется при наведении курсора мыши на комментарий.

3. Я не вижу ничего зависающего прямо сейчас; возможно, я еще не заслужил привилегию 🙂

Ответ №2:

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

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

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

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

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

Ответ №3:

В общем, можно просто использовать все, что доступно на целевом языке, для реализации необходимой функции. Например, скажем, у вас есть следующая функция в 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 и т. Д.

Ответ №4:

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

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

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