Baixe o app para aproveitar ainda mais
Prévia do material em texto
Introduc¸a˜o a Linguagem Prolog Universidade de Bras´ılia Rodrigo Bonifa´cio 12 de maio de 2011 Rodrigo Bonifa´cio Introduc¸a˜o a Linguagem Prolog Essa parte do curso e´ baseada no material “Artificial Intelligence Programming in Prolog”, desenvolvido por Tim Smith, Escola de Informa´tica, Universidade de Edingburgh. Rodrigo Bonifa´cio Introduc¸a˜o a Linguagem Prolog O que e´ Prolog? PROgramation et Logique Rodrigo Bonifa´cio Introduc¸a˜o a Linguagem Prolog O que e´ Prolog? PROgramation et Logique Padra˜o ISO, cuja sintaxe inspirada na versa˜o de Edinburgh Linguagem declarativa, com alto n´ıvel de abstrac¸a˜o, pertencente ao “paradigma lo´gico” e baseada em Cla´usulas Horn. Rodrigo Bonifa´cio Introduc¸a˜o a Linguagem Prolog Aplicabilidade Processamento de linguagens e grama´ticas Representac¸a˜o e infereˆncia de conhecimento Unificac¸a˜o e casamento de padro˜es . . . Rodrigo Bonifa´cio Introduc¸a˜o a Linguagem Prolog Aplicabilidade Processamento de linguagens e grama´ticas Representac¸a˜o e infereˆncia de conhecimento Unificac¸a˜o e casamento de padro˜es . . . Na˜o muito recomendada para Representar estruturas de dados complexas Entrada e sa´ıda e GUI Rodrigo Bonifa´cio Introduc¸a˜o a Linguagem Prolog Software a ser usado Interpretador SWIProlog (http://www.swi-prolog.org/) Qualquer editor de texto (mas recomendo o emacs) Rodrigo Bonifa´cio Introduc¸a˜o a Linguagem Prolog Software a ser usado Interpretador SWIProlog (http://www.swi-prolog.org/) Qualquer editor de texto (mas recomendo o emacs) Instale o SWIProlog o quanto antes Rodrigo Bonifa´cio Introduc¸a˜o a Linguagem Prolog Software a ser usado Interpretador SWIProlog (http://www.swi-prolog.org/) Qualquer editor de texto (mas recomendo o emacs) Instale o SWIProlog o quanto antes, implemente os exemplos e exerc´ıcios para tirar du´vidas. Rodrigo Bonifa´cio Introduc¸a˜o a Linguagem Prolog Um programa e´ uma base de dados contendo fatos e regras. Rodrigo Bonifa´cio Introduc¸a˜o a Linguagem Prolog Elementos ba´sicos (1/2) Fatos: sentenc¸as sempre verdadeiras Exemplos: Java e´ uma linguage OO Haskell e´ uma linguagem funcional Prolog e´ uma linguagem lo´gica C++ e´ uma linguagem ancestral de Java Rodrigo Bonifa´cio Introduc¸a˜o a Linguagem Prolog Elementos ba´sicos (1/2) Fatos: sentenc¸as sempre verdadeiras Exemplos: Java e´ uma linguage OO Haskell e´ uma linguagem funcional Prolog e´ uma linguagem lo´gica C++ e´ uma linguagem ancestral de Java Em Prolog paradigma ( java , o r i e n t a d aOb j e t o s ) . paradigma ( h a s k e l l , f u n c i o n a l ) . paradigma ( p ro log , l o g i c o ) . a n c e s t r a l ( java , cpp ) . Rodrigo Bonifa´cio Introduc¸a˜o a Linguagem Prolog Elementos ba´sicos (2/2) Regras: estabelecem relac¸o˜es entre sentenc¸as Exemplos: Toda linguagem funcional ou lo´gica e´ declarativa. A ancestral da ancestral de uma linguagem X, tambe´m e´ ancestral de X. Rodrigo Bonifa´cio Introduc¸a˜o a Linguagem Prolog Elementos ba´sicos (2/2) Regras: estabelecem relac¸o˜es entre sentenc¸as Exemplos: Toda linguagem funcional ou lo´gica e´ declarativa. A ancestral da ancestral de uma linguagem X, tambe´m e´ ancestral de X. Em Prolog: d e c l a r a t i v o (X) :− paradigma (X, l o g i c o ) ; paradigma (X, f u n c i o n a l ) . a n c e s t r a l (X, Z) :− a n c e s t r a l (X,Y) , a n c e s t r a l (Y, Z ) . Rodrigo Bonifa´cio Introduc¸a˜o a Linguagem Prolog Para executar um programa, realizamos consultas a base de dados. Rodrigo Bonifa´cio Introduc¸a˜o a Linguagem Prolog Para executar um programa, realizamos consultas a base de dados. Quais sa˜o as linguagens declarativas? Quais sa˜o as linguagens ancestrais de Java? Quais sa˜o as linguagens h´ıbridas? Rodrigo Bonifa´cio Introduc¸a˜o a Linguagem Prolog Para executar um programa, realizamos consultas a base de dados. Quais sa˜o as linguagens declarativas? Quais sa˜o as linguagens ancestrais de Java? Quais sa˜o as linguagens h´ıbridas? Ou em Prolog declarativa(X). ancestral(java, X). hibrida(X). Rodrigo Bonifa´cio Introduc¸a˜o a Linguagem Prolog Usando Prolog (1/2) Edite um arquivo com extensa˜o “.pl” contendo a base de dados de fatos e regras. Rodrigo Bonifa´cio Introduc¸a˜o a Linguagem Prolog Usando Prolog (1/2) Edite um arquivo com extensa˜o “.pl” contendo a base de dados de fatos e regras. Inicie o interpretador SWIProlog, digitando no terminal swipl, ou da forma que voceˆ achar mais conveniente. Rodrigo Bonifa´cio Introduc¸a˜o a Linguagem Prolog Usando Prolog (1/2) Edite um arquivo com extensa˜o “.pl” contendo a base de dados de fatos e regras. Inicie o interpretador SWIProlog, digitando no terminal swipl, ou da forma que voceˆ achar mais conveniente. bash-3.2$ swipl % library(swi_hooks) compiled into pce_swi_hooks 0.00 sec, 3,928 bytes Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 5.10.2) Copyright (c) 1990-2010 University of Amsterdam, VU Amsterdam SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. Please visit http://www.swi-prolog.org for details. For help, use ?- help(Topic). or ?- apropos(Word). ?- Rodrigo Bonifa´cio Introduc¸a˜o a Linguagem Prolog Usando Prolog (1/2) No interpretador, carregue o arquivo “.pl” usando o comando [caminho/nome arquivo] Rodrigo Bonifa´cio Introduc¸a˜o a Linguagem Prolog Usando Prolog (1/2) No interpretador, carregue o arquivo “.pl” usando o comando [caminho/nome arquivo] ?- [exemplos/linguagens]. % exemplos/linguagens compiled 0.00 sec, 4,208 bytes true. ?- Rodrigo Bonifa´cio Introduc¸a˜o a Linguagem Prolog Usando Prolog (1/2) No interpretador, carregue o arquivo “.pl” usando o comando [caminho/nome arquivo] ?- [exemplos/linguagens]. % exemplos/linguagens compiled 0.00 sec, 4,208 bytes true. ?- Neste momento, e´ poss´ıvel realizar consultas a base de fatos e regras definida no arquivo “.pl” ?- hibrida(X). X = scala ; false ?- Rodrigo Bonifa´cio Introduc¸a˜o a Linguagem Prolog Demonstrac¸a˜o de uso do SWIPL Rodrigo Bonifa´cio Introduc¸a˜o a Linguagem Prolog Exemplo: f i l m e ( c a e s a l u g u e l , d i r ( t a r a n t i n o ) , a t o r ( k e i t e l ) , gen ( su spen s e ) , 1 9 9 2 ) . f i l m e ( l a r a n j a mec an i c a , d i r ( k ub r i c k ) , a t o r ( mcDowell ) , gen ( su spen s e ) , 1 9 7 1 ) . f i l m e ( o i l um inado , d i r ( k ub r i c k ) , a t o r ( n i c h o l s o n ) , gen ( t e r r o r ) , 1980 ) . f i l m e ( o g r i t o , d i r ( s h im i zu ) , a t o r ( k e i t e l ) , gen ( t e r r o r ) , 2004 ) . Rodrigo Bonifa´cio Introduc¸a˜o a Linguagem Prolog Exemplo: f i l m e ( c a e s a l u g u e l , d i r ( t a r a n t i n o ) , a t o r ( k e i t e l ) , gen ( su spen s e ) , 1 9 9 2 ) . f i l m e ( l a r a n j a mec an i c a , d i r ( k ub r i c k ) , a t o r ( mcDowell ) , gen ( su spen s e ) , 1 9 7 1 ) . f i l m e ( o i l um inado , d i r ( k ub r i c k ) , a t o r ( n i c h o l s o n ) , gen ( t e r r o r ) , 1980 ) . f i l m e ( o g r i t o , d i r ( s h im i zu ) , a t o r ( k e i t e l ) , gen ( t e r r o r ) , 2004 ) . Quais as respostas para: filme(caes aluguel, X). filme(caes aluguel, dir(X), , , ). filme(X, dir(kubrick), , gen(Y), 1980). Traduza para Prolog: “Quem dirigiu o filme O Grito” Rodrigo Bonifa´cio Introduc¸a˜o a Linguagem Prolog
Compartilhar