Как объявить входные данные функции карри как реальные в sml? - PullRequest
1 голос
/ 23 февраля 2020

Вот мой код для карри факториальной функции. Я хочу, чтобы вывод был реальным

fun pow(x:real) (n:real)= if (n=0.0) then 1.0 else x:real*pow(x:real) (n-1:real) ;

Но мой синтаксис действительно очень неправильный, как мне это исправить?

1 Ответ

1 голос
/ 23 февраля 2020

Я думаю, что вы хотите:

fun pow x n =
  if n = 0
  then 1.0
  else x * pow x (n - 1)

или, если вы хотите быть более точным в отношении типов:

fun pow (x : real) (n : int) : real =
  if n = 0
  then 1.0
  else x * pow x (n - 1)

То есть:

  • Я думаю, вы хотите, чтобы n был типа int, а не типа real. (Ваш подход имеет смысл, только если n является неотрицательным целым числом, поскольку в противном случае рекурсия будет просто go навсегда.)
  • Вам не нужно так много :real -с везде; они ничего не добавляют, потому что компилятор может определять типы.
...