www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

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

Logo - DracheHaskell-Forum

Blubberbrause

Gepostet:
15.12.2009 18:44

ZF Notation - List Comprehension  
Hi nochmal,

ich habe eine Aufgabe in der ich die sogenannte ZF Notation anwenden muss. Bisher konnte ich mir nicht erschließen wie sie genau funktioniert. Habe auch ein Beispiel finden können
-- Beispiel zur ZF-Notation (list comprehension)

paare :: [(Int,Int)]
paare = [(a,b) | a <- [1..3], b <- [1,2]]

-- Multiplikationstabellen
-- Schreib die ersten n Vielfachen einer Zahl z in eine Liste
-- Drei alternative Möglichkeiten in Haskell:

multTab1, multTab2, multTab3 :: Int -> Int -> [Int]
multTab1 z n = take n (map (*z) [1..])
multTab2 z n = take n [ a*z | a <- [1..] ]
multTab3 z n = take n [z, z+z..]


1) Kann mir jmd erklären wie das genau funkioniert?
2) Die Funktion paare macht sicherlich was aber wenn ich sie in Winhugs aufrufe weiss ich nicht ganz wie ich die Parameter zu übergeben habe. [(x,y)] kenne ich noch nicht. Also mit paare (2,3) hats nicht funktioniert. Was logisch ist aber ich weiss nicht was der von mir haben will.

Gruß

Edit: Mir fällt grad auf, die meinen wahrscheinlich eine Liste von Tupeln richtig?
Zum Seitenanfang    
 
Siracusa

Gepostet:
16.12.2009 10:52

   
Hallo,

ZF-Notation sagt mir nichts, aber hier deutet alles auf die Verwendung von List Comprehensions hin. ^^

zu 1.) List Comprehensions bestehen meinst aus einem Generator und einen Filter; der Generator liefert eine Menge (Liste) von Werten, der Filter bildet diese Werte auf True/False ab. Das ganze sieht dann z.B. so aus:
  [x | x <- gen, f x]
gen ist hier der Generator, f der Filter. Das ganze ergibt dann wiederum eine Liste mit allen Elementen aus gen, für die f True ergibt. Bspw. liefert [x | x <- [1..10], x > 5] alle Zahlen zwischen 1 und 10, die größer als 5 sind. Natürlich können auch mehrere Generatoren oder Filter verwendet werden, wie z.B. bei deiner Funktion paare.

zu 2.) paare ist hier eine Funktion, die keinen Parameter erwartet, daher funktioniert der Aufruf in Hugs bei dir auch nicht. [(Int,Int)] ist der Typ dieser Funktion, und zwar ist es eine Liste, die Paare von Int-Werten enthält. Wenn du bei Hugs nur paare eingibst, erhältst du das Ergebnis der Auswertung der List Comprehension, nämlich alle Paare, deren erster Wert aus der Liste a und deren zweiter Wert aus der Liste b ist.


Viele Grüße,

Siracusa
Zum Seitenanfang    
 
Blubberbrause

Gepostet:
25.01.2010 11:42

   
Auch wenn es lange her ist wollte ich mich nochmal bedanken. Hatte mir geholfen.
Zum Seitenanfang