Home
 

Beispiel: "`Datenbank"'

Beispiel: "`Datenbank"'

(<Rechnertyp>, <Raum>)

Lösung hier ist sehr primitiv, soll nur Arbeit mit Listen illustrieren.

(natürlich kennt Haskell auch Aufzählungstypen, natürlich kann man auch einen Ordnungsbegriff für die Listenelemente einführen usw. usf. ...)

 -------------------Liste von Rechnern mit Aufstellungsort



type Room = String -Typ-Synonyme fuer Lesbarkeit
type Hardware = String
type HwList =[(Hardware,Room)]


example_list = -Beispiel
[("PC","T01"),
("PC","Lab1"),("PC","Lab1"),("PC","Lab1"),
("PC","Lab2"),("Sun","Lab2"),("Sun","Lab2")]


-Aufbau/Abbau
insert, delete:: Hardware->Room->HwList->HwList
insert h r hwl = (h,r):hwl
delete h r [] = [] -keine Wirkung wenn (h,r) nicht vorhanden
delete h r ((h1,r1) : rest)
|h1 == h && r1 == r = rest
|otherwise = (h1,r1) : delete h r rest


-Funktionen fuer Anfragen, Aenderungen etc
locations:: Hardware->HwList->[Room] -Ergebnis enthaelt Mehrfachvorkommen
locations h [] = []
locations h ((h1,r1) : rest)
|h1 == h = r1 : (locations h rest)
|otherwise = locations h rest


how_many:: Room->HwList->Int
how_many r [] = 0
how_many r ((h1,r1) : rest)
|r1 == r = 1 + how_many r rest
|otherwise = how_many r rest


replace:: Hardware->Hardware->HwList->HwList
replace h h' [] = []
replace h h' ((h1,r1) : rest) = entry : replace h h' rest
where entry |h1 == h = (h',r1)
|otherwise = (h1,r1)


- Beispielanwendungen der definierten Funktionen
> insert "Sun" "T01" []
[("Sun", "T01")]
> locations "Sun" example_list
["Lab2","Lab2"]
> locations "Sun" (replace "Sun" "Moon" example_list)
[]
> how_many "Lab2" (delete "PC" "Lab2" example_list)
2
> how_many "PC" (delete "PC" "Lab2" example_list)
0 - Quatsch, das kommt davon, wenn man mit Typsynonymen arbeitet!!

nextnextupuppreviouspreviouscontentscontents
Next:Higher order functions (HOFs)Up:ListenPrevious:Beispiel: Sortieren durch Einfügen
Ronald Blaschke
1998-04-19