Zum Beispiel:Wo und warum sollte ich extra leere Muster verwenden?
intersectBy : (a -> a -> Bool) -> List a -> List a -> List a
intersectBy _ [] _ = []
intersectBy _ _ [] = []
intersectBy eq xs ys = [x | x <- xs, any (eq x) ys]
Es gibt zusätzliche Muster für []
und scheinen, wie sie in Haskell verwendet werden Data.List
aber welche Art von Optimierung ist das? Und wo ist der Unterschied zu Idris?
Ich frage, weil ich hörte, dass "es die Argumentation darüber schwieriger machen wird" und Person, die mich sagte, die keine Zeit hatte, es vollständig zu erklären.
Ich bezweifle, wenn ich es verstehe, "den Beweis" der Funktion zu reduzieren.
Kann mir jemand die Politik der zusätzlichen Muster hier von Positionen von Haskell und Idris erklären, damit ich in der Lage sein werde, den Unterschied zu verstehen und zu sehen.
Schön, es macht jetzt Sinn! Aber wie würden Sie eigentlich einen speziellen Fall hinzufügen, der 'intersect (==) [0 ..] [2]' abdeckt? – Sibi
Warum sieht '_ [] _' überflüssig aus? – Cynede
@Heather weil '[x | x <- xs, ...] 'wird sofort zu' [] 'ausgewertet, wenn' xs' leer ist. – chi