Notiere die Signatur der Funktion Zusammensetzung Betreiber:
(.) :: (b -> c) -> (a -> b) -> a -> c
^ ^ ^
Functions
It 2 Funktionen übernimmt, die jeweils die 1 Argument und gibt eine Funktion, die ein Argument des gleichen Typs wie die zweite Funktion nimmt , und gibt den gleichen Typ wie der erste zurück.
Ihr Versuch, zwei +
s zu schreiben, funktionierte nicht, da +
2 Argumente benötigt, also ist dies ohne eine hashische/kreative Lösung nicht möglich.
An diesem Punkt, würde ich sagen, zwingen Zusammensetzung, wenn es nicht das Problem passt nur wird Ihr Leben schwieriger zu machen.
Wenn Sie mehrere Zahlen summieren möchten, können Sie eine Funktion wie schreiben konnte:
sum :: [Int] -> Int
sum nums = foldl (+) 0 nums
Oder da nums
auf der Rückseite der Definition erscheint, kann es ganz fallen gelassen werden, um eine „punkt- nachgebend freie“Form:
sum :: [Int] -> Int
sum = foldl (+) 0
Es reduziert/+
über eine Liste von Zahlen klappt. Wenn Sie noch keine Falten benutzt haben, schauen Sie sich jetzt in ihnen an. Sie sind einer der wichtigsten Wege, um in Haskell Loopings zu erreichen. Es ist im Wesentlichen "implizite Rekursion", wenn Sie mit Listen arbeiten oder irgendetwas anderes iterierbar ist.
Mit der obigen Funktion definiert, können Sie es gerne verwenden:
sum [1, 2 3, 4, 5]
Iirc, Gelassenheit erfordert, dass die Funktion nur 1 Argument akzeptiert. Die binären Operatoren nehmen jeweils 2 – Carcigenicate
Und warum nicht einfach die Liste mit '+' falten? – Carcigenicate
@Carcigenicate hmm, das ist seltsam. Das hätte ich nicht erwartet. Gibt es einen Weg, es zu tun? - edit: und was ist fold, und welche liste? – theonlygusti