[Progra] Haskell Fragen

[Progra] Programmierung
[DSAL] Datenstrukturen und Algorithmen
[SWT] Softwaretechnik
[DB] Datenbanken und Informationssysteme

Haskell Fragen

Beitragvon NightmareVirus » 19.02.08 12:17

hmm noch keine Fragen zur klausur bisher? :shock:

naja ich fang einfach ma an:

1. wie war das noch gleich mit dem deriving show befehl?
wann und wo wird der gebraucht?

2. ham wir die Infix-Operatoren gemacht?
Hab hier nämlich son Beispiel gefunden und bin mir net sicher ob wir das übehaupt können müssen:

Programm berechnet Skalarprodukt von 2 Vektoren
skp:: (Float,Float) -> (Float,Float) -> Float
skp (a1,a2) (b1,b2) = a1*b1 + a2*b2

laenge2:: (Float,Float) -> Float
laenge2 a = sqrt (a `skp` a)
Benutzeravatar
NightmareVirus
 
Beiträge: 47
Registriert: 09.12.06 20:19

Re: Haskell Fragen

Beitragvon HE » 19.02.08 12:47

NightmareVirus hat geschrieben:1. wie war das noch gleich mit dem deriving show befehl?
wann und wo wird der gebraucht?


Nach einer Typdeklaration kann "deriving" genutzt werden um zu zeigen, dass bestimmte Typklassen hier ihre Default-Operationen anwenden können. Da Typklassen nicht teil des Vorlesungsstoffes sind, wurde "deriving Show" nur am Rande angedeutet, weil damit der Haskell-Interpreter in der Lage ist, die eigenen Datentypen anzuzeigen. In der Klausur wird das mit hoher Wahrscheinlichkeit nicht drankommen, sicherlich aber nicht detailreicher als hier.

2. ham wir die Infix-Operatoren gemacht?


Nein.
Benutzeravatar
HE
 
Beiträge: 453
Registriert: 09.03.07 12:20
Wohnort: Aachen
Studiert seit: WS 06/07
Anwendungsfach: Mathe

Beitragvon NightmareVirus » 19.02.08 18:29

Zur Klausur: Vordiplo060918

Aufgabe 5 c)

Schreiben Sie eine Funktion fromTo, die zwei ganzen Zahlen n und m als eingabe bekommt und als Ergebnis die Liste der Zahlen von n bis m in aufsteigender Reihenfolge liefert. Für Zahlen n, die größer als m sind, soll fromTo die leere Liste als Ergebnis liefern. Bsp:
fromTo 2 5 = [2,3,4,5] und fromTo 5 2 = []. Sie dürfen in dieser Aufgabe keine vordefinierten Funktionen aßer den arithmetischen Operatoren wie z.B. +,-,> und == verwenden.


Die Musterlösung besagt:
Code: Alles auswählen
fromTo n m | n > m = []
| otherwise = n : fromTo (n+1) m


Meine Frage: Hätte man das ganze nicht total simple lösen können mit:
Code: Alles auswählen
fromTo x y = [x..y]

:burns:
Benutzeravatar
NightmareVirus
 
Beiträge: 47
Registriert: 09.12.06 20:19

Beitragvon Coolcat » 19.02.08 20:50

Sie dürfen in dieser Aufgabe keine vordefinierten Funktionen aßer den arithmetischen Operatoren wie z.B. +,-,> und == verwenden.

".." ist eine Funktion (vermute ich)

Edit: Hm, nee...in Prelude.hs isses nicht drin....jedenfalls solltest du sowas in der Klausur vorsichtshalber wie in der ML implementieren. (is sowieso immer das beste das so wie in der ML zu machen :P )
My software never has bugs. It just develops random features.
Benutzeravatar
Coolcat
Promoter
 
Beiträge: 2574
Registriert: 28.11.05 21:26
Wohnort: Kohlscheid / Düsseldorf
Studiengang: Informatik (Dipl.)
Studiert seit: fertig
Anwendungsfach: BWL

Beitragvon O.D. » 20.02.08 01:55

Das Konstrukt [n..m] greift intern auf die Funktion enumFromTo zu.
Genauer gesagt, wird [n..m] reduziert auf enumFromTo n m.
Und eine solche Funktion zu benutzen ist ja untersagt.


Aber es hält einen ja niemand davon ab in der Prelude mal Strg+F zu drücken. ;)
I can hear deaf people!
Benutzeravatar
O.D.
 
Beiträge: 745
Registriert: 05.08.06 19:31
Wohnort: Aachen & Minden
Studiengang: Informatik (M.Sc.)
Anwendungsfach: Physik

Beitragvon Coolcat » 20.02.08 12:08

Aber es hält einen ja niemand davon ab in der Prelude mal Strg+F zu drücken.

Hm, ja....damit finde ich Zeile 374:
Code: Alles auswählen
enumFromTo x y        = map toEnum [ fromEnum x .. fromEnum y ]


folglich ist enumFromTo mit dem .. Operator/Funktion/etc. definiert, nicht umgekehrt. Ist aber auch egal, ich denke wir sind uns einig das man das in der Klausur nicht verwenden sollte, wenn man nicht alles benutzen darf ;)
My software never has bugs. It just develops random features.
Benutzeravatar
Coolcat
Promoter
 
Beiträge: 2574
Registriert: 28.11.05 21:26
Wohnort: Kohlscheid / Düsseldorf
Studiengang: Informatik (Dipl.)
Studiert seit: fertig
Anwendungsfach: BWL

Beitragvon MaoDelinSc » 21.02.08 10:58

Hi, ich hab auch noch mal ne Frage zu Haskell:

Dieses Lambda, wie funktioniert das noch mal genau?

Zum Beispiel die Vordiplomsklausur vom 06.03.02, Aufgabe 5)b)i):

(\x->\y->x+y) ((\x->x+1)1) 1

da soll laut Lösung 3 rauskommen^^ aber ich komm mit der Lambda-Schreibweise so gar nicht klar, wäre cool, wenn einer, der das kann, noch mal erklären könnte...

Danke! ;)
Was macht man, wenn man ein ungelöstes Problem hat?
Man gibt ihm einfach einen Namen!

(copyright Hawi)
MaoDelinSc
 
Beiträge: 296
Registriert: 07.12.07 10:28
Wohnort: Aachen
Studiengang: Informatik (B.Sc.)
Studiert seit: WS 09/10
Anwendungsfach: Medizin

Beitragvon theTux » 21.02.08 11:19

Mit dem Lambda definierst du eine Funktion.
Code: Alles auswählen
\x y -> x+y

definiert eine Funktion, die ein x und ein y erwartet und die Summe der Parameter zurückgibt. Erklären ist bei Lambdaausdrücken schwer, denn man kann (meiner Erfahrung nach) trotz der besten Erklärung nur schwer damit umgehen. Besser ist es, sich ein bisschen damit zu beschäftigen. Damit lernt man besser damit umzugehen.
Stur lächeln und... oh, falscher Pinguin.
Benutzeravatar
theTux
 
Beiträge: 577
Registriert: 15.01.06 16:41

Beitragvon deuper » 21.02.08 12:26

Hallo,
könnte mir jmd sagen wie man das ergebniss dieser Ausdruck rechnet?

( \x -> x 2 ) ( \x -> x*3 )

danke ;)
deuper
 
Beiträge: 74
Registriert: 25.04.07 12:25

Beitragvon O.D. » 21.02.08 12:29

Zu Anschauungszwecken könnte man sich
Code: Alles auswählen
\ {a} -> {b}

denken als
Code: Alles auswählen
ersetze {a} durch {b}

Wobei {a} eine Folge von Parametern ist und {b} irgend ein Ausdruck der ggf. diese Parameter verwurstet.
I can hear deaf people!
Benutzeravatar
O.D.
 
Beiträge: 745
Registriert: 05.08.06 19:31
Wohnort: Aachen & Minden
Studiengang: Informatik (M.Sc.)
Anwendungsfach: Physik

Beitragvon MaoDelinSc » 21.02.08 13:42

Naja, bei einem Lambda geht das ja noch...

\x->x+1 ist ja f(x)=x+1

aber was heißt (\x->x+1) (\y->y+3) oder sowas??? wo da zwei oder 3 patterns sind?

das versteh ich gar nich...
Was macht man, wenn man ein ungelöstes Problem hat?
Man gibt ihm einfach einen Namen!

(copyright Hawi)
MaoDelinSc
 
Beiträge: 296
Registriert: 07.12.07 10:28
Wohnort: Aachen
Studiengang: Informatik (B.Sc.)
Studiert seit: WS 09/10
Anwendungsfach: Medizin

Beitragvon Chrizzo » 21.02.08 13:46

trotz Tipps komm ich bei Maos Aufgabe nicht viel weiter ^^
Benutzeravatar
Chrizzo
 
Beiträge: 162
Registriert: 06.11.07 00:27
Wohnort: Mönchengladbach

Beitragvon Tim » 21.02.08 13:52

Hi,

hinter der klammer steht das argument, womit der inhalt aufgerufen wird

(\x->\y->x+y) ((\x->x+1)1) 1
(\x->\y->x+y) (x = 2) 1
(\x->\y->2+ 1)
x=3
Tim
 
Beiträge: 153
Registriert: 09.02.07 00:05

Beitragvon MaoDelinSc » 21.02.08 13:59

ahhhhhhh *Kronleuchter aufgeh* danke :)
Was macht man, wenn man ein ungelöstes Problem hat?
Man gibt ihm einfach einen Namen!

(copyright Hawi)
MaoDelinSc
 
Beiträge: 296
Registriert: 07.12.07 10:28
Wohnort: Aachen
Studiengang: Informatik (B.Sc.)
Studiert seit: WS 09/10
Anwendungsfach: Medizin

Beitragvon Chrizzo » 21.02.08 14:43

öhm, warum denk ich mir sowas immer nur *grml*
Benutzeravatar
Chrizzo
 
Beiträge: 162
Registriert: 06.11.07 00:27
Wohnort: Mönchengladbach

Nächste

Zurück zu Praktische Informatik