Seite 1 von 1

Problem mit ( Haskell)

Verfasst: Freitag 13. März 2015, 16:27
von gaganaut
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.

Re: Problem mit ( Haskell)

Verfasst: Freitag 13. März 2015, 16:32
von 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.

Re: Problem mit ( Haskell)

Verfasst: Freitag 13. März 2015, 16:34
von EyDu
Und ganz Faule nutzen statt der max-Funktion die maximum-Funktion.

Re: Problem mit ( Haskell)

Verfasst: Freitag 13. März 2015, 17:10
von gaganaut
Es geht ja darum die Funktion selbst zu schreiben. Ich versuchs mal mit and

Re: Problem mit ( Haskell)

Verfasst: Montag 16. März 2015, 20:17
von gaganaut
keiner ne Idee? wie gesagt es geht ja darum selbst ne max funktion zu schreiben blos eben mit 3 werten.

Re: Problem mit ( Haskell)

Verfasst: Montag 16. März 2015, 20:23
von 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!?

Re: Problem mit ( Haskell)

Verfasst: Montag 16. März 2015, 21:18
von gaganaut
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.

Re: Problem mit ( Haskell)

Verfasst: Montag 16. März 2015, 21:21
von EyDu
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.

Re: Problem mit ( Haskell)

Verfasst: Montag 16. März 2015, 21:51
von 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?

Re: Problem mit ( Haskell)

Verfasst: Freitag 20. März 2015, 23:33
von Leonidas
Vermutlich weil die Aufgabenstellung das nicht zulässt.

Re: Problem mit ( Haskell)

Verfasst: Samstag 21. März 2015, 00:01
von 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: