Fassung vom 15.Februar 1999 11:30 am W ERTE die funktionale Facette von Program m iersprachen A usdruck Auswertung W ert∈ D atentyp W ert ein D atum ,das in derProgram m iersprache berechnetw erden kann (z.B.in einem A usdruck) D atentyp eine W ertem enge m itden passenden O perationen A usdrücke verschachtelte A ufrufe von O perationen und Funktionen A usw ertung von A usdrücken liefertW erte K urs Program m iersprachen 19B erthold H offm ann (W inter98/99) Inhalt D atenstrukturen 20 einfache vordefinierte D atentypen 21 A bschnitts-und A ufzählungstypen 22 zusam m engesetzte D atentypen 24 kartesisches Produkt25 disjunkte Vereinigung 30 Potenzm enge 34 Relation 35 A bbildung 36 Liste (hom ogen)39 allgem einerrekursiverTyp 42 derSonderfallZeichenketten 44 Sonstige D atentypen 45 D atentypen abstrakt46 Typisierung 47 Typgleichheit48 Typvollständigkeit49 A usdrücke 50 Funktionsaufruf,bedingterA usdruck 51 benannte K onstanten und Variablen 52 Zusam m enfassung:W erte,Typen und A usdrücke 53 Praktikum einfache und zusam m engesetzte D atentypen 54 Typgleichheitin einigen Program m iersprachen 55 Typvollständigkeit56 Ü bungen 58 K urs Program m iersprachen 20B erthold H offm ann (W inter98/99) D ATEN TY P W ert ein D atum ,das in derProgram m iersprache berechnetw erden kann (z.B.in einem A usdruck) D atentyp eine W ertem enge m itpassenden O perationen A rten von D atentypen einfach (größtenteils eingebautodervordefiniert) zusam m engesetzt(D atenstrukturen) rekursiv zur Vereinheitlichung der Schreibw eise m athem atische D efinition derD atenstrukturen K urs Program m iersprachen 21B erthold H offm ann (W inter98/99) einfache vordefinierte D atentypen sprachunabhängige D efinition der einfachen Typen Truth-Value Integer Real Character = = = = { true,false } { ...,-2,-1,0,+1,+2,...} { ...,-1.0,...,0.0,...+1.0,...} { ...,`a´,`b´,...`z´,...} W ahrheitw erte und ganze Zahlen gibtes in jederSprache sie sind Voraussetzung,z.B.fürbedingte A nw eisungen und Felder) viele einfache Typen sind im plem entierungsabhängig • Character kann vom Zeichensatz abhängen • Zahlenw erte können von derD arstellungsgenauigkeitabhängen G egenbeispiel:Integer in M iranda und H askell Ein W iderspruch zur Plattform unabhängiogkeit! W ie kann m an dam itum gehen? • einfach ignorieren • transparente Im plem entierungsbeschränkungen angeben (z.B.in A lgol-68) minint, maxint, maxreal, smallreal • D arstellungsgenauigkeitvorschreiben Java (IEEE Standard,U nicode) vordefinierte D atentypen sind abstrakt Ihre M aschinenrepräsentation istfürden Program m iererirrelevant Sie sind definiertdurch O perationen (und deren m athem atische Eigenschaften) K urs Program m iersprachen 22B erthold H offm ann (W inter98/99) A bschnitts-und A ufzählungstypen A ufzählungstypen (A da) type Month is (jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec) Bem erkung A ufzählungen w erden als A bschnitte ganzerZahlen dargestellt klarerw ird es in Eiffelausgedrückt: jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec: Integer is unique O perationen aufA ufzählungstypen Zuw eisung,G leichheitstest,größer/kleiner,N achfolger,Vorgänger A bschnittstypen von einfachen D atentypen (A da) subtype Rain is Month range jun .. sep; Day is Integer range 1..31; Digit is Character range ‘0’ .. ‘9’; Probability is Float range 0.0 .. 1.0; Bem erkung A bschnittstypen sind U ntertypen ihres Basistyps d.h.sie erben alle O perationen ihres Basistyps im allgem einen m uß dynam isch geprüftw erden, ob ein W ertdes Basistyps zum U ntertyp gehört: var today, yesterday: Day; ... today := yesterday + 1; K urs Program m iersprachen 23B erthold H offm ann (W inter98/99) K ardinalitätvon D atentypen W ieviele Elem ente hateine D atentyp? einfach,zusam m engesetzt:vorhersehbar(statisch bestim m bar) rekursiv:nichtvorhersehbar(dynam isch bestim m t,potentiellbeliebig) K ardinalitätvon einfachen Typen #Truth-value # Month # Integer K urs Program m iersprachen = = = 2 12 2 * m axint+ 1 24B erthold H offm ann (W inter98/99) (siehe oben) (Pascal) zusam m engesetzte D atentypen auch strukturierte D atentypen,D atenstrukturen w erden m itvordefinierten Typkonstruktoren erzeugt dazu gibtes Selektoren, m itdenen die W erte w iederzerlegtw erden können W as gibtes für Beispiele Verbund (record) Variante (record ...case ...) Tupel Vereinigung (union) M enge Feld Liste Zeichenkette Baum Typkonstruktoren (und Beispiele aus Program m iersprachen) • kartesisches Produkt (record,struct,“*”) • disjunkte Vereinigung (union,“|”,record case ...) • M enge (set,array of Truthvalue) • Relation Teilm engen von Produkten • A bbildung (array,function) K urs Program m iersprachen 25B erthold H offm ann (W inter98/99) kartesisches Produkt D efinition (als geordnetes Paar) S × T = { (x,y)|x ∈ S,y ∈ T } O perationen: Selektion derK om ponenten (Projektion) K ardinalität # (S × T)= #S × #T Verallgem einerung aufn-Tupel S1 × S2 ×...× Sn = { (x1,x2,...,xn)|xi∈ Si;1 ≤ i≤ n } u v S K urs Program m iersprachen a b c (u,a) (u,b) (u,c) (v,a) (v,b ) (v,c) S ∞T T 26B erthold H offm ann (W inter98/99) Tupel(H askell) Tupeltypen realisieren kartesische Produkte direkt Beispiel type name = (string, string) someone :: name Selektion • durch Selektorfunktion fst und snd: surname = fst someone ... familyname = snd someone • durch M ustervergleich: where (surname, familyname) = someone Verbunde data Person = Person with surname, familyname: string someone :: Person someone = Person{familyname = ”Watt”, surname = ”David”} Selektion von Verbunden surname (someone) ... familyname (someone) R eihenfolge in Verbunden istunw ichtig {I1: S1, I1: S2} = {I1: S2, I1: S1} Vergleich von Tupeln und Verbunden benannte Selektoren sind sicherervorVerw echslungen K urs Program m iersprachen 27B erthold H offm ann (W inter98/99) Tupelin M L Beispiel type person = string * string someone : person Selektion • durch die Selektorfunktion #: surname = #1 someone ... familyname= #2 someone • durch M ustervergleich: (surname, forename, age, height) = someone Verbunde type person = {surname: string, forename: string} someone : person Selektion von Verbunden #surname (someone) ... #height (someone) Tupelsind A bkürzungen von Verbunden S1 * S2 * ... * Sn = {1: S1, 2: S2, ... , n: Sn} K urs Program m iersprachen 28B erthold H offm ann (W inter98/99) Verbund in A da allgem ein die K om ponenten w erden m iteinem Selektorm arkiert (das istein Bezeichner) record I1 :T1; ... In :Tn end Beispiel(A da) type Date is record m: Month; d: Integer range 1..31; end record K onstruktion someday : Date:= (m => feb, d => 29); xmas : Date:= (d => 24, m => dec); Selektion “dotnotation” someday.d := 29; someday.m := feb Selektionsoperator(A lgol-68) d of someday := 29; m of someday := feb K urs Program m iersprachen 29B erthold H offm ann (W inter98/99) hom ogenes kartesisches Produkt,U nit hom ogenes kartesisches Produkt Sn = S × ...× S K ardinalität #(Sn)= (#S)n w elchen Typ definiertder Spezialfalln=0 ? K ardinalität #(S0)= #S0 = 1 D erTyp S0 definiertalso einen Typ m iteinem Elem ent dieses Elem entheißtN ulltupelund w ird geschrieben als () D iesen Typ bezeichnen w irals Unit Unit = {()} Unit entsprichtvoid in A lgol-68 und C und unit in M L dieserTyp w ird dortbenutzt,w o kein W erterw artetw ird Betrachtungsw eisen von Tupeln und Verbunden Tupelsind konstruktive D aten Person bestehtaus zw eiZeichenketten Verbunde können als abstrakte D aten angesehen w erden Person hatzw eiK om ponentne surname und familyname, die Zeichenketten sind K urs Program m iersprachen 30B erthold H offm ann (W inter98/99) disjunkte Vereinigung D efinition S + T = { leftx |x ∈ S } ∪ { righty |y ∈ T } hierbeisind leftund rightM arkierungen (derH erkunft) O perationen A bfrage derM arkierung Projektion aufA usgangsw ert K ardinalität #(S + T)= #S + #T } M arkierung kann oftim Program m gew ähltw erden U nterschied zur M engenvereinigung S∪ S = S ≠ { leftx |x ∈ S } ∪ { righty |y ∈ S } = S+ S W eshalb gibtes keine norm ale M engenvereinigung? leftu u v S K urs Program m iersprachen a b c leftv righta rightb rightc T 31B erthold H offm ann (W inter98/99) S+T Vereinigungen in funktionalen Sprachen D atentyp in H askell data Number = Exact Int | Approx Float Selektion nurdurch pattern m atching value :: Number -> Int value (Exact n) = n value (Approx x) = toInteger x K onstruktion in M L number = exact of int | approx of real Selektion nurdurch pattern m atching value (x) = case x of exact n = n | approx x = floor (x) K urs Program m iersprachen 32B erthold H offm ann (W inter98/99) varianter Verbund (A da) allgem ein M arkierungen sind Elem ente eines diskreten Typs M record case M is when L1 => I1 :T1; ... when Ln => In : Tn; end record; Beispiel type Accuracy is (exact, approx); number (acc: Accurracy) is record case acc of when exact => ival: Integer; when approx => rval: Real end record; subtype Float_Accuracy is number (approx); Projektion durch Fallunterscheidung: rounded : Integer; ... case num.acc of when exact => rounded := num.ival; when approx => rounded := round (num.rval) end case inkonsistente Benutzung istm öglich W enn num.acc =exactund num.ival = 7 istnum.rval undefiniert,kann abertrotzdem benutztw erden! sichere Benutzung:w ie oben,durch Fallunterscheidung! K urs Program m iersprachen 33B erthold H offm ann (W inter98/99) Variante Verbunde versus algebraische Typen Vergleich von Varianten und K onstruktionen Selektion durch pattern m atching verhindertinkonsistente Benutzung ersparen Typüberprüfungen zurLaufzeit Verbunde verm ischen Produktund Vereinigung: type Shape is (point, circle, box); Figure is record (figureshape: Shape) x, y, Real; case figureshape of when point => null; when circle =>radius: Real; when box => height, width : Real; end case end record; Shape = Real × Real × (Unit + Real + (Real × Real)) K urs Program m iersprachen 34B erthold H offm ann (W inter98/99) Potenzm enge D efinition 2S = { s |s istTeilm enge von S} O perationen m engentheoretisch:Enthaltensein,Vereinigung,D urchschnitt... K ardinalität #(2S)= 2#S Beispiel(Pascal,nur für einfache diskrete Elem enttypen) type Basecolor = (red, green, blue); Color = set of Basecolor; Benutzung var c1, c2: Color; ... c1 := c1 + c2 (* positives M ischen *) c2 := c1 * c2 (* negatives M ischen *) M ögliche Erw eiterungen? M engen beliebigen Elem enttyps w erden nurvon einigen Sprachen unterstützt(SetL,Snobol) G rund • die Im plem entierung istaufw endig • die Im plem entierung istnichtkanonisch (es hängtvon derA nw endung ab,w elche die “beste” ist) A da:nichtdirektgegeben,aber generisch definierbar K urs Program m iersprachen 35B erthold H offm ann (W inter98/99) R elation D efinition jedeTeilm enge von S × Tisteine Relation R aufS × T S ↔ T = 2S×T Schreibw eise (x,y)∈ R ⇔ R (x ,y)⇔ x R y alternative Sichtw eise von R elationen das charakteristische PrädikatpR einerRelation R isteine Funktion des Typs S × T → Truth-value die true liefert,genau dann w enn die Relation R gilt pR(x,y)= true ⇔ x R y Bem erkung Relationen und Prädikate sind in logischen Sprachen w ichtig K urs Program m iersprachen 36B erthold H offm ann (W inter98/99) A bbildung D efinition Eine Relation m aufS × T isteine A bbildung w enn gilt: linkstotal:∀ x ∈S ∃ (x,y)∈ m rechtseindeutig:∀ (x,y),(x’,y’)∈ m :x=x’⇒ y=y’ Schreibw eisen m :S → T (x,y)∈ m ⇔ ⇔ ∈S→T y = m (x) m D ie M enge aller A bbildungen S → T = { m ∈ S ↔ T |m istlinkstotalund rechtseindeutig} O perationen A bbildungsanw endung K ardinalität #(S → T )= (#T)#S Verallgem einerung aufn-stellige A bbildungen A rgum ent(bzw.Indexm enge)istein kartesisches Produkt m :S 1 × ...× Sn → T {u ∅ a,v ∅ a} {u ∅ a,v ∅ b} {u ∅ a,v ∅ c} {u ∅ b,v ∅ a} {u ∅ b,v ∅ b} {u ∅ b,v ∅ c} u v S K urs Program m iersprachen a b c {u ∅ c,v ∅ a} {u ∅ c,v ∅ b} {u ∅ c,v ∅ c} S∅ T T 37B erthold H offm ann (W inter98/99) Funktion Funktion in H askell even :: Int -> Int even = \n -> (n mod 2 == 0) A bbildungsanw endung even 3 even (2*n+1) sind Funktionen W erte? in funktionalen Sprachen:JA A usdrücke können Funktionen berechnen und in W erte einbauen integer_functions :: [Int -> Int] integer_functions = [(+ 1), (- 1), (-), \n -> (n mod 2 == 0)] in im perativen Sprachen:m eistnureingeschränkt: • Funktionen können als A rgum ente an Funktionen übergeben w erden • Funktionen sind K om ponenten von K lassen (M ethoden) Funktion in Pascal function even (n: Integer) : Boolean; begin even := (n mod 2 = 0) end; A bbildungsanw endung even(2*n+1) Beachte Verschiedene Funktionsdefinitionen von even sind m öglich! Pascalerlaubtm ehrals nurA bbildungen (N ebeneffekte)! K urs Program m iersprachen 38B erthold H offm ann (W inter98/99) Feld Feldtyp in Pascal(S m uß diskretsein) type Color = (red, green, blue); Pixel = array [Color] of 0..1; A bbildungsanw endung var point : Pixel; ... point[red] Feste,offene und flexible Felder späterbeiderBehandlung von Variablen m ehrdim ensionale Felder Indexm enge istein kartesisches Produkt m :S 1 × ...× S n → T das gehtin Pascaldirektnicht(w eshalb eigentlich?) Feldtyp in H askell(S m uß geordnetsein) coeff :: Array Int Float A bbildungsanw endung coeff = array (0,4) [1.0, 3.4, 5.0, 0.0, -0.7] ... coeff!i ... K urs Program m iersprachen 39B erthold H offm ann (W inter98/99) Liste (hom ogen) D efinition m itrekursiver Typgleichung Integer-List = U nit+ (Integer × Integer-List) Integer-List = { nil()} ∪ { cons(i,x)|i∈ Integer,x ∈ Integer-List} W ertem enge alle endlichen Listen (kleinste Lösung derrekursiven G leichung) O perationen em pty? head,tail. K ardinalität unendlich A bkürzung S * = Unit + (S K urs Program m iersprachen × S *) 40B erthold H offm ann (W inter98/99) Listen in M L und H askell D efinition als algebraischer D atentyp intlist = | nil of () cons of int * intlist W erte von intlist nil cons(1, nil) cons(1, cons(7, cons(2 , cons(1, nil)))) ... tatsächlich (in M L) list istein param eterisierterTypkonstruktor intlist ≡ int list m ehr syntaktischer Zucker in H askell intlist nil cons 1: 7: 2: 1: [] K urs Program m iersprachen ⇔ ⇔ ⇔ ⇔ [Int] [] : [1, 7, 2, 1] 41B erthold H offm ann (W inter98/99) Listendarstellung m itZeigern A da type intlist is access cell; type cell is record head: Integer; tail: intlist; end record; procedure cons (in x: Integer; in l: intlist) return intlist is begin return new cell(head => x; tail => l); end cons; D arstellung von Listenw erten null cons(1, null) cons(1, cons(7, cons(2 , cons(1, null)))) ... U nterschied zum funktionalen Typ nichtparam eterisiert ZugriffaufZeigerkom ponenten ohne A bfrage aufnull nichtverboten. es können zyklische D atenstrukturen aufgebautw erden: list : intlist := cons(1, cons(7, cons(2 , cons(1, null)))); list^.tail^.tail^.tail^.tail := list; K urs Program m iersprachen 42B erthold H offm ann (W inter98/99) allgem einer rekursiver Typ D efinition durch rekursive Typgleichungen (m it+ und ×) T = + + + (S11 × ...× Sk k1) (S21 × ...× S2 k2) ... (Sn1 × ...× Sn kn) O perationen Variantenabfrage,K om ponentenzugriff. K ardinalität unendlich rekursive Potenzm engen führen zu W idersprüchen rekursive A bbildungstypen sind m öglich M = M →M D ann brauchtm an einen spezielleren Typbegriff (partiellgeordnete M engen) w ichtig beiderdenotationellen Sem antik zum G lück abernichtim Program m ieralltag! K urs Program m iersprachen 43B erthold H offm ann (W inter98/99) algebraische Typen D efinition (H askell) data Inttree ::= Leaf int | Branch inttree inttree W erte von inttree Leaf 1 Branch (Leaf 1) (Leaf 1) Branch (Branch (Leaf 1) (Leaf 2)) (Leaf 3) ... in M L heißen diese Typen K onstruktionen sind abersonstganz ähnlich inttree K urs Program m iersprachen = leaf of int | branch of inttree * inttree 44B erthold H offm ann (W inter98/99) der SonderfallZeichenketten M öglichkeit1 (M L) ein vordefiniertereinfacherTyp M öglichkeit2 (Pascal,M odula,A da) ein Feld von Zeichen:packed array [1..max] of char N achteil:feste Längen keine K onkatenation M öglichkeit3 (A lgol-68) ein flexibles Feld von Zeichen:flex [1..max] of char M öglichkeit4 (H askell) eine Liste von Zeichen:type string = [char] K urs Program m iersprachen 45B erthold H offm ann (W inter98/99) Sonstige D atentypen Sequentielle D ateien? file of T ≡T* oder(T*×T*) siehe auch Speicher Zeiger sind keine W erte,sondern A dressen ein m aschinennahes im peratives K onstrukt siehe Speicher K urs Program m iersprachen 46B erthold H offm ann (W inter98/99) (x,y) S× T K urs Program m iersprachen {a,b,...} ...,-1.0,...,0.0,1.0,... Real ℘S ‘a’,...‘Z’,‘.’... Character S→ T ...,-2,-1,0,1,2,... Integer left(x)right(y) {x |→ a,y |→ b,z |→ a } — true false Boolean S+ T — geordnete D estruktoren 47 — asleftasright firstsecond round trunc ord — — K onstruktoren alle D atentyp D atentypen abstrakt ∈⊂∩∪\ — isleftisright + -* /** Berthold H offm ann (W inter98/99) + -* div m od ** ¬∧∨⇒⇔ pred succ < <= >= > = /= O perationen TY PISIER U N G Typsystem Regeln fürden U m gang von O perationen m itW erten derU nterschied zu m achinennahen Sprachen statische Typisierung JederN am e füreinen W ert(Variable,Param eter,...) hatim Program m einen Typ ·Typüberprüfungen beiderÜ bersetzung (“statisch”) function even (n: Integer) return Boolean is begin return (n mod 2 = 0) end even; ... even(i+1) ... dynam ische Typisierung JederW erthatbeiderA usführung einen Typ ·Typüberprüfungen beiderA usführung (“dynam isch”) function even (n) is begin return (n mod 2 = 0) end even; even(i+1) ... statische Typisierung istsicherer und w ird beifastallen Sprachen benutzt(A usnahm en:Lisp,Sm alltalk) K urs Program m iersprachen 48B erthold H offm ann (W inter98/99) Typgleichheit W ann sind zw eiTypen T und T’gleich? in statisch getypten Sprachen strukturelle G leichheit(A lgol-68) T ≡ T’genau dann w enn T und T’die gleiche W ertem enge haben nam entliche G leichheit(A da) T ≡ T’genau dann w enn T und T’ an dergleichen Stelle vereinbartw urden BEISPIEL:A und C strukturellgleich,nam ens-ungleich type A = array [1..10] of B; B = array [0..99] of Integer; C = array [1..10] of [0..99] of Integer; Vor-und N achteile strukturelle G leichheit • hartzu überprüfen (z.B.beirekursiven Typen) • unverträglich m itdem G eheim nisprinzip (inform ation hiding) N am engleichheit • m anchm alzu streng (Zeichenketten) K urs Program m iersprachen 49B erthold H offm ann (W inter98/99) Typvollständigkeit K lassengesellschaftder W erte (Pascal) 1.Prozeduren und Funktionen können A rgum ente sein, abernichtzugew iesen w erden,und nichtin W erte eingefügtw erden 2.zusam m engesetzte W erte könnenn nichtFunktionsergebnisse sein Typvollständigkeitsprinzip keine Sprachkonstruktion fürW erte sollte w illkürlich eingeschränktsein K urs Program m iersprachen 50B erthold H offm ann (W inter98/99) A U SD R Ü C K E Literal Schreibw eise von W erten einfachen Typs 365 3.1415 ‘%’ ‘Lovelace’ A ggregat K onstruktion von W erten zusam m engesetzten Typs ein W ertvom Tupeltyp (real, real) (in H askell) (a*2.0, b/2.0) ein W ertvom Feldtyp array Month of Natural (in A da) (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31) ein W ertvom Verbundtyp Date (in A da) (y =>1993, m =>’Oct’, d => 24) Ein W ertvom Typ Inttree (in H askell) Branch (Branch (Leaf 1) (Leaf 2)) (Leaf 3) K urs Program m iersprachen 51B erthold H offm ann (W inter98/99) Funktionsaufruf,bedingter A usdruck A nw endung einer Funktion aufeinen aktuellen Param eter beide können von A usdrücken geliefertw erden (in M L,A lgol-68) (if a < 0 then sin else cos) (14.0*x) O perationen sind infix geschriebene Funktionsaufrufe spartK lam m ern,sonstnichts in m anchen Sprachen trotzdem leichtverschieden (overloading) ⊕E ≡ ⊕(E ) E ⊗E’ ≡ ⊗(E ,E’) Typselektoren für zusam m engesetzte W erte sind O perationen • Projektion (kartesisches Produkt,disjunkte Vereinigung) • M arkierungsabfrage (disjunkte Vereinigung) • A bbildungsanw endung (Feldindizierung,...) • ... bedingter A usdruck (H askell) A usw ahlzw ischen W erten (von A usdrücken)gleichen Typs if a < 0 then sin else cos case thismonth of { Feb -> if leap(thisyear) then 29 else 28; | Apr -> 30; | Jun -> 30; | Sep -> 30; | Nov -> 30; | -> 31; } auch if und case sind O perationen w eshalb können sie nichtim m erin derSprache ausgerücktw erden? K urs Program m iersprachen 52B erthold H offm ann (W inter98/99) benannte K onstanten und Variablen ZugriffaufW erte benannter K onstanten const pi = 3.1416; ... ... (2*pi*r) ... Zugriffauf(m om entane)W erte von Variablen var r : Real; ... ... (2*pi*r) ... K urs Program m iersprachen 53B erthold H offm ann (W inter98/99) Zusam m enfassung:W erte,Typen und A usdrücke Typen sind W ertem engen P ::= Truth-value |Integer |Real |Char ... T ::= PP | S× T | S+ T | S→ T | 2T Typdisziplin erhöhtdie Sicherheit statische Typisierung istsichererund effizienterals dynam ische strukturelle Typäquivalenz istschw ierig zu entscheiden (Rekursion) nam entliche Typäquivalenz verträgtsich besserm itM odularität Prinzip der Typvollständigkeit keine w illkürlichen Einschränkungen von O perationen A usdrücke berechnen W erte (aus W erten) Literale:Schreibw eise fürprim itive W erte A ggregate:K om position von zusam m engesetzten W erten Zugriffaufbenannte K onstanten und Variable Funktionaufrufe: • m ehrstellige Funktionen sind einstellige Funktionen aufTupeln • O peratoren sind infix geschriebene Funktionsaufrufe • Typselektoren sind vordefinierte Funktionen /O peratoren bedingte A usdrücke K urs Program m iersprachen 54B erthold H offm ann (W inter98/99) — — int char real — — Integer Character Float (a,...b) u ..o union [n] — S+ T S→ T 2T K urs Program m iersprachen sonstige struct S× T sonstige L real — Truthvalue — [n] union struct char L int bool void void Unit A lgol-68 C D atentyp Integer Boolean null A da file set 55 — array record | array record ja ja Float * record ja ja real character Character integer boolean Pascal request — array | (, , ) ...with ... — — ja Float Double Char Integer Int Bool () H askell Praktikum :einfache und zusam m engesetzte D atentypen | — ja — Eiffel Berthold H offm ann (W inter98/99) list array | * record — ja ML K urs Program m iersprachen nam entlich gleich strukturellgleich Typgleichheit V ariablenzugriff K onstantenzugriff bedingterA usdruck O paratoranw endung alle ? : – alle if case ja — A ggregate Funktionsanw endung ja ja Literal A lgol-68 C K onstrukt 56 sonst string – string ja Pascal type subtype – ja ja A da type data if case ja ja H askell A usdrücke,Typgleichheitin einigen Program m iersprachen alle – – ARRAY ja Eiffel Berthold H offm ann (W inter98/99) type datatype abstype if case ja ja ML Konstante Aggregate • • • O perand O peratorErgebnis • • • K urs Program m iersprachen einfach zusam m engesetzt Zeiger Referenz A bstraktion • • • 57 • • • • Argum ent • A bstraktion A da • Referenz • • • Kom ponente • • • Berthold H offm ann (W inter98/99) FunktionsErgebnis • • • • • • Zeiger • • • • Kom ponente • • • FunktionsErgebnis D atei M enge • • Argum ent • • • O peratorErgebnis Zeichenkette • O perand • • Konstante Aggregate Verbund /Feld einfach Pascal Typvollständigkeitin Pascalund A da K urs Program m iersprachen ML Konstante Aggregate einfach • zusam m engesetzt • Referenz • Funktion • • • • • O perand Typvollständigkeitin M L 58 O peratorErgebnis • • • • • • • • Argum ent FunktionsErgebnis • • • • Berthold H offm ann (W inter98/99) • • • • Kom ponente Ü bungen R ealisiere folgende A bbildung als Feld und Funktion not : bool → bool In w elchen Eigenschaften unterscheiden sich diese D efinitionen, und allgem ein Felderund Funktionsdefinitionen? K urs Program m iersprachen 59B erthold H offm ann (W inter98/99)