GK Info 13 (Hö)PROLOG – Eine Sprache der Künstlichen Intelligenz Prolog Programmieren in Logik...

21
GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz Prolog Programmieren in Logik 5. Arithmetik

Transcript of GK Info 13 (Hö)PROLOG – Eine Sprache der Künstlichen Intelligenz Prolog Programmieren in Logik...

Page 1: GK Info 13 (Hö)PROLOG – Eine Sprache der Künstlichen Intelligenz Prolog Programmieren in Logik 5. Arithmetik.

GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz

Prolog

Programmieren in Logik

5. Arithmetik

Page 2: GK Info 13 (Hö)PROLOG – Eine Sprache der Künstlichen Intelligenz Prolog Programmieren in Logik 5. Arithmetik.

GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz

Inhalt

• Einführung

• Zahlentypen

• is - Operator

• Grundrechenarten

• Vergleichsoperatoren

• Funktionen

• Beispiele

Page 3: GK Info 13 (Hö)PROLOG – Eine Sprache der Künstlichen Intelligenz Prolog Programmieren in Logik 5. Arithmetik.

GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz

Einführung

Es mag verwundern, dass in einem Kurs über eine Programmiersprache bis jetzt kein Wort über Zahlen und das Rechnen mit ihnen gefallen ist.

Der Grund liegt darin, dass aus Effektivitätsgründen die arithmetischen Operationen PROLOG untypisch implementiert sind.

Außerdem unterscheiden sich hier die verschiedenen PROLOG Systeme.

Page 4: GK Info 13 (Hö)PROLOG – Eine Sprache der Künstlichen Intelligenz Prolog Programmieren in Logik 5. Arithmetik.

Zahlentypen

In SWI-PROLOG gibt es zwei verschiedene Zahlentypen:

GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz

SWI-PROLOG versteckt den Unterschied zwischen denZahlentypen, der Benutzer muss sich also nicht darumkümmern!

• integer (ganze Zahlen)

• float (Kommazahlen)

Page 5: GK Info 13 (Hö)PROLOG – Eine Sprache der Künstlichen Intelligenz Prolog Programmieren in Logik 5. Arithmetik.

is - Operator

X is 3 + 5.

Y is 17 mod 3.

X is 3, Y is X * 2 + 7.

X is 2 + 3, Y is X * 5.

X is (1 + 2 + 3 + 4) / 10.

GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz

In PROLOG erfolgt eine Wertzuweisung über den

is – Operator:

Page 6: GK Info 13 (Hö)PROLOG – Eine Sprache der Künstlichen Intelligenz Prolog Programmieren in Logik 5. Arithmetik.

Grundrechenarten

Die Grundrechenarten schreibt man in SWI-Prolog wie folgt:

GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz

X + Y AdditionX - Y SubtraktionX * Y MultiplikationX / Y DivisionX // Y ganzzahlige DivisionX mod Y Rest bei der ganzzahligen Division

Page 7: GK Info 13 (Hö)PROLOG – Eine Sprache der Künstlichen Intelligenz Prolog Programmieren in Logik 5. Arithmetik.

Vergleichs-Operatoren

In SWI-PROLOG gibt es folgende Vergleichsoperatoren:

GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz

X =:= Y numerisch gleich

X =\= Y numerisch ungleich

X < Y numerisch kleiner

X > Y numerisch größer

X =< Y numerisch kleiner oder gleich

X >= Y numerisch größer oder gleich

Page 8: GK Info 13 (Hö)PROLOG – Eine Sprache der Künstlichen Intelligenz Prolog Programmieren in Logik 5. Arithmetik.

Funktionen I

In SWI-PROLOG gibt es u.a. folgende Funktionen:

GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz

abs(E) Absolutwert von E

max(E1,E2), min(E1,E2)

Max. / Min. von E1 und E2

sqrt(E) Wurzel aus E

E1 ^ E2 E1 hoch E2

sin(E), cos(E), tan(E)asin(E), acos(E), atan(E)

trig. Funktionen

log(E), Log10(E) Ln / Lg - Funktionen

exp(X) e - Funktion

random(Int) Zufallszahl aus [ 0;Int [

Page 9: GK Info 13 (Hö)PROLOG – Eine Sprache der Künstlichen Intelligenz Prolog Programmieren in Logik 5. Arithmetik.

Funktionen II

In SWI-PROLOG gibt es folgende Spezial-Funktionen für

integer – Zahlen:

GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz

between(Low, High, Value)

erfüllt für Low <= Value <= High ist Value eine Variable, so durchläuft sie schrittweise alle Werte zwischen Low und High

succ(Int1, Int2) erfüllt für Int2 = Int1 + 1ein Argument kann eine Variable sein

plus(Int1, Int2, Int3) erfüllt für Int3 = Int1 + Int2ein Argument kann eine Variable sein

Page 10: GK Info 13 (Hö)PROLOG – Eine Sprache der Künstlichen Intelligenz Prolog Programmieren in Logik 5. Arithmetik.

GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz

Beispiel 1

Aufgabe:

Ein PROLOG-Programm soll angeben können, wer in einem bestimmten Jahr Kanzler der Bundesrepublik Deutschland war.

Prolog:kanzler(adenauer,1949,1963). kanzler(erhard,1963,1966).kanzler(kiesinger,1966,1969). kanzler(brandt,1969,1974).kanzler(schmidt,1974,1982). kanzler(kohl,1982,1998).kanzler(schroeder,1989,2005). kanzler(merkel,2005,2007).regiert(K,J) :- kanzler(K,A,E), A =< J, E >= J.

Page 11: GK Info 13 (Hö)PROLOG – Eine Sprache der Künstlichen Intelligenz Prolog Programmieren in Logik 5. Arithmetik.

GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz

Beispiel 1

Test:regiert(K,1960).regiert(K,1974).regiert(K,1900).regiert(kohl,1980).regiert(kohl,1988).regiert(kohl,J).

Page 12: GK Info 13 (Hö)PROLOG – Eine Sprache der Künstlichen Intelligenz Prolog Programmieren in Logik 5. Arithmetik.

GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz

Beispiel 2

Test:reg_dauer(adenauer,J).reg_dauer(brandt,10).reg_dauer(K,3).

Aufgabe:

Das PROLOG-Programm soll die Regierungsdauer der einzelnen Kanzler angeben können.

Prolog:reg_dauer(K,D) :- kanzler(K,A,E), D is E - A.

Page 13: GK Info 13 (Hö)PROLOG – Eine Sprache der Künstlichen Intelligenz Prolog Programmieren in Logik 5. Arithmetik.

GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz

Beispiel 3

Aufgabe:

Ein PROLOG-Programm soll die Fakultät berechnen können: 0! = 1; n! = n * (n-1)! für n>0

Prolog:fak(0,1).fak(N,F) :- N > 0, N1 is N - 1,fak(N1,F1), F is N * F1.

Test:fak(4,F).fak(3,5).fak(N,24).

Page 14: GK Info 13 (Hö)PROLOG – Eine Sprache der Künstlichen Intelligenz Prolog Programmieren in Logik 5. Arithmetik.

GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz

Beispiel 4

Aufgabe:

Dies ist eine Aufgabe von Adam Riese:

Setzt man für das Erbe einer Tochter x Gulden an, so erhält man folgende Gleichung:

x + x + 2x + 2*2x = 360

Page 15: GK Info 13 (Hö)PROLOG – Eine Sprache der Künstlichen Intelligenz Prolog Programmieren in Logik 5. Arithmetik.

GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz

Beispiel 4

Lösung in Prolog:

loesung(X) :- between(1,360,X), 360 is X + X + 2*X + 2*2*X.

Erklärung:

- das Prädikat between erzeugt der Reihe nach alle natürlichen Zahlen zwischen 1 und 360

- anschließend wird überprüft, ob diese die Bedingung des Rätsels erfüllen

- Prinzip: erzeuge und überprüfe

Page 16: GK Info 13 (Hö)PROLOG – Eine Sprache der Künstlichen Intelligenz Prolog Programmieren in Logik 5. Arithmetik.

GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz

Beispiel 5

Auf einer Wiese hütet Liesel Schafe und Gänse. Lehrer Flachsel, der gerade vorbeikommt, fragt Liesel nach deren Anzahl. Diese antwortet: „Es sind doppelt so viele Gänse wie Schafe, insgesamt habe ich 88 Beine gezählt.“

Wie viele von jeder Sorte sind es?

Es soll ein PROLOG-Prädikat vorhanden definiert werden, das die Anfrage

?- vorhanden(88,Schafe,Gaense).gestattet.

Page 17: GK Info 13 (Hö)PROLOG – Eine Sprache der Künstlichen Intelligenz Prolog Programmieren in Logik 5. Arithmetik.

GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz

Beispiel 5

Idee:

zwei Zählschleifen für Schafanzahl und für Gänseanzahl prüfen die beiden Bedingungen

Schafe*4 + Gänse*2 = 88

Schafe*2 + Gänse = 0

Prolog:

vorhanden(Beine,Schafe,Gaense) :-GS is Beine/4, between(1,GS,Schafe),GG is Beine/2, between(1,GG,Gaense),Beine is Schafe*4 + Gaense*2,Gaense is Schafe*2.

Page 18: GK Info 13 (Hö)PROLOG – Eine Sprache der Künstlichen Intelligenz Prolog Programmieren in Logik 5. Arithmetik.

GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz

Beispiel 6

Aufgabe:

Die Teilermenge einer Zahl ist auszugeben.

Idee:(1) Systemprädikat findall(X,Bedingung,Liste) alle Objekte X, die die Bedingung erfüllen, werden in der Liste zusammengefasst(2) die Teilermenge ist: {T| T teilt Zahl}

teiler_menge(Zahl,Menge) :-findall(T,teilt(T,Zahl),Menge).

Page 19: GK Info 13 (Hö)PROLOG – Eine Sprache der Künstlichen Intelligenz Prolog Programmieren in Logik 5. Arithmetik.

GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz

Beispiel 6

Idee:

(3) T teilt Zahl, wenn:

- T zwischen 1 und Zahl liegt

- der Rest bei der Division Zahl/T Null ergibt

teilt(T,Zahl) :- between(1,Zahl,T),Zahl mod T =:= 0.

Page 20: GK Info 13 (Hö)PROLOG – Eine Sprache der Künstlichen Intelligenz Prolog Programmieren in Logik 5. Arithmetik.

GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz

Aufgaben

Lösen Sie im PROLOG-Arbeitsbuch die Aufgaben S.30/1 – S.35/22

Page 21: GK Info 13 (Hö)PROLOG – Eine Sprache der Künstlichen Intelligenz Prolog Programmieren in Logik 5. Arithmetik.

GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz

Aufgaben

Lösen Sie die Aufgaben 21 bis 25.