Problem mit ( Haskell)

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
Antworten
gaganaut
User
Beiträge: 9
Registriert: Mittwoch 4. Februar 2015, 09:52

Hallo,

ich habe folgendes Problem. Ich will die größte von 3 (oder mehr) Zahlen bestimmen. Wie kann ich dafür sorgen, dass Haskell einen weiteren vergleich durchführt?

Code: Alles auswählen

gr x y z	| x > y = x
		| y > z = y
		| otherwise = z
Wenn ich ausführe und z die größte, x aber größer als y ist wird trotzdem x ausgegeben weil das ja gleich zutrifft.
Ich bin blutiger Anfänger und habe zuvor nur ein klein wenig in Java rum gespielt. In java hätte ich das mit dem logischen "und" verknüpft.
BlackJack

@gaganaut: Das würde man normalerweise mit einer Max-Funktion lösen die zwei Argumente bekommt und das grössere von beiden zurück gibt. Wenn Du das mit „guards” (``|``) lösen willst, dann müsstest Du tatsächlich alle Bedingungen komplett ausformulieren. Ein logisches „und” gibt es in Haskell natürlich auch. Hat den gleichen Namen wie in Java.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Und ganz Faule nutzen statt der max-Funktion die maximum-Funktion.
Das Leben ist wie ein Tennisball.
gaganaut
User
Beiträge: 9
Registriert: Mittwoch 4. Februar 2015, 09:52

Es geht ja darum die Funktion selbst zu schreiben. Ich versuchs mal mit and
gaganaut
User
Beiträge: 9
Registriert: Mittwoch 4. Februar 2015, 09:52

keiner ne Idee? wie gesagt es geht ja darum selbst ne max funktion zu schreiben blos eben mit 3 werten.
BlackJack

@gaganaut: Zusammenfassend: Du kannst mit Guards alle Möglichkeiten hinschreiben und da dann halt die „Und”-Verknüpfung verwenden, oder Du kannst `max` benutzen, oder Du kannst `maximum` benutzen. Um Deine eigene `max3`-Funktion zu schreiben. Sind das nicht genug Alternativen!?
gaganaut
User
Beiträge: 9
Registriert: Mittwoch 4. Februar 2015, 09:52

Wie gesagt Max und maximum will ich nicht nutzen da es meine eigene Funktion sein soll. Ja klar das mit und geht aber ich dachte es gäbe eine elegantere Lösung ohne und, damit die nächste Zeile gecheckt wird selbst wenn der erste Fall bereits eintrat.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Wenn du nur eigenen Funktionen verwenden möchtest, dann schreibe doch einfach deine eigene max-Funktion. Dann lässt sich dein Problem elegant lösen.
Das Leben ist wie ein Tennisball.
BlackJack

@gaganaut: Aber ``<`` zu benutzen ist okay obwohl Du das nicht selber geschrieben hast? Ich finde das ist eine sehr willkürliche Grenze die Du da ziehst. `max` ist Bestandteil der Prelude, warum sollte man das in eigenen Funktionen nicht nutzen?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Vermutlich weil die Aufgabenstellung das nicht zulässt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

In dem Fall definiert man sich das halt schnell selber als ``max'``. Die Funktion ist ja nicht wirklich schwer zu schreiben. :-) Falls man ``<`` (und die anderen vordefinierten Vergleichsoperatoren) auch nicht benutzen darf wird es schon etwas umständlicher. :twisted:
Antworten