SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt...

43
Institute for Software Technology SWP – Funktionale Programme Bernhard Aichernig , Alexander Felfernig, Gerald Steinbauer Institut für Softwaretechnologie {aichernig, alexander.felfernig, steinbauer}@ist.tugraz.at

Transcript of SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt...

Page 1: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology

SWP – Funktionale Programme

Bernhard Aichernig, Alexander Felfernig, Gerald Steinbauer

Institut für Softwaretechnologie {aichernig, alexander.felfernig, steinbauer}@ist.tugraz.at

Page 2: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 2

Inhalt

§  Einfache Ausdrücke §  Datentypen §  Rekursive funktionale Sprache §  Interpreter für funktionale Sprache §  Halteproblem

Semantik

Page 3: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology

EINFACHE AUSDRÜCKE

3

Page 4: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 4

Konstante Terme

§  Ziel: Definition einer Sprache konstanter arithmetischer Terme A

§  Eine formale Sprache über einem Alphabet Σ ist eine Teilmenge der Menge aller Zeichenketten über Σ (= Σ*)

§  Σ* = ⎩⎭i=0..∞ Σi mit Σ0 = {ε} Σi = {x1...xi | xk ∈ Σ für k=1..i}

Page 5: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 5

Sprache A

§  Alphabet: Σ = { 0, .., 9, (, ), + } §  ZIFF = { 0, .., 9} §  ZAHL = (ZIFF – {0}) ZIFF* ∪ {0} §  Induktive Definition von A:

1.  ZAHL ⊆ A 2.  Für x,y ∈ A ist auch (x) + (y) ∈ A

§  Beispiele: 10 ∈ A aber 01 ∉ A (10)+(210) ∈ A aber (x)+(y) ∉ A

Page 6: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 6

Semantik von A

§  Semantikfunktion I: A → N0

mit N0 als Menge der nicht-negativen, ganzen Zahlen.

§  Definition: 1.  I(x) = <x> für x ∈ ZAHL, wobei <x> die

Zahl zum String x bezeichnet. 2.  I((x)+(y)) = I(x) + I(y) für x,y ∈ A

Page 7: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 7

Beispiel zu A

§  I( ((10)+(9))+(3) ) = = I( (10)+(9) ) + I( 3 ) = I( 10 ) + I( 9 ) + 3 = 10 + 9 + 3 = 19 + 3 = 22

Page 8: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 8

Binäre Zahlenarithmetik (B) §  Sprache B:

Alphabet Σ = {0,1,(,),+} ZAHLB = {1}{0|1}* ∪ {0}

§  Definition (Syntax): 1.  ZAHLB ⊆ B 2.  Für x,y ∈ B ist auch (x)+(y) ∈ B

§  Definition (Semantik): 1.  I(x) = <x> für x ∈ ZAHLB 2.  I( (x)+(y) ) = I(x) + I(y) für x,y ∈ B

Page 9: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 9

Definition von <x> §  Bedeutung von <x> für Binärzahlen

muss noch definiert werden. 1.  <x> = 0 für x=0 2.  <x> = 1 für x=1 3.  <x1..xn> = <x1>2n-1 + ... + <xn>20

für xi∈{0,1}

§  Beispiel: I(1001)=8+0+0+1=9 aber 1001≠9

Page 10: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 10

Mögliche Semantikprobleme §  Sprache C: Erweiterung von A um

Multiplikation (*) §  Syntax:

1.  ZAHL ⊆ C 2.  Für x,y ∈ C ist x + y ∈ C 3.  Für x,y ∈ C ist x * y ∈ C

§  Semantik: 1.  I(x) = <x> für x ∈ ZAHL 2.  I(x + y) = I(x) + I(y) 3.  I(x * y) = I(x) * I(y)

Page 11: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 11

Problem der Sprache C §  Die Interpretation I definiert durch die

Semantik von C ist KEINE Funktion! §  Mehrdeutigkeit! §  Beispiel:

1.  I(1+1*2) = I(1+1)*I(2) = (I(1)+I(1))*2 = (1+1)*2 = 2 * 2 = 4

2.  I(1+1*2) = I(1) + I(1*2) = 1 + (I(1)*I(2)) = 1 + (1*2) = 1 + 2 = 3

Page 12: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 12

Erweiterungen §  Bisher: Terme

(d.h. Zahlen und Operatoren) §  Einführung von Variablen §  Neue Grundmenge, der Einfachheit halber

IVS = {x,y,z} ∪ {x1,x2,...} §  Variablenwerte durch Environment

(Umgebung) gegeben: ENV = Menge aller Abbildungen IVS→Λ

Page 13: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 13

Sprache VA

§  Syntax: 1.  ZAHL ⊆ VA 2.  IVS ⊆ VA 3.  Falls x,y ∈ VA, dann ist (x)+(y) ∈ VA

§  Somit gilt: A ⊆ VA §  Semantik:

§  Erweiterung von I: ENV × VA → N0

Page 14: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 14

Semantik von VA 1.  I(ω,k) = <k> 2.  I(ω,v) = ω(v) 3.  I(ω,(x)+(y)) = I(ω,x) + I(ω,y) mit k ∈ ZAHL

ω ∈ ENV v ∈ IVS x,y ∈ VA

Page 15: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 15

Beispiel für VA

§  Ausdruck: e = (((x) + (2)) + (y)) + (z) §  Environment: ω(x)=0, ω(y)=1, ω(z)=2 §  I(ω, (((x) + (2)) + (y)) + (z) ) =

= I(ω, ((x) + (2)) + (y)) + I(ω, z) = I(ω, (x) + (2)) + I(ω, y) + ω(z) = I(ω,x) + I(ω,2) + ω(y) + 2 = ω(x) + 2 + 1 + 2 = 0 + 2 + 1 + 2 = 5

Page 16: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology

DATENTYPEN

16

Page 17: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 17

Definition

§  Ein Datentyp ist ein Tupel ℜ = (A, f1,..,fn, p1,..,pm, c1,..,ck)

§  A: Menge §  fi: Funktionen von Aki → Ali (Arität ki auf Arität li)

(für bestimmte ki und li) §  pi: Prädikate Aki → { T,F } (Prädikat der Arität ki)

(für bestimmtes ki) §  ci: Konstante (ausgewählte Elemente von A)

Page 18: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 18

Datentyp Integer (Z)

§  A: Menge der ganzen Zahlen §  f1: + f2: - f3: * §  p1: < p2: = §  c1: 0 c2: 1

Page 19: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 19

Datentyp Real (R)

§  A: Menge der reellen Zahlen §  f1: + f2: - f3: * §  p1: < p2: = §  c1: 0 c2: 1 §  Problem mit der Hinzunahme von /

(Division) / ist nur auf A × (A-{0}) definiert!

Page 20: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 20

Datentyp String (V)

§  A: V* mit V = endliches Alphabet { v1,..,vn }

§  f1: ° (Konkatenation) §  p1: << (x ist Präfix y = x << y) §  c1: v1 ... cn: vn cn+1: ε (Leerwort)

Page 21: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 21

Induktive Definition von ° und << §  Definition ° :

1.  Ist x ∈ V* so gilt: x ° ε = x 2.  Ist x ∈ V* und a ∈ V dann gilt: x ° a = xa 3.  Ist x,y ∈ V*, a ∈ V dann ist

x ° (y ° a) = (x ° y) ° a

§  Definition << : 1.  Für alle x ∈ V* gilt: ε << x 2.  Für alle x ∈ V* gilt: x << x 3.  Ist x Präfix von y dann auch von y ° z

x << y ⇒ x << y ° z

Page 22: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 22

Spezieller String: Binärer Stack §  A: {0,1}*, Strings aus 0 und 1 §  f1: add1 f2: add0 f3: sub §  p1: ist0? p2: ist1? p3: istLeer? §  C1: leer

0 1 1 1 0

0 1 1 1 0

0 1 1 1 0

0 1 1 1

0 1

add1

add0 sub

Page 23: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 23

Formale Definition der Operatoren/Prädikate

§  add0(x) = 0x §  add1(x) = 1x §  sub(leer) = leer

sub(ax) = x für a ∈ {0,1} §  ist0?(x) ⇔ ∃ z: x = 0z §  ist1?(x) ⇔ ∃ z: x = 1z §  istLeer?(x) ⇔ x = leer

Page 24: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 24

Beispiele zu binären Stack

§  x = add0(add1(sub(011))) = add0(add1(11)) = add0(111) = 0111

§  ist0?(x) = T §  ist1?(x) = F §  istLeer?(x) = F

Page 25: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology

SPRACHEN ÜBER DATENTYPEN

25

Page 26: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 26

Bisher behandelt ..

§  Einfache Ausdrücke §  Syntax §  Semantik

§  Datentypen

⇒ Zusammenführung!

Page 27: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 27

Was ist notwendig?

§  Datentyp §  Menge §  Operatoren §  Prädikate

§  0,1,... §  +,- §  >, =

§  Sprache §  Sprachkonstrukte

§  0, 1,... §  plus, minus §  gt, eq

Page 28: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 28

Sprache der Terme T §  Gegeben: Datentyp ℜ = (A,f1,..,fn,p1,..,pm,c1,..,cr) §  Gesucht: Sprache über ℜ §  Konstruktion: definiere Symbolmenge SYM für ℜ; SYM

besteht aus: §  Individuen-Variablen Symbole (IVS): x,y,z,x1,x2,... §  Funktionssymbole: für jede Funktion fi (s.o.) ein Symbol f §  Prädikatensymbole: Für jedes Prädikat pi (s.o.) ein Symbol p §  Konstantensymbole (Γ): Für jede Konstante ci (s.o.) ein Symbol c §  (,) und , §  Sondersymbole: if, then, else, begin, end,...

Page 29: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 29

Beispiel (Konstruktion von SYM) §  Stack S = (S,add0,add1,sub,ist0?,ist1?,

istLeer?,leer) §  Symbolmenge SYM:

§  SYM = IVS ∪ {(,),,} ∪ {add0,add1,sub,ist0?,ist1?,istLeer?,leer}

Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Page 30: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 30

Definition von T

§  Sei ℜ = (A,f1,..,fn,p1,..,pm,c1,..,cr) ein beliebiger Datentyp.

§  T ⊆ SYM(ℜ) §  Semantikfunktion Iτ: ENV × T → A mit

ENV: Menge aller Funktionen IVS → A.

Page 31: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 31

Syntax von T

§  Konstantensymbole sind Terme. §  Individuenvariablensymbole sind Terme. §  Ist f ein n-stelliges Funktionsymbol und

t1,..,tn sind Terme, dann ist auch f(t1,..,tn) ein Term.

Page 32: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 32

Semantik von T (Terminterpretation Iτ)

§  Iτ(ω,c) = c0 für c∈Γ und ω∈ENV §  Iτ(ω,v) = ω(v) für v∈IVS und ω∈ENV §  Iτ(ω,f(t1,..,tn)) = f0(Iτ(ω,t1),..,Iτ(ω,tn))

für ti∈T und ω∈ENV

§  Γ: Konstantensymbole

Page 33: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 33

Beispiel: Sprache über Datentyp Integer

§  ℜ = ({0,1,..},+,=,>,0,1) §  plus für + null für 0

equal für = eins für 1 gt für >

§  Beispielprogramme: §  plus(x,y) §  plus(plus(x,y),plus(eins,z))

§  Environment: ω(x)=0, ω(y)=1, ω(z)=2

Page 34: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 34

Beispiel (cont.)

§  Iτ(ω,plus(plus(x,y),plus(eins,z))) = = +(Iτ(ω, plus(x,y)), Iτ(ω, plus(eins,z))) = +( +(Iτ(ω,x), Iτ(ω, y)), +(Iτ(ω,eins), Iτ(ω, z))) = +( +(ω(x), ω(y)), +(1, ω(z))) = +( +(0,1), +(1,2)) = +( 1, 3) = 4

Page 35: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 35

Anmerkung §  Terme in T sind in Präfixform (und nicht in

Infix-Form) definiert. Z.B. ((x)+(y))+(3) ist Infix. Dieser Ausdruck müsste jetzt folgende Gestalt haben: +(+(x,y),3)

§  Laut Definition von T gibt es keine Konstante 2. Es gibt jedoch Ausdrücke, die zu 2 evaluieren!

plus(eins,eins) §  Für jede Zahl n gibt es einen variablenfreien

Term t, so daß Iτ(t)=n ist.

Page 36: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 36

Anmerkung Termtiefe

§  Für jeden Term t ∈ T kann eine Tiefe definiert werden.

§  D(t) = 0 wenn t ∈ Γ ∪ IVS ist.

§  D(f(t1,..,tn)) = = 1 + max{ D(ti) | i=1,..,n }

§  Beispiel: D(plus(null,plus(eins,eins))) =2

plus

null

eins

plus

eins

Page 37: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 37

Verwendbarkeit von T?

§  Beschreibung von digitalen Schaltungen §  Datentyp: Boolsche Algebra

§  ....

Page 38: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 38

Sprache der Konditionale COND

§  Erweiterung von T auf Sprachen mit Konditionalen

§  Syntax: §  Alle Terme sind Konditionale §  Ist p ein n-stelliges Prädikatensymbol und

sind u1,..,un,t1,t2 Konditionale, dann ist auch if p(u1,..,un) then t1 else t2 ein Konditional.

Page 39: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 39

Semantik von COND §  Semantikfunktion Iγ §  Iγ(ω,t) = Iτ(ω,t) für t ∈ T und ω∈ ENV §  Sei po das Prädikat zum

Prädikatensymbol p: §  Falls po(Iγ(ω,u1),..,Iγ(ω,un), )=T, dann

Iγ(ω,if p(u1,..,un) then t1 else t2) = Iγ(ω,t1 ) §  Falls po(Iγ(ω,u1),..,Iγ(ω,un), )=F, dann

Iγ(ω,if p(u1,..,un) then t1 else t2) = Iγ(ω, t2 )

Page 40: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 40

Beispiel zu COND

§  Binärer Stack ℜ = (S,add0,add1,sub,ist0?,ist1?,istLeer?,leer)

§  if ist0?(sub(x)) then add0(x) else sub(x) §  Fragen:

§  Ist der obige Ausdruck wirklich aus COND? ok. §  Berechnung des Ausdrucks für ω(x)=101?

Page 41: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 41

Beispiel zu COND (cont.)

§  Iγ(ω,ist0(sub(x))) = §  ist0(Iγ(ω,sub(x))) = §  ist0(sub(Iγ(ω,x))) = §  ist0(sub(101)) = §  ist0(01) = T.

§  Iγ(ω,add0(x)) = §  add0(Iγ(ω,x)) = §  add0(101) = §  0101

Page 42: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 42

Anmerkungen zu COND

§  In COND können verschachtelte Konditionale konstruiert werden.

§  Aufpassen: §  Beim Bedingungsteil müssen alle

Argumente aus COND sein. Prädikate sind nicht aus COND!

§  Beispiel: if ist0?(ist1?(x)) then x else add0(x)

Page 43: SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty

Institute for Software Technology 43

Verwendbarkeit von COND?

§  Zur Repräsentation von Wissen §  If-then-else Konstrukte

§  ...