заявление ifif в Стандартном ML? - PullRequest
3 голосов
/ 30 января 2012

Я делаю домашнее задание, чтобы сделать функцию sumOdd для компьютера суммой первых n нечетных целых чисел, но я не могу найти какой-либо оператор типа elseif для этого. Что я пытаюсь сделать, это ниже, но, конечно, не работает:

fun sumOdd n = if n=0 then 0 elseif (n mod 2)=0 then sumOdd(n-1) elseif n + sumOdd(n-1);

Ответы [ 2 ]

12 голосов
/ 30 января 2012

Ваша функция не скомпилирована, потому что elseif не является ключевым словом в SML.Изменение последнего elseif на else и других elseif на else if должно исправить ошибку.

Кроме того, функция более читабельна в следующем формате:

fun sumOdd n = if n = 0 then 0 
               else if n mod 2 = 0 then sumOdd(n-1) 
               else n + sumOdd(n-1)
0 голосов
/ 26 мая 2016

Вы также можете убрать необходимость в выражении else if, отделяя базовый случай от общего случая:

fun sumOdd 0 = 0 
  | sumOdd n = if n mod 2 = 0 then sumOdd(n-1)
               else n + sumOdd(n-1)

Следует также отметить, что это решение (и ваше собственное) фактически не суммируетпервые N нечетных чисел.Он вычисляет сумму всех нечетных чисел, меньших, чем N.

sumOdd(5) дает 9(5+3+1), когда он должен дать 25(1+3+5+7+9).

...