5 Logisches Programmieren listtoset([],[]). listtoset([X|R],[X|S]) :- remove(X,R,S1),listtoset(S1,S). remove(E,[],[]). remove(E,[E|R],S):- remove(E,R,S). remove(E,[X|R],[X|S]):- not(E == X), remove(E,R,S). union(X,Y,Z) :- append(X,Y,XY), listtoset(XY,Z). <strong>in</strong>tersect([],X,[]). <strong>in</strong>tersect([X|R],S,[X|T]) :- member(X,S),<strong>in</strong>tersect(R,S,T1),listtoset(T1,T). <strong>in</strong>tersect([X|R],S,T) :- not(member(X,S)),<strong>in</strong>tersect(R,S,T1),listtoset(T1,T). reverse([],[]). reverse([X|R],Y) :- reverse(R,RR), append(RR,[X],Y). reversea(X,Y) :- reverseah(X,[],Y). reverseah([X|Xs],Acc,Y):- reverseah(Xs,[X|Acc],Y). reverseah([],Y,Y). 5.3.5 Differenzlisten Wir führen an <strong>die</strong>ser Stelle e<strong>in</strong>e weitere Darstellung von Listen e<strong>in</strong>, <strong>die</strong> sogenannten Differenzlisten. Diese werden später im Abschnitt 5.4 zum Parsen und Def<strong>in</strong>ite Clause Grammars e<strong>in</strong>e Rolle spielen und verwendet. Diese Darstellung besitzt den Vorteil, dass das append-Prädikat wesentlich effizienter implementiert werden kann. Betrachten wir zunächst <strong>die</strong> bisherige Implementierung von append erneut: append([],X,X). append([X|Y],U,[X|Z]) :- append(Y,U,Z). Der Nachteil <strong>die</strong>ser Implementierung liegt dar<strong>in</strong>, dass <strong>die</strong> Auswertung <strong>der</strong> Ergebnisliste <strong>die</strong> gesamte erste Liste abarbeiten muss, d.h. <strong>die</strong> Laufzeit ist l<strong>in</strong>ear <strong>in</strong> <strong>der</strong> Länge <strong>der</strong> ersten Liste. Dies kann man sich klar machen, wenn man <strong>die</strong> Abarbeitung beispielhaft durchgeht: append([a 1 ,. . . ,a n ],[b 1 ,. . . ,b m ],L) X 1 = a 1 , Y 1 =[a 2 ,...,a n ], U 1 = [b 1 ,...,b m ], L = [a 1 |Z 1 ] append([a 2 ,. . . ,a n ],[b 1 ,. . . ,b m ],Z 1 ) X 2 = a 2 , Y 2 =[a 3 ,...,a n ], U 2 = [b 1 ,...,b m ], Z 1 = [a 2 |Z 2 ] append([a 3 ,. . . ,a n ],[b 1 ,. . . ,b m ],Z 2 ) X 3 = a 3 , Y 3 =[a 4 ,...,a n ], U 3 = [b 1 ,...,b m ], Z 2 = [a 3 |Z 3 ] ...... append([],[b 1 ,. . . ,b m ],Z n ) Z n = [b 1 ,...,b m ] Da Listen rekursiv dargestellt werden, gibt es zunächst ke<strong>in</strong>e bessere Möglichkeit das append-Prädikat zu implementieren. E<strong>in</strong> Ausweg stellen <strong>die</strong> sogenannten Differenzlisten dar: Anstelle <strong>der</strong> Liste selbst, wird dabei e<strong>in</strong>e Liste durch zwei Listen dargestellt. D.h. e<strong>in</strong>e Liste wird durch e<strong>in</strong> Paar (L 1 , L 2 ) dargestellt (o<strong>der</strong>, da <strong>in</strong> Prolog das M<strong>in</strong>uszeichen Stand: 7. Januar 2013 174 M. Schmidt-Schauß & D. Sabel, Skript KI, WS 2012/13
5.3 Implementierung logischer Programmiersprachen: Prolog nur e<strong>in</strong>en Term konstruiert auch gleich als Differenz L 1 − L 2 ). Die eigentliche Liste ist dabei <strong>die</strong> Differenz von L 1 und L 2 , d.h. L 2 muss e<strong>in</strong> Suffix von L 1 se<strong>in</strong>. Z.B. kann <strong>die</strong> Liste [1,2,3] als Differenzliste ([1,2,3,4,5] - [4,5]) dargestellt werden. Offensichtlich ist <strong>die</strong>se Darstellung nicht e<strong>in</strong>deutig, vielmehr kann [1, 2, 3] durch jede Differenzliste <strong>der</strong> Form ([1,2,3|Y] - Y) dargestellt werden. Zum Programmieren eignet sich <strong>die</strong> letzte Darstellung (mit Y als nicht <strong>in</strong>stanziierte Variable), denn <strong>die</strong>se schafft gerade den Platz, um etwas an <strong>die</strong> Liste <strong>in</strong> konstanter Zeit anzuhängen. Genauer lässt sich dann append mit konstanter Laufzeit implementieren. Wir beschreiben zunächst <strong>die</strong> Idee und geben dann <strong>die</strong> Implementierung an. Seien <strong>die</strong> Listen L und M als Differenzlisten (L 1 − L 2 ) und (M 1 − M 2 ) gegeben. Wenn M 1 gerade gleich zu L 2 ist, dann entspricht das Anhängen von M an L gerade <strong>der</strong> Differenzliste (L 1 − M 2 ). Das folgende Bild verdeutlich <strong>die</strong>s L L 1 L 2 M M 1 M 2 L 1 M 2 L M Man sieht, L 2 muss gleich zu M 1 se<strong>in</strong>. An<strong>der</strong>enfalls funktioniert das Ane<strong>in</strong>an<strong>der</strong>hängen nicht. Die Implementierung <strong>in</strong> Prolog ist daher gerade: appendD(L1 - L2,M1 - M2,L1 - M2) :- L2 = M1. Diese kann noch vere<strong>in</strong>facht werden, sodass e<strong>in</strong> e<strong>in</strong>zelner Fakt ausreicht: append(L1 - L2,L2 - M2,L1 - M2). Die Auswertung e<strong>in</strong>er Anfrage append(Liste1 - Liste1Rest, Liste2 - Liste2, Ergebnis) ist offensichtlich <strong>in</strong> konstanter Zeit möglich, wenn Liste1Rest e<strong>in</strong>e Variable ist: In <strong>die</strong>sem Fall muss unifiziert werden: Liste1Rest = Liste2, was <strong>in</strong> konstanter Zeit möglich ist, wenn Liste1Rest e<strong>in</strong>e Variable ist. E<strong>in</strong> Beispielaufruf zeigt <strong>die</strong>s: ?- appendD([1,2,3|Y]-Y,[4,5,6|Z]-Z,R). Y = [4, 5, 6|Z], R = [1, 2, 3, 4, 5, 6|Z]-Z M. Schmidt-Schauß & D. Sabel, Skript KI, WS 2012/13 175 Stand: 7. Januar 2013
- Seite 1 und 2:
Einführung in die Methoden der Kü
- Seite 3 und 4:
Inhaltsverzeichnis 2.1.4 Prozeduren
- Seite 5 und 6:
Inhaltsverzeichnis 5.4.2.1 Lexikon
- Seite 7 und 8:
1 Einleitung 1.1 Themen und Literat
- Seite 9 und 10:
1.2 Was ist Künstliche Intelligenz
- Seite 11 und 12:
1.2 Was ist Künstliche Intelligenz
- Seite 13 und 14:
1.3 Philosophische Aspekte • Auto
- Seite 15 und 16:
1.3 Philosophische Aspekte durch Ge
- Seite 17 und 18:
1.4 KI-Paradigmen Die technische Hy
- Seite 19 und 20:
1.5 Bemerkungen zur Geschichte zur
- Seite 21 und 22:
1.6 Intelligente Agenten Agent Sens
- Seite 23 und 24:
1.6 Intelligente Agenten • Die ak
- Seite 25 und 26:
1.6 Intelligente Agenten Diese Besc
- Seite 27 und 28:
2 Suchverfahren 2.1 Algorithmische
- Seite 29 und 30:
2.1 Algorithmische Suche 1. Dame A-
- Seite 31 und 32:
2.1 Algorithmische Suche kommt, und
- Seite 33 und 34:
2.1 Algorithmische Suche 2.1.4 Proz
- Seite 35 und 36:
2.1 Algorithmische Suche Beachte, d
- Seite 37 und 38:
2.1 Algorithmische Suche bfs goal s
- Seite 39 und 40:
2.1 Algorithmische Suche Bemerkung
- Seite 41 und 42:
2.2 Informierte Suche, Heuristische
- Seite 43 und 44:
2.2 Informierte Suche, Heuristische
- Seite 45 und 46:
2.2 Informierte Suche, Heuristische
- Seite 47 und 48:
2.3 A ∗ -Algorithmus • Baum-Suc
- Seite 49 und 50:
2.3 A ∗ -Algorithmus Z S Rechnet
- Seite 51 und 52:
2.3 A ∗ -Algorithmus Dabei gehen
- Seite 53 und 54:
2.3 A ∗ -Algorithmus • Der Knot
- Seite 55 und 56:
2.3 A ∗ -Algorithmus dann nennt m
- Seite 57 und 58:
2.3 A ∗ -Algorithmus Beispiel 2.3
- Seite 59 und 60:
2.4 Suche in Spielbäumen 2.4 Suche
- Seite 61 und 62:
2.4 Suche in Spielbäumen Algorithm
- Seite 63 und 64:
2.4 Suche in Spielbäumen baum ab e
- Seite 65 und 66:
2.4 Suche in Spielbäumen 2.4.1 Alp
- Seite 67 und 68:
2.4 Suche in Spielbäumen Suche die
- Seite 69 und 70:
2.4 Suche in Spielbäumen Aktualisi
- Seite 71 und 72:
2.4 Suche in Spielbäumen Im Falle
- Seite 73 und 74:
2.4 Suche in Spielbäumen Allerding
- Seite 75 und 76:
2.5 Evolutionäre (Genetische) Algo
- Seite 77 und 78:
2.5 Evolutionäre (Genetische) Algo
- Seite 79 und 80:
2.5 Evolutionäre (Genetische) Algo
- Seite 81 und 82:
2.5 Evolutionäre (Genetische) Algo
- Seite 83 und 84:
2.5 Evolutionäre (Genetische) Algo
- Seite 85 und 86:
2.5 Evolutionäre (Genetische) Algo
- Seite 87 und 88:
3 Aussagenlogik In diesem Kapitel w
- Seite 89 und 90:
3.1 Syntax und Semantik der Aussage
- Seite 91 und 92:
3.2 Folgerungsbegriffe es keine bes
- Seite 93 und 94:
3.3 Tautologien und einige einfache
- Seite 95 und 96:
3.4 Normalformen sind, so dass Vert
- Seite 97 und 98:
3.5 Lineare CNF Beispiel 3.4.7. ((A
- Seite 99 und 100:
3.5 Lineare CNF Bemerkung 3.5.4. Se
- Seite 101 und 102:
3.6 Resolution für Aussagenlogik o
- Seite 103 und 104:
3.6 Resolution für Aussagenlogik T
- Seite 105 und 106:
3.7 DPLL-Verfahren 3.6.1.3 Subsumti
- Seite 107 und 108:
3.7 DPLL-Verfahren Das Entfernen de
- Seite 109 und 110:
3.7 DPLL-Verfahren Dies ergibt eine
- Seite 111 und 112:
3.7 DPLL-Verfahren höchstens einer
- Seite 113 und 114:
3.7 DPLL-Verfahren [[-4,-8,-15,5,-1
- Seite 115 und 116:
3.8 Modellierung von Problemen als
- Seite 117 und 118:
3.8 Modellierung von Problemen als
- Seite 119 und 120:
3.9 Tableaukalkül für Aussagenlog
- Seite 121 und 122:
3.9 Tableaukalkül für Aussagenlog
- Seite 123 und 124:
3.9 Tableaukalkül für Aussagenlog
- Seite 125 und 126:
3.9 Tableaukalkül für Aussagenlog
- Seite 127 und 128:
4 Prädikatenlogik 4.1 Syntax und S
- Seite 129 und 130: 4.1 Syntax und Semantik der Prädik
- Seite 131 und 132: 4.1 Syntax und Semantik der Prädik
- Seite 133 und 134: 4.1 Syntax und Semantik der Prädik
- Seite 135 und 136: 4.1 Syntax und Semantik der Prädik
- Seite 137 und 138: 4.1 Syntax und Semantik der Prädik
- Seite 139 und 140: 4.2 Resolution oder in Mengenschrei
- Seite 141 und 142: 4.2 Resolution Satz 4.2.3. Die Grun
- Seite 143 und 144: 4.2 Resolution Die Operation auf ei
- Seite 145 und 146: 4.2 Resolution 4.2.3 Unifikation Di
- Seite 147 und 148: 4.2 Resolution f(s 1 , . . . , s n
- Seite 149 und 150: 4.4 Löschregeln: Subsumtion, Tauto
- Seite 151 und 152: 4.4 Löschregeln: Subsumtion, Tauto
- Seite 153 und 154: 4.5 Optimierungen und Varianten der
- Seite 155 und 156: 4.5 Optimierungen und Varianten der
- Seite 157 und 158: 4.5 Optimierungen und Varianten der
- Seite 159 und 160: 5.1 Von der Resolution zum Logische
- Seite 161 und 162: 5.1 Von der Resolution zum Logische
- Seite 163 und 164: 5.2 Semantik von Hornklauselprogram
- Seite 165 und 166: 5.2 Semantik von Hornklauselprogram
- Seite 167 und 168: 5.3 Implementierung logischer Progr
- Seite 169 und 170: 5.3 Implementierung logischer Progr
- Seite 171 und 172: 5.3 Implementierung logischer Progr
- Seite 173 und 174: 5.3 Implementierung logischer Progr
- Seite 175 und 176: 5.3 Implementierung logischer Progr
- Seite 177 und 178: 5.3 Implementierung logischer Progr
- Seite 179: 5.3 Implementierung logischer Progr
- Seite 183 und 184: 5.3 Implementierung logischer Progr
- Seite 185 und 186: 5.3 Implementierung logischer Progr
- Seite 187 und 188: 5.3 Implementierung logischer Progr
- Seite 189 und 190: 5.4 Sprachverarbeitung und Parsen i
- Seite 191 und 192: 5.4 Sprachverarbeitung und Parsen i
- Seite 193 und 194: 5.4 Sprachverarbeitung und Parsen i
- Seite 195 und 196: 5.4 Sprachverarbeitung und Parsen i
- Seite 197 und 198: 5.4 Sprachverarbeitung und Parsen i
- Seite 199 und 200: 5.4 Sprachverarbeitung und Parsen i
- Seite 201 und 202: 6.1 Allens Zeitintervall-Logik A1:
- Seite 203 und 204: 6.1 Allens Zeitintervall-Logik A
- Seite 205 und 206: 6.2 Darstellung Allenscher Formeln
- Seite 207 und 208: 6.3 Der Allensche Kalkül ≺ ≻ d
- Seite 209 und 210: 6.3 Der Allensche Kalkül • A R A
- Seite 211 und 212: 6.4 Untersuchungen zum Kalkül 6.4
- Seite 213 und 214: 6.4 Untersuchungen zum Kalkül Algo
- Seite 215 und 216: 6.5 Unvollständigkeiten des Allens
- Seite 217 und 218: 6.6 Einge Analysen zur Implementier
- Seite 219 und 220: 6.7 Komplexität Sei eine Instanz g
- Seite 221 und 222: 6.8 Eine polynomielle und vollstän
- Seite 223 und 224: 7.1 Ursprünge Ein Beispiel ist das
- Seite 225 und 226: 7.2 Attributive Konzeptbeschreibung
- Seite 227 und 228: 7.2 Attributive Konzeptbeschreibung
- Seite 229 und 230: 7.2 Attributive Konzeptbeschreibung
- Seite 231 und 232:
7.2 Attributive Konzeptbeschreibung
- Seite 233 und 234:
7.2 Attributive Konzeptbeschreibung
- Seite 235 und 236:
7.3 T-Box und A-Box • SNOMED CT (
- Seite 237 und 238:
7.3 T-Box und A-Box Da diese T-Box
- Seite 239 und 240:
7.3 T-Box und A-Box Als Graph wobei
- Seite 241 und 242:
7.3 T-Box und A-Box kommt aus Huhn
- Seite 243 und 244:
7.3 T-Box und A-Box Dabei sind Pete
- Seite 245 und 246:
7.3 T-Box und A-Box wobei a i Indiv
- Seite 247 und 248:
7.4 Inferenzen in Beschreibungslogi
- Seite 249 und 250:
7.4 Inferenzen in Beschreibungslogi
- Seite 251 und 252:
7.4 Inferenzen in Beschreibungslogi
- Seite 253 und 254:
7.4 Inferenzen in Beschreibungslogi
- Seite 255 und 256:
7.4 Inferenzen in Beschreibungslogi
- Seite 257 und 258:
7.5 Erweiterungen, weitere Frageste
- Seite 259 und 260:
7.5 Erweiterungen, weitere Frageste
- Seite 261 und 262:
7.6 OWL - Die Web Ontology Language
- Seite 263 und 264:
7.6 OWL - Die Web Ontology Language
- Seite 265 und 266:
8.1 Einführung: Maschinelles Lerne
- Seite 267 und 268:
8.1 Einführung: Maschinelles Lerne
- Seite 269 und 270:
8.2 Wahrscheinlichkeit und Entropie
- Seite 271 und 272:
8.3 Lernen mit Entscheidungsbäumen
- Seite 273 und 274:
8.3 Lernen mit Entscheidungsbäumen
- Seite 275 und 276:
8.3 Lernen mit Entscheidungsbäumen
- Seite 277 und 278:
8.3 Lernen mit Entscheidungsbäumen
- Seite 279 und 280:
8.3 Lernen mit Entscheidungsbäumen
- Seite 281:
LITERATUR Russell, S. J. & Norvig,