www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

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

Logo - DracheHaskell-Forum

stephana

Gepostet:
04.11.2007 11:35

kartesisches Produkt  
habe hier ein aufgabe bekommen mit der ich nicht zurecht komme.

In der Mathematik gibt es zum kartesischen Produkt A × B × C folgende Pro jek-
tionsfunktionen:
p1 , p2 , p3 : A × B × C → A
p1 (a, b, c) = a
p2 (a, b, c) = b
p3 (a, b, c) = c
Schreiben Sie diese drei Funktionen in Haskell unter Verwendung von Typvari-
ablen.

kann mir jemand helfen???
Zum Seitenanfang    
 
roberto157

Gepostet:
04.11.2007 15:49

   
ALP1 bei Fehr?
Zum Seitenanfang Homepage      
 
Siracusa

Gepostet:
04.11.2007 22:28

   
Hallo stephana,

Haskell erlaubt statt konkreten Typen auch Typvariablen zu verwenden. Damit kann man oft mehrere Funktionen für verschiedene Typen, die sich aber ähnlich verhalten, zusammenfassen. Ein einfaches Beispiel:

addiereInts :: Int -> Int -> Int
addiereInts x y = x + y

addiereFloats :: Float -> Float -> Float
addiereFloats x y = x + y

Beide Funktionen machen dasselbe, nämlich die Summe der beiden Argumente zu berechnen. Will man nun neben Ints oder Floats bspw. auch Double-Werte addieren, müßte man sich eine neue Funktion addiereDoubles schreiben. Durch die Verwendung von Typvariablen kann man seine Additionsfunktion aber gleich so allgemein schreiben, daß man nicht für jeden Datentyp eine eigene Funktion angeben muß:

addiere :: a -> a -> a
addiere x y = x + y

Die Funktion bekommt nun zwei Werte vom gleichen Typ übergeben und gibt ein Ergebnis (nämlich die Summe) ebenfalls von diesem Typ zurück. (Praktisch funktioniert die letzte Funktion in Haskell nicht, da man bspw. zwei Strings übergeben könnte, die aber nicht addiert werden können. Das soll an dieser Stelle aber nicht weiter stören, da nur das Prinzip der Typvariablen klar werden soll.)

Wichtig ist dabei, daß alle Typvariablen mit gleichem Namen auch den gleichen Typ erhalten. Man könnte mit der Funktion addiere also nicht einen Int-Wert und einen Float-Wert addieren. Vereinfacht könnte man sagen, eine Typvariable stellt einen Typ "irgendwas" dar, der erst bei der Verwendung der Funktion einen spezielleren Typ erhält. Noch zu erwähnen bleibt, daß alle Typvariablen mit einem kleingeschriebenen Buchstaben beginnen.

Deine Projektionsfunktionen sollten also drei Werte von drei Typen (egal welche) übergeben bekommen, und dann wieder einen der drei Typen als Ergbenis liefern.

Bei weiteren Fragen, einfach fragen. Smilie


Viele Grüße,

Siracusa
Zum Seitenanfang