Gibt es eine bessere Möglichkeit, diese Funktion neu zu erstellen? Es kompiliert gut.
Das habe ich:
%Vor%Ich frage mich nur, ob es eine bessere Möglichkeit gibt, dies zusammenzufassen:
%Vor%Es funktioniert gut. Wenn Sie das Programm kürzer machen möchten, können Sie schreiben:
%Vor% Da die erste Zeile nur ausgelöst wird, wenn mindestens eine der drei Listen nicht (_:_)
(also []
) ist. Dies wird jedoch manchmal als Anti-Pattern betrachtet, da in einem sehr unähnlichen Fall, dass man dem Listdatentyp einen Konstruktor hinzufügt, dies zu einer leeren Liste führt (in diesem Fall erhalten wir vielleicht einen Fehler). Ich stimme zu, dass dies für Listen nahezu unmöglich ist: Viele Bibliotheken und Programme würden nicht mehr funktionieren. Aber im Allgemeinen ist es nicht ungewöhnlich, dass Sie beispielsweise einen Datentyp entwerfen und später Ihre Meinung ändern und einen zusätzlichen Konstruktor hinzufügen.
Wenn wir den Quellcode von zip3 :: [a] -> [b] -> [c] -> [(a,b,c)]
untersuchen, , dann sehen wir, dass es so implementiert wird [Quelle] :
%Vor%
Aus irgendeinem Grund wird zip
selbst im "Frage" -Stil implementiert [Quelle] :
%Vor%
An Ihrem Ansatz ist nichts grundsätzlich falsch, aber Sie können die ersten drei Fälle am Ende zu einem Sammelpunkt zusammenfassen.
%Vor%Tatsächlich ist dies , wie GHC es tut .