Gepostet: |
Haskell & Auswertungsstrategie | ||||||||||
hallo, hab folgenden haskellcode
und dazu muss ich bestimmen wie der ausdruck
ausgewertet wird. kann mir da jmd. vtl. sagen/schreiben wie ich bei sowas vorgehen muss? über eine antwort wäre ich sehr froh . vielen dank :) |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Na du arbeitest wie ein Pattern-Matcher: Würden deine Argumente für den ersten Methoden-Kopf passen? Hmmm, x kann man mit (S(SZ)) belegen, aber das zweite Argument muss Z sein und nicht (SZ). Beim zweiten Methoden-Kopf muss das erste Element Z sein, passt also auch nicht. Der dritte Methoden-Kopf geht auch nicht, weil da wieder das zweite Argument Z sein muss. Bleibt der vierte Methoden-Kopf. Der passt, wobei x = (SZ), y = Z und z = (SZ) ist. Was kommt bei dem Aufruf also raus? Ein neuer unsinn-Aufruf, und zwar unsinn (S(SZ)) Z Z. Und das ganze damit von vorn... | |||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
achso, danke. ich darf also die variablen (Kleinbuchstaben) wie z oder x frei belegen aber die anderen müssen identisch sein, richtig? okay, dannn gibts keine fragen mehr...;) | |||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Ja, so könnte man es ausdrücken. Natürlich ist die Wirklichkeit in Bezug auf \"identisch\" ein wenig komplizierter, es gibt eine spezielle Syntax, um z.B. Listen, Records oder Tupel zu matchen, Strings und Zahlen können direkt gematcht werden, es gibt den Unterstrich als \"ist mir egal\"-Platzhalter, man kann Teilausdrücke über den Klammeraffen @ benennen u.s.w. Außerdem steht es dir frei, wie weit du ein Argument \"aufdröseln\" willst. So kannst du den String \"bla\" gegen x, gegen (x:xs), gegen (\'b\':xs), gegen (_:\"la\") und viele andere Versionen matchen, je nachdem, welche Argumente du zulassen willst, und welche Informationen du daraus extrahiert haben willst. Siehe http://en.wikibooks.org/wiki/Haskell/Pattern_matching für Details. | |||||||||||
Zum Seitenanfang | |||||||||||