13.07.2015 Aufrufe

Programmiersprachen 2 (SS 2013) - Prolog Wiederholung

Programmiersprachen 2 (SS 2013) - Prolog Wiederholung

Programmiersprachen 2 (SS 2013) - Prolog Wiederholung

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Programmiersprache2 (<strong>SS</strong> <strong>2013</strong>)Sebastian Krings,Michael Leuschel,John Witulski<strong>Programmiersprachen</strong> 2 (<strong>SS</strong> <strong>2013</strong>)<strong>Prolog</strong> <strong>Wiederholung</strong><strong>Prolog</strong><strong>Wiederholung</strong>Sebastian Krings, Michael Leuschel, John Witulski8. April <strong>2013</strong>


Motivation und Ausblick (1) : ”Warum <strong>Prolog</strong>?”Programmiersprache2 (<strong>SS</strong> <strong>2013</strong>)Sebastian Krings,Michael Leuschel,John Witulski<strong>Prolog</strong><strong>Wiederholung</strong>◮ Definite Clause Grammars (DCGs): für Parsing◮ Operator Deklarationen: für Parsing◮ Semantik-Regeln können oft einfach in <strong>Prolog</strong> übersetztwerde


<strong>Prolog</strong> <strong>Wiederholung</strong>Warmup : member/2Programmiersprache2 (<strong>SS</strong> <strong>2013</strong>)Sebastian Krings,Michael Leuschel,John Witulski<strong>Prolog</strong><strong>Wiederholung</strong>?− member ( 1 , [ 1 , 3 , 4 ] ) .y e s .


<strong>Prolog</strong> <strong>Wiederholung</strong>Warmup : member/2Programmiersprache2 (<strong>SS</strong> <strong>2013</strong>)Sebastian Krings,Michael Leuschel,John Witulski<strong>Prolog</strong><strong>Wiederholung</strong>?− member ( 1 , [ 1 , 3 , 4 ] ) .y e s .member (H , [ H| ) .member (E , [ |T]): − member (E , T ) .


<strong>Prolog</strong> <strong>Wiederholung</strong>Warmup : delete/3Programmiersprache2 (<strong>SS</strong> <strong>2013</strong>)Sebastian Krings,Michael Leuschel,John Witulski<strong>Prolog</strong><strong>Wiederholung</strong>?− d e l e t e ( 2 , [ 1 , 2 , 3 , 4 ] , L ) .L = [ 1 , 3 , 4 ] .


<strong>Prolog</strong> <strong>Wiederholung</strong>Warmup : delete/3Programmiersprache2 (<strong>SS</strong> <strong>2013</strong>)Sebastian Krings,Michael Leuschel,John Witulski<strong>Prolog</strong><strong>Wiederholung</strong>?− d e l e t e ( 2 , [ 1 , 2 , 3 , 4 ] , L ) .L = [ 1 , 3 , 4 ] .d e l e t e (H , [ H|T] ,T ) .d e l e t e (E , [ H|T ] , [ H| R]): − d e l e t e (E , T, R ) .


<strong>Prolog</strong> <strong>Wiederholung</strong>Warmup : append/3Programmiersprache2 (<strong>SS</strong> <strong>2013</strong>)Sebastian Krings,Michael Leuschel,John Witulski<strong>Prolog</strong><strong>Wiederholung</strong>?− append ( [ 1 , 2 ] , [ 3 , 4 ] , L ) .L = [ 1 , 2 , 3 , 4 ] .


<strong>Prolog</strong> <strong>Wiederholung</strong>Warmup : append/3Programmiersprache2 (<strong>SS</strong> <strong>2013</strong>)Sebastian Krings,Michael Leuschel,John Witulski<strong>Prolog</strong><strong>Wiederholung</strong>?− append ( [ 1 , 2 ] , [ 3 , 4 ] , L ) .L = [ 1 , 2 , 3 , 4 ] .append ( [ ] , X, X ) .append ( [H| X] , Y , [ H|XY ] ) :− append (X, Y,XY ) .Lösung ist in O(n)


<strong>Prolog</strong> <strong>Wiederholung</strong>Warmup : reverse/2Programmiersprache2 (<strong>SS</strong> <strong>2013</strong>)Sebastian Krings,Michael Leuschel,John Witulski<strong>Prolog</strong><strong>Wiederholung</strong>?− r e v e r s e ( [ 4 , 3 , 2 , 1 ] , L ) .L = [ 1 , 2 , 3 , 4 ] .


<strong>Prolog</strong> <strong>Wiederholung</strong>Warmup : reverse/2Programmiersprache2 (<strong>SS</strong> <strong>2013</strong>)Sebastian Krings,Michael Leuschel,John Witulski<strong>Prolog</strong><strong>Wiederholung</strong>?− r e v e r s e ( [ 4 , 3 , 2 , 1 ] , L ) .L = [ 1 , 2 , 3 , 4 ] .r e v e r s e ( [ ] , [ ] ) .r e v e r s e ( [H|T] , L ):− r e v e r s e (T, R) , append (R , [ H] , L ) .


<strong>Prolog</strong> <strong>Wiederholung</strong>Warmup : reverse/2 (Alternative)Programmiersprache2 (<strong>SS</strong> <strong>2013</strong>)Sebastian Krings,Michael Leuschel,John Witulski<strong>Prolog</strong><strong>Wiederholung</strong>?− r e v e r s e ( [ 4 , 3 , 2 , 1 ] , L ) .L = [ 1 , 2 , 3 , 4 ] .r e v e r s e (L , R): − r e v ( L , R , [ ] ) .r e v ( [H|T] , R , Acc ): − r e v (T, R , [ H| Acc ] ) .r e v ( [ ] , R , Acc ): − Acc=R .Lösung ist in O(n)


<strong>Prolog</strong> <strong>Wiederholung</strong>Warmup : permute/2Programmiersprache2 (<strong>SS</strong> <strong>2013</strong>)Sebastian Krings,Michael Leuschel,John Witulski<strong>Prolog</strong><strong>Wiederholung</strong>?− permute ( [ 1 , 2 , 3 ] , L ) .L = [ 1 , 2 , 3 ] ;L = [ 1 , 3 , 2 ] ;L = [ 2 , 1 , 3 ] ;L = [ 2 , 3 , 1 ] ;L = [ 3 , 1 , 2 ] ;L = [ 3 , 2 , 1 ] ;no .


<strong>Prolog</strong> <strong>Wiederholung</strong>Warmup : permute/2?− permute ( [ 1 , 2 , 3 ] , L ) .L = [ 1 , 2 , 3 ] ;L = [ 1 , 3 , 2 ] ;L = [ 2 , 1 , 3 ] ;L = [ 2 , 3 , 1 ] ;L = [ 3 , 1 , 2 ] ;L = [ 3 , 2 , 1 ] ;no .Programmiersprache2 (<strong>SS</strong> <strong>2013</strong>)Sebastian Krings,Michael Leuschel,John Witulski<strong>Prolog</strong><strong>Wiederholung</strong>permute ( [ ] , [ ] ) .permute (L , [ X | R ] ):− d e l e t e (X, L , L2 ) , permute ( L2 , R ) .


<strong>Prolog</strong> <strong>Wiederholung</strong> Grundlagen◮ Deklarativ, Nichtdeterminismus, Rekursion undBacktraking◮ Hornklauseln und Prädikatenlogik◮ Resolution und Unifikation◮ First Argument Indexing◮ Negation as Failure◮ Tail Recursion◮ Akkumulatoren◮ If-Then-Else: Test− > Then; Else◮ if/3 if(Test, Then, Else).Programmiersprache2 (<strong>SS</strong> <strong>2013</strong>)Sebastian Krings,Michael Leuschel,John Witulski<strong>Prolog</strong><strong>Wiederholung</strong>


<strong>Prolog</strong> <strong>Wiederholung</strong> ModuleProgrammiersprache2 (<strong>SS</strong> <strong>2013</strong>)Sebastian Krings,Michael Leuschel,John Witulski<strong>Prolog</strong><strong>Wiederholung</strong>◮ SWI: use module/1 oder use module/2◮ Hiermit können Module geladen werden(SWI)::− use module ( l i b r a r y ( l i s t s ) ) .


<strong>Prolog</strong> <strong>Wiederholung</strong> Systeme: Sicstus, SWIProgrammiersprache2 (<strong>SS</strong> <strong>2013</strong>)Sebastian Krings,Michael Leuschel,John Witulski<strong>Prolog</strong><strong>Wiederholung</strong>◮ yes/no vs. true/false◮ kommerziell vs. kostenlos◮ unterschiedliches Modulsystem◮ Unterschiede beim CLP◮ unterschiedliche Built-ins

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!