www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

Daten merken
Auto-Login
Registrieren
 
Online
niemand
 
Forumsuche
Suche nach:

Logo - DracheHaskell-Forum

paco89

Gepostet:
23.02.2012 16:20

Haskell & Auswertungsstrategie  
hallo,

hab folgenden haskellcode



data Nat = Z| S Nat deriving Show

unsinn :: Nat ->Nat ->Nat ->Nat

unsinn x Z (Sz) =x

unsinn Z y z = unsinn (Sy) z z

unsinn (Sx) Z Z = unsinn (SZ) x (Sx)

unsinn (Sx) (Sy) z = unsinn (Sx) Z y





und dazu muss ich bestimmen wie der ausdruck

unsinn (S(SZ)) (SZ) (SZ)


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    
 
Landei

Gepostet:
23.02.2012 16:35

   
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    
 
paco89

Gepostet:
23.02.2012 17:57

   
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    
 
Landei

Gepostet:
23.02.2012 20:00

   
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