2012-01-29 2 views
3

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

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

Nit: в ML нет утверждений, все это выражение. –

ответ

11

Ваша функция не компилируется, поскольку 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

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

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).