У меня есть следующая проблема: учитывая max (max) apacity и заданный список значений (listOfValues), мне нужно вернуть список со значениями из listOfValues. Сумма элементов должна быть < = max, и мне нужно определить приоритеты более высоких значений.Ошибка при попытке «распечатать» список в Haskell
Пример: набрав solvingProblem 103 [15, 20, 5, 45, 34] я должен получить: [45, 45, 5, 5]
Для того, чтобы решить эту проблему я создать следующий код:
solvingProblem max [] = 0
solvingProblem max listOfValues | max == 0 = 0
| otherwise = createList max listOfValues []
createList max [] result = -1
createList max listOfValues result | smaller listOfValues > max = -1
| higher listOfValues > max = createList max (remove (higher listOfValues) listOfValues) result
| otherwise = createList (max - higher listOfValues) listOfValues (insert (higher listOfValues) result)
higher [a] = a
higher (a:b:x) | a > b = higher (a:x)
| otherwise = higher (b:x)
smaller [a] = a
smaller (a:b:x) | a < b = smaller (a:x)
| otherwise = smaller (b:x)
remove x [] = []
remove x (h:t) | x == h = remove x t
| otherwise = h : remove x t
insert x (h:t) = x : h : t
В двух строках, где я возвращаю «-1», должен быть параметр «результат», но если я изменил «-1» на «результат», код не загружается на ghci.
Может кто-нибудь мне помочь?
Спасибо и извините за мой плохой английский.
Всегда добавляйте сигнатуры типов для своих функций. Они делают код более читабельным и идиоматичным, и, самое главное, позволяют GHC проверять ваши функции, действительно возвращать то, что вы намеревались, часто значительно улучшая сообщения об ошибках типа. Кроме того, в будущем, когда вы спрашиваете о SO, если вы получаете сообщение об ошибке от компилятора, опубликуйте его!Он содержит ценную информацию для нас, даже если это может вам мало что сказать. – chi