myfunc:: [Int] -> Int -> Int
myfunc mylist i =
if length(mylist) == 0 then 1
else
(head(mylist) * i) + myfunc((tail(mylist)) (i+1))
Я хочу получить взвешенную сумму по списку.Haskell multiple arguments function
, например, при заданном значении параметра [10,9,8,7,6]
и 1
, Я хочу, чтобы получить 10*1 + 9*2 + 8*3 + 7*4 + 6*5 ..
Но мой код помещает ошибки,
test.hs:9:18: error:
• Couldn't match expected type ‘Int’ with actual type ‘Int -> Int’
, как решить эту проблему ??
есть много * круглых скобок *: 'myfunc ((tail (mylist)) (i + 1))' - try 'myfunc (tail mylist) (i + 1)' (вы вызываете 'tail (mylist)' ' с '(i + 1)') – Carsten
Вызов функций в Haskell не требует скобок. 'function first_argument' достаточно. Несколько аргументов передаются как 'function first_argument second_argument third_argument', что является таким же, как' ((function first_argument) second_argument) third_argument'. Функция с типом 'a -> b -> c' на самом деле является функцией с типом' a -> (b -> c) ': она принимает один аргумент (как и все функции Haskell) и возвращает другую функцию. –
Вы, кажется, программируете в Haskell, как и на языке * обязательного * программирования. Mind Haskell - это * функциональный * язык программирования. Поэтому вы должны программировать * функционально *. Ваш текущий код очень * un * -Haskell. –