Ich habe das folgende Problem: bei einer maximalen (max) Kapazität, und eine Liste von Werten (listOfValues) muss ich eine Liste mit Werten aus der listOfValues. Die Summe der Elemente muss < = max und ich muss die höheren Werte priorisieren.Fehler beim Drucken der Liste in Haskell
Beispiel: Eingabe solvingProblem 103 [15, 20, 5, 45, 34] ich muß erhalten: [45, 45, 5, 5]
Zur Lösung des Problems i den folgenden Code erstellen:
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
In den zwei Zeilen, in denen ich "-1" zurückgeben werde, sollte der Parameter "result" sein, aber wenn ich "-1" in "result" ändere, wird der Code nicht auf ghci geladen.
Kann mir jemand helfen?
Vielen Dank und Entschuldigung für mein schlechtes Englisch.
Fügen Sie immer Signaturen für Ihre Funktionen hinzu. Sie machen den Code lesbarer und idiomatischer, und vor allem lässt GHC Ihre Funktionen in der Tat zurückgeben, was Sie beabsichtigen, und verbessert häufig die Typfehlermeldungen erheblich. Wenn Sie in Zukunft bei SO nachfragen, wenn Sie vom Compiler einen Fehler erhalten, posten Sie es!Es enthält wertvolle Informationen für uns, selbst wenn es Ihnen wenig sagen könnte. – chi