Gepostet: |
Typen in haskell | ||||||||||
hi, kann mir ma jmd. sagen, warum bei
als Lösung : nicht typkorrekt rauskommt? kann mir jmd. erklären wieso das so ist? |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Was passiert denn wenn du z.B. f 1 1 aufrufst? Auf der rechten Seite entstünde eine unendlich verschachtelte Liste, das ist nicht möglich und sagt dir auch GHC wenn du mal die Funktion dort eingibst:Prelude> let f x 1 = [f x x] (Gewöhn dir am Besten an über jede Funktion die zugehörige Typsignatur zu schreiben, dann wäre das auch offentsichtlich geworden.) Abgesehen davon finde ich diese Aufgaben komisch... mehr steht da nicht? Wenn man nicht gerade f 1 1 aufruft ergibt die Funktion auch diesbezüglich keinen Sinn, da nicht definiert |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
ja, das sind klausuraufgaben...ich bereite mich nömlich auf ne klausur vor und in diesen aufgaben geht es halt darum, den typ anzugeben.....okay, die aufgabe versteh ich ein wenig....ich hab eine andere gemacht....ich dachte ich hätte sie richtig und dann wurde ich eines besseren belehrt...:
ich hab das ganze zunächst so interpretiert: aus der lambdafunktion /x -> h (h x) geht hervor, dass h x eine funktion ist mit der signatur a->b, wobei das x den typ a hat. diese wird wiederum wieder in h (h x) reingesteckt (Stichwort :Komposition). somit hat doch das letzte element der liste, also die lambda funktion /x -> h (h x) den typ a -> (a->b)->(b->b). und so hab ich dann weitergemacht mit dem rest. /x-> h x hat dann den typ a->(a->b) und /x ->x den typ a->a SO INSGESAMT habe ich dann den typ : g :: (a->b) -> [a->a,a->(a->b), a->(a->b)->(b->b)] aber dann hab ich in die musterlösung geschaut und da stand g :: (b->b)-> [b->b] woran liegt das? was hab ich falsch gemacht? kann mir jmd das sagen/schreiben ? |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
>dass h x eine funktion ist mit der signatur a->b, wobei das x den typ a hat. diese wird wiederum wieder in h (h x) reingesteckt (Stichwort :Komposition). und damit h wieder auf (h x) angewandt werden kann ist nicht h :: a->b sondern h: a->a >also die lambda funktion /x -> h (h x) den typ a -> (a->b)->(b->b). so wie du es da stehen hast wäre es so, dass die LambdaFunktion auch die Funktion h als 2. Parameter erwartet, sie hat aber nur einen Parameter (x) |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
ich versuch das nachzuvollziehen, aber ich verstehs nicht ganz.... | |||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
vtl. kommt die frage ein bisschen zu spät, aber wie geht man bei solchen aufgaben allgemein vor? Also bis jetzt habe ich das immer ausm bauch heraus gemacht. nun aber frage ich mich, ob es wege gibt, wie man das ganze sehr leicht herausfinden kann. oder braucht man dafür ein bisschen mehr erfahrung, um das ganz schnell herauszufinden ? |
|||||||||||
Zum Seitenanfang | |||||||||||