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)