www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

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

Logo - DracheHaskell-Forum

vorherige Seite 1 2  

paco89

Gepostet:
24.02.2012 16:28

   
danke. jetzt kann ich das auch. ich hab weiter gemacht und weitere aufgaben gelöst, darunter war ein aufgabentyp, den ich noch nicht hatte. mit datenkonstruktoren usw. also dieser hier:


data T a = C1 | C2 a (T a)

i(x:xs) = C2 x (i xs)

i [] = C1



hmh... nun ja begonnen habe ich wieder mal mit einer generellen definition i:: a->b
aus der 1.Definition geht ja hervor, dass das 1. argument vom typ her eine liste sein muss. also gilt a = [e].
nun ja, was ich zum typ des rückgabewerts sagen sollt, wusste ich nicht. also habe ich in die musterlösung geschaut und da stand drin, dass der Typ des Rückgebawerts vom Typ T d ist, da der Konstruktor C2 verwendet wird. nun muss das erste argument von C2 (also x) den typen d haben. also gilt d =c

insgesamt gelte somit [e] -> T c


nun meine frage: woher wissen, dass sie jetzt T d als typ für den rückgabewert benutzen müssen? ist das wegen data T a ? und die benutzen doch d statt a weil wir a schon verwendet haben, oder?

Zum Seitenanfang    
 
Landei

Gepostet:
24.02.2012 17:03

   
i hat den Typ [e]. Dann hat x den Typ e. Wenn x im Konstruktor C2 an der Stelle verwendet wird, die in der Definition mit a belegt ist, dann muss der Konstruktor den Typ T e zurückliefern. Das zweite Argument, dass ja dann den Typ T e haben muss, passt auch, genauso wie die zweite Definition von i. Also haben wir i :: [e] -> T e
Zum Seitenanfang    
 
paco89

Gepostet:
24.02.2012 17:10

   
ah, okay. danke...kann das jetzt nachvollziehen.
Zum Seitenanfang    
 
paco89

Gepostet:
24.02.2012 17:19

   
eine kleine frage hätte ich da noch. und zwar wenn ich die funktion


g \\x y -> y 1




hab und davon den typ bestimmen muss, dann muss ich doch wie folgt vorgehen, oder:


also der generelle typ ist ja g:: a-> b->c

und ich weiß, dass y -> Int. also ist geht das zweite argument auf ein Int und somit ist b-> Int.

aber welchen Typ das 1. Argument a und welchen typ der rückgabewert c haben, wusste ich nicht, also habe ich es dabei belassen und folgendes hingeschrieben:

g :: a-> (b-> Int)-> c

edit: davon habe ich keine musterlösung. also würde es mich interessieren ob ich s falsch oder richtig gemacht habe.
Zum Seitenanfang    
 
Landei

Gepostet:
24.02.2012 20:30

   
Ich bin etwas verwirrt, meinst du vielleicht die Definition



g = \\x y -> y 1



?

Zum Seitenanfang    
 
paco89

Gepostet:
25.02.2012 18:31

   
ja genau, ich hab das gleichheitszeichen vergessen...ist meine argumentation richtig?
Zum Seitenanfang    
 
paco89

Gepostet:
25.02.2012 20:07

   
ich hab noch ein paar weitere aufgaben gemacht...darunter auch diese hier:



g e h x = h (h (e x))



solche einen aufgabentypen hatte ich auch noch nie. wie muss ich hier ansetzen um den typ davon bestimmen zu können?
Zum Seitenanfang    
 
paco89

Gepostet:
26.02.2012 13:50

   
also die lösung dieser aufgabe ist g :: (a->b) -> (b->b) -> a -> b


aber mich interessiert nur die vorgehensweise. hier handelt es sich doch um eine funktion höherer ordnung, oder? eine funktion wird als argument einer anderen funktion benutzt. mehr kann ich mir nicht erklären. also ich hab folgendes auf meinen zettel geschrieben:

ich betrachte zuerst die stelle nach dem gleichheitszeichen: dort steht in der innersten klammer e x . da kann ich schon mal schließen dass e eine funktion ist die als ein x bekommt. (ich vergleiche das immer mit f(x) aus der schulmathematik, so kann ich mir das besser merken.)
angenommen die funktion e hat die signatur (a-> b) und x den typ a .

danach wird die funtion e mit dem argument x wieder als argument der funktion h benutzt. e x wird so gesehen in h reingesteckt. das ergebnis wird wieder in als argument für die äußerste funktion h benutzt. und wir haben nun eine funktion h mit der signatur b->b .
der rückgabewert hat ebenfalls den typ b.


hab ich richtig argumentiert? das würde mich echt interessieren...


vielen dank...lg
Zum Seitenanfang    
 
IKT

Gepostet:
26.02.2012 13:54

   
ich hätte es auch so gemacht, aber vielleicht kann sich das Ei auch dazu äußern ;)
Zum Seitenanfang    
 
paco89

Gepostet:
27.02.2012 09:35

   
jo, das freut mich, dass ich wenigstens die musterlösung richtig interpretiert hab. so langsam kriege ich den dreh raus. ich muss aber noch weiterüben, damit das auch tief sitzt.


vielen dank...;)
Zum Seitenanfang    
 

vorherige Seite 1 2