Я уверен, что проблема тривиальна. К сожалению, я новичок в программировании Ocaml, но я, скорее всего, смотрю в неправильном направлении.Сумма наибольших значений
Я хочу создать функцию sum_largest_values
, которая принимает n самых больших значений между входами и суммирует их.
Моя лучшая попытка до сих пор:
utop # let sum_largest_values (x:int)(y:int) =
if (x > y) || (y > x) then ((+) x y)
else
0;;
Проблема встает, когда я пытаюсь добавить третье значение:
utop # let sum_largest_values (x:int)(y:int)(z:int) =
if (x > y > z) || (y > x > z) then ((+) x y)
else
0;;
Я не могу определить такую функцию:
Error: This expression has type int but an expression was
expected of type bool
Почему третье значение z
делает функцию непригодной?
разделите и победите! Функциональное программирование поощряет композицию, т. Е. Набирает наибольшую n -> сумму – karakfa
. Я не вижу, как любая версия соответствует вашим требованиям; конечно, если спецификация «суммирует n наибольших значений», то n должно быть параметром для функции, но я ее нигде не вижу.** Начните с получения правильной сигнатуры функции **, прежде чем беспокоиться о теле. Если ваша задача состоит в том, чтобы суммировать n наибольших элементов списка вещей, тогда подпись должна включать * список * и * счетчик *. Получите это право и сделайте метод возвратом * неправильного * значения, и теперь у вас есть что-то, что вы можете по крайней мере начать тестировать, пока вы получите правильное тело. –
Кроме того, почему метод 'sumsqr' вместо' sum_largest_values', если это то, что он делает? –