[Haskell] Wie funktioniert Punkt-vor-Strich-Rechnung?
-
Wieso funktioniert in Haskell Punkt-vor-Strich-Rechnung wenn + und * einfach nur Funktionen wie jede andere darstellen?
Man kann ja auch eigene Operatoren definieren, wie aber sind die "Standardoperatoren" definiert?
(+) :: a -> a -> a (+) x y = x + y <- Oops
Sind die wirklich wie in Prolog mit s(0), s(s(0)), etc. definiert? Kann ich mir nicht vorstellen. Wie ist da das Konzept?
MfG SideWinder
-
Das Stichwort ist fixity declaration:
http://www.haskell.org/onlinereport/decls.html#fixity
-
mngbd schrieb:
Das Stichwort ist fixity declaration:
http://www.haskell.org/onlinereport/decls.html#fixity
Danke, weißt du auch etwas zu meiner zweiten Frage?
MfG SideWinder
-
(+) und () sind Teil einer Klasse, das heißt du kannst neue Typen definieren, und für diese auch (+) und () ganz anders implementieren als für andere Typen. Beispiel:
data Number = Small | Big instance Num Number where Small + Big = Big Big + _ = Big Small + Small = Small (*) = (+) ... -- und so kann man das verwenden. Wahnsinn! veryBig = Big + Big
Für Standardtypen wie Int und Integer werden die Definitionen von (+), (*) etc. in der Runtime, also als C-Funktionen, definiert.
-
D.h. es ist nicht anders als in C++.
-
Zeus schrieb:
D.h. es ist nicht anders als in C++.
Naja, in C++ ist + keine Funktion. Ich hätte mir schon ab und zu gewünscht, + oder so wäre als Funktion verwendbar.
-
Danke für die Antwort, das war genau das, was ich wissen wollte.
MfG SideWinder