04 Prolog Ling
-
Upload
maxwell-fernandes -
Category
Documents
-
view
216 -
download
0
Transcript of 04 Prolog Ling
-
8/18/2019 04 Prolog Ling
1/93
Slides adaptados a partir de slides obtidos na Internet e de slides criados pelo Prof. WagnerTeixeira da Silva
1
Linguagem PrologConceitos Básicos
Turma A
Prof. Marcelo LadeiraCIC/UnB
-
8/18/2019 04 Prolog Ling
2/93
2
Estrutura de um Programa PrologTermos
Usados para construir programas eestruturas de dados
Tipos – constantes inteiros reaisátomos
– no so !ariá!eis podem ser !istos como strings constantes
– !ariá!eis – termos compostos
-
8/18/2019 04 Prolog Ling
3/93
"
Estrutura de um Programa PrologConstantes
Atomos e n#meros so definidos so$re os caracteres%A&B&..&'a&$&...&()&*&...&+caracteres especiais como , - / 0 1 % . 3 4
Atomos – strings de letras& d5gitos e o underscore& iniciando com MI678CULA
anna 932: nil – string de caracteres especiais
* . = @ # $
– ;tomos especiais %%11 .%. Tom? >930%?
6#meros – reais% ".*@ -).: *.2" *.2"@ – inteiros% 2" ::" -@2
-
8/18/2019 04 Prolog Ling
4/93
Por quê?@
Estrutura de um Programa Prologariá!eis
Iniciam com mai#scula ou underscore – seguido de DualDuer n#mero de letras& digitos ou
3F G32:3cHica G Barao red
– !ariá!el anJnima Kpense como no importaFum simples underscore
HascHildKG %- parentKG&3.
comportamento igual ou diferente NliOesKmar&3& liOesK3&mar.
liOesKmar&G& liOesKG&mar.
-
8/18/2019 04 Prolog Ling
5/93
:
Estrutura de um Programa PrologTermo Composto
;tomo seguido por uma seDQRncia de um ou maistermos& entre parenteses e separados por !5rgulaparentKpam&$o$.
deseSaKestudante&passarKlp&2)*"&2. – enore9 no uma funVo
– estrutura de dados Ktipo um registro
– E9emplo entradas !ia modo interpretador
assertKdataK*& no!em$ro& 2)*2.dataKia& no!em$ro& 2)*2.
ia 1 *
data
2012novembro17
-
8/18/2019 04 Prolog Ling
6/93
W
Estrutura de um Programa Prolog
Cláusulas Prolog – atos& regras ou consultas
Base de conHecimentos KBC
– fatos – regras
arDui!o te9to – carregado !ia consultKarDui!o-te9to.F
Prompt interpretador – consultas
BC modificada !iaassert Kinsere fato ou regraretractKelimina fato ou regra
-
8/18/2019 04 Prolog Ling
7/93
Estrutura de um Programa PrologefiniVo ormal
fato0 %%1 fa0. X fa significa fYrmula atJmicaregra0 %%1 fa)0 %- fa*0& ... & fa60.consulta0 %%1 fa*0& ... & fa60.
fa0 %%1 predicado0Ktermo*0& ... & termo60 Zop3prfi9ado0 termo*0 termo20 Ztermo*0 op3infi9ado0 t20 Ztermo*0 termo20 op3pYsfi9ado0
predicado0 %%1 átomo0termo0 %%1 constante0 Z !ariá!el0 Z t3composto0constante0 %%1 átomo0 Z inteiro0 Z n#mero3real0t3composto0 %%1 átomo0Klista3termos0lista3termos0 %%1 termo0Ztermo0&lista3termos0
-
8/18/2019 04 Prolog Ling
8/93[
ConstruV\es Básicas
atos Uni!ersais – atos com !ariá!eis uni!ersalmente Duantificadas. – unctor e átomo iniciam com letra min#scula.
Programa Prolog% atos e ]egrasmaisK)&G&G. X fato
maisKA&B&C %- C is A , B. X regra
!e(esK*&G&G. X fato
!e(esKA&B&C %- C is A B. X regra ariá!el
– Está associada a um indi!5duo no especificado& umaincYgnita de !alor #nico. ^ local a uma sentenVa.
-
8/18/2019 04 Prolog Ling
9/93+
Usando o Prolog
Para usar o Prolog !ocR precisa sa$er% – In!ocar o Prolog – 8air do Prolog%
' Halt. Kretorna ao cHamador
– Usar um editor para editar um programa – Carregar um programa
load ou load3filesKarDui!o. X fonte ou o$Seto consultKarDui!o. X fonte consultKuser. X carrega !ia teclado. im ' reconsultKarDui!o. X recarrega arDui!o
-
8/18/2019 04 Prolog Ling
10/93*)
Usando o Prolog
Capacidade especial Kde algumasimplementaV\es – Arma(enar o atual BC em arDui!o
sa!eKarDui!o. X sal!a a BC no arDui!o& o$Setosa!e3predicatesKpredicados& arDui!o.
X sal!a os predicados em arDui!o& cYdigo
– ]ecuperar o arDui!o sal!o restoreKarDui!o. X recupera o cYdigo o$Seto load ou load3filesKarDui!o. X o$Seto
-
8/18/2019 04 Prolog Ling
11/93**
ato
]elaVo !erdadeira entre termos& !ia predicado. – E9.% gostaKSoao& cer!eSa.
gostaKSoao& maria. ato uma cláusula sem nenHuma condiVo. 8inta9e de predicado
– functor0 Kt*&t2&...&tn.Predicado e9pressa uma relaVo entre termos.
Aridade – _uantidade de termos no predicado. E9pressa por functor0/aridade.
E9.% gosta/2 ou gosta/" – Predicados com mesmo functor podem ter diferentes aridades%
gostaKSoao& ler& li!ros.gostaKSoao&maria.
-
8/18/2019 04 Prolog Ling
12/93*2
]egra
ca$eVa %- corpo. – o operador %-F denominado pescoVo KnecO
meta %- sm*& sm2&...& smO – meta sY !erdadeira se suas su$metas tam$m o
forem. – para pro!ar Due meta !erdadeira& de!e-se pro!ar
antes Due suas su$metas tam$m so. – meta e su$metas so relaV\es predicati!as entre
termos. – termos nomeiam o$Setos do discurso.
-
8/18/2019 04 Prolog Ling
13/93*"
ConsultaMeio de ]ecuperar InformaV\es em Prolog
E9emplo%paiKSoao&mane.
paiKSoao& (e.paiKSoao& Duim.
paiKmane&maria.→ paiK(e& (efa.
paiK(e& rutH.
irmasKA&B %- paiKP&A&paiKP&B& A`11B.
a!oKA&6 %- paiKP&6& paiKA&P.tioKT&8 %- paiKP&8& irmasKP&T.
N- paiKP&(efa.P 1 (e
N- irmasKDuim&A.A 1 mane
A 1 (e false.
N- tioKT&(efa.T 1 mane T 1 Duim false.
N- a!oKA&6.A 1 Soao & 6 1 maria A 1 Soao & 6 1 (efa A 1 Soao & 6 1 rutH false.
-
8/18/2019 04 Prolog Ling
14/93*@
ConsultaMeio de ]ecuperar InformaV\es em Prolog
]esponder a uma consulta determinar se ela umaconseDQRncia do programa Ka9iomas da teoria.
Consulta e9istencial
N- maisK"&G&[. X e9iste um G , " 1 [NN- paiKP&Soao. X e9iste um P pai de SoaoN
Consulta conSunti!a e !ariá!eis coti(adasN paiKSoao& & paiK&6. X_uem so os netos de SooN
N tioKT&P& paiKP&maria. X _uem o tio a!Y de MariaN
-
8/18/2019 04 Prolog Ling
15/93*:
E9emplo%paiKSoao&mane.
paiKSoao& (e.
paiKSoao& Duim.paiKmane&maria.
→
paiK(e& (efa.
paiK(e& rutH.
irmasKA&B %- paiKP&A&paiKP&B& A`11B.
a!oKA&6 %- paiKP&6& paiKA&P.
tioKT&8 %- paiKP&8& irmasKP&T.
?- pai(P,zefa).
P = ze
?- pai(ze, F)
F = zefa ;
F=ruth;false.
?- tio(T,zefa).
T = ae ;
T = "ui ;
false.?- ao(,%).
= &oao , % = aria ;
= &oao , % = zefa ;
= &oao , % = ruth ;
false.
Predicados Bidirecionais
-
8/18/2019 04 Prolog Ling
16/93*W
Predicados Bidirecionais
concatK
-
8/18/2019 04 Prolog Ling
17/93*
]elaV\es
mem$roKG&
-
8/18/2019 04 Prolog Ling
18/93*[
Predicado Unidirecional
fatK)&*%-.fatK*&*%-.fatK6& %- 6* is 6 - *& fatK6*&*& is 6 *.
N- fatK)&. 1 *
N- fatK:&. 1 *2)
N- fatK:&*2).true.
N- fatK:&*)).false.N- fatK6&*2).E]]]% is/2% Arguments are not sufficientl instantiated
-
8/18/2019 04 Prolog Ling
19/93*+
Predicado Unidirecional
fi$K6& %- fi$9K6&*&*&& .fi$9K)&A&3&A.fi$9K6&A&B& %- 6* is 6 - *& AB is A , B& fi$9K6*&B&AB&.
N- fi$K)&. 1 *
N- fi$K*&*.true.
N- fi$K*)&. 1 [+
N- fi$K2)&.
1 *)+@WN- fi$K*))&. 1 :"*@[@@)*"[*)[@*)*.
N- fi$K6&*.6 1 )
N- fi$K6&[+.E]]]% Arguments are not sufficientl instantiated
-
8/18/2019 04 Prolog Ling
20/93
2)
Termos Kata o$Sects
-
8/18/2019 04 Prolog Ling
21/93
2*
Termo
6omeia entidades do uni!erso do discurso. termo0 %%1 simples0Ztermo composto0 simples0 %%1 constante0Z!ariá!el0 !ariá!el0 %%1 3 Zmai#scula0Z!ariá!el0letra0Z
!ariá!el0d5gito0Z !ariá!el03 !ariá!el
E9.% G 3 39 A!o ente *2 Pai3sangue 3$ – ^ uma incYgnita. esigna uma entidade at o momento
desconHecida.
-
8/18/2019 04 Prolog Ling
22/93
22
Termo6o-ariá!el
constante0 %%1 átomo0 Z n#mero0 – á o predicado atomic(Termo Due retorna true
Duando o Termo atJmico& no estruturado.
n#mero0 %%1 inteiro0 Z real0E9.% @& -*)& :."& ).*2"E-*)& -*."2e*)2 – pode ser reconHecido por number(X .
– operadores-relacionais0 %%1 Z 1 Z 1 Z 01 Z 0 – aritmtica0 %%1 aritmtica-genrica0 Z
aritmtica $itise0
-
8/18/2019 04 Prolog Ling
23/93
2"
Aritmtica em Prolog
E9emplosG is *,2.
G 1 ".
G is ceilingK 2.* .G 1 ".
G is ceilingK -2.*.G 1 -2.
-
8/18/2019 04 Prolog Ling
24/93
2@
peradores Aritmticos
6ome/aridade E9plicaVoa$s / * !alor a$soluto KI8, / 2 adiVo KI8acos / * arco cosseno
asin / * arco senoatan / * arco tangente KI8
/` / 2 and $it a $it KI8 ` / * $it complement KI8 / 2 sHift $it a $it para a esDuerda KI8
`/ / 2 or $it a $it KI800 / 2 sHift $it a $it para a direita KI8ceiling / * menor inteiro no menor Due KI8cos / * cosseno KI8cosH / * cosseno Hiper$Ylico
-
8/18/2019 04 Prolog Ling
25/93
2:
peradores Aritmticos
6ome/aridade E9plicaVoe / ) n#mero 2.*[2[. . .
e9p / * ee9p KI8
/ 2 e9ponenciaVo KI8float / * con!erso para float KI8
/ / 2 di!iso KI8
inde9 / " locali(a su$string em string
// / 2 di!iso inteira KI8
random / * gera n#mero aleatYrio inteiro
floor / * maior inteiro no maior Due
lengtH / * comprimento da string
-
8/18/2019 04 Prolog Ling
26/93
2W
peradores Aritmticos
6ame/arit E9planationlog / * logaritmo neperiano KI8log*) / * logaritmo decimalmod / 2 mYdulo de di!iso inteira KI8
/ 2 multiplicaVo KI8pi / ) n#mero ".*@*:+. . .rem / 2 resto de di!iso inteira KI8round / * inteiro mais prY9imo KI8sign / * retorna -*& ) ou ,* KI8
- / * in!erte o sinal KI8sin / * seno KI8sinH / * seno Hiper$YlicosDrt / * rai( Duadrada KI8
-
8/18/2019 04 Prolog Ling
27/93
2
peradores Aritmticos
6ame/arit E9planation- / 2 su$traVo KI8
tan / * tangente
tanH / * tangente Hiper$Ylica
truncate / * parte inteira de um real KI8
-
8/18/2019 04 Prolog Ling
28/93
2[
peradores Aritmticos
peradores aritmticos Due forVam Prolog aa!aliar uma e9presso como uma e9pressoaritmtica – perator / arit E9planation
/ 2 menor do Due KI8
0 / 2 maior do Due KI8
1 / 2 menor ou igual a KI8
01 / 2 maior ou igual KI81`1 / 2 diferente KI8
1%1 / 2 igual KI8
-
8/18/2019 04 Prolog Ling
29/93
2+
A!aliador de E9press\es
G is EG !ariá!el no ligada. E e9presso aritmtica.
E* op E2 – nde op ∈ & 1& 01& 0& 1%1& 1`1h –
E* e E2 so e9press\es aritmticas a!aliadas antes dacomparaVo.N- G 1 2& b 1 :& ] is sDrtKG2,b.
G 1 2. b 1 :.] 1 "
N- G 1 2& b 1 :& b - G 1`1 G.G 1 2.
b 1 :N- G 1 2& b 1 :& b - G b& riteKoO&nl.
oOG 1 2.
b 1 :
-
8/18/2019 04 Prolog Ling
30/93
")
A!aliador de E9press\esE9emplo
N- rai(es.Duer acHar as rai(es de a99,$9,c NKs/n
Informe coef a 0 *.Informe coef $ 0 *.
Informe coef c 0 -*2.9* 1 "92 1 @
Duer acHar as rai(es de a99,$9,c N Ks/nInforme coef a 0 *.Informe coef $ 0 *.
Informe coef c 0 *2.6ao tem rai(es reais
Duer acHar as rai(es de a99,$9,c N Ks/nfalse.
-
8/18/2019 04 Prolog Ling
31/93
"*
A!aliador de E9press\esE9emplo
rai(es%- sim6aoKDuer acHar as rai(es de a99,$9,c N&o$temcoefKA&B&C&
is B2-@AC& K 01 )& G* is K-B , sDrtK/K2A& G2 is K-B - sDrtK/K2A& nl&
riteK9* 1 & riteKG*& nl& riteK92 1 & riteKG2 )& nl& riteK6ao tem rai(es reais. & rai(es.sim6aoKMsg %- nl& riteKMsg& repeat&
riteK> Ks/n% &get3cHarK6& nl& mem$erK6&
-
8/18/2019 04 Prolog Ling
32/93
"2
;tomo
;tomos so nomes te9tuais usados para identificardados& predicados& operadores& mYdulos& arDui!os&
Sanelas& etc. Pode ser reconHecido pelo predicadoatomKG.
átomo0 %%1 átomo-alfa0Zátomo-sim$0Z string0 átomo-apostrofado0 Zátomo-especial0átomo-alfa0 %%1 letra-min#scula0 Z átomo-alfa0letra0Z
átomo-alfa0d5gito0 Z átomo-alfa0 3E9emplos.% a& a!o& amora& a2& a3& $ig3"2& 9Ma9& etc.
átomo-sim$0 %%1 caracter-sim$0Z atomo sim$0caracter-sim$0caracter-sim$0 %%1 jZkZXZZZ,Z-Z.Z/Z%ZZ1Z0ZZ`ZZZ 4 – E9emplos.% % ,, 00 -- .. -/
$s.% desde Due no seSa operador primiti!o
-
8/18/2019 04 Prolog Ling
33/93
""
;tomo
átomo-apostrofado0 %%1DualDuer seDQRncia de caracteres
– E9emplo% A!o *2" alo mundo a – Um caracter em si um átomo& e9emplo% 9
string0 %%1 DualDuer seDQRncia de caracteres
-
8/18/2019 04 Prolog Ling
34/93
"@
;tomo
átomo especial0 %%1 Z
-
8/18/2019 04 Prolog Ling
35/93
":
Termo Composto
termo-composto0 %%1 lista0 Zestrutura0
– Pode ser identificado por predicado%compoundKG
–
8u$tiposListasEstruturas
-
8/18/2019 04 Prolog Ling
36/93
"W
Lista
^ uma seDQRncia de termos entre colcHetes &separados por !5rgulas% – E9emplos%
-
8/18/2019 04 Prolog Ling
37/93
"
Lista
PredicadostaOeK)&3&
-
8/18/2019 04 Prolog Ling
38/93
"[
Lista
dropK)&Gs&Gs.
dropK3&
-
8/18/2019 04 Prolog Ling
39/93
"+
Estrutura
^ semelHante a um registro& com tipo& nome& ecampos. Com sinta9e geralnomeKt*&t2&...&tn&
nome/n E9emplo%
temK$ce& li!roKCapitaes de Areia& orge Amado
aKgoania& $rasilia& 2))pessoaKnomeK>oca Estrada?& idadeK@2& filHosKoao Sr?& >Amauri erreir?& >Milene erreira?=
-
8/18/2019 04 Prolog Ling
40/93
@)
peradores
moduleKif&
-
8/18/2019 04 Prolog Ling
41/93
@*
peradores
N- G 1 *2& se G1*) entao b1*.false.
N- G 1 *2& se G1*) entao b1* senao b 1 2.G1*2&
b12.
N- G 1 *)& se G1*) entao b1* senao b 1 2.
G1*)& b1*.
-
8/18/2019 04 Prolog Ling
42/93
@2
peradores
Especifier Class Associati!el
f9 prefi9 non-associati!e
f prefi9 rigHt-associati!e
9f9 infi9 non-associati!e 9f infi9 rigHt-associati!e
f9 infi9 left-associati!e
9f postfi9 non-associati!e f postfi9 left-associati!e
-
8/18/2019 04 Prolog Ling
43/93
@"
peradores
Priorit' peifier perator(s)
1+ f -
1+ f -
11 f' ;
1/ f' -0 1 f' ,
f' 23
4 f =, 2=
4 f ==, 2==, @5, @=5, @0, @0=
4 f is, ==, =2=, 5, =5, 0, 0= / 'f 3, -, 62, 26
7 'f *, 6, 66, re, o8, 55, 00
+ f **
+ f' 9
+ f' -, 2
-
8/18/2019 04 Prolog Ling
44/93
@@
peradores
Priorit 8pecifier peratorKs *))) 9f Z
+)) f not
)) 9f9 is3string
W)) f9
2)) f ,
-
8/18/2019 04 Prolog Ling
45/93
@:
Unificando com ariá!el
!ariá!el com !ariá!elG 1 b
G unifica com b e retorna true.
N- G 1 b.G 1 b
– passam a representar a mesma !ariá!el.
G `1 b
retorna sempre false.N- G `1 b.false.
-
8/18/2019 04 Prolog Ling
46/93
@W
Unificando com ariá!el
ariá!el em dados estruturados& HáunificaVo se as estruturas forem isomYrficase se Hou!er uma su$stituiVo so$re as
!ariá!eis Due torne as estruturas idRnticas.N- G 1 arcoKa&$&*).
G 1 arcoKa&$&*)
N- li!roKautorKtei9eira& Soao& Titulo 1li!roKAutor&tituloKAmor e Pa(.
Titulo 1 tituloKAmor e Pa( &
Autor 1 autorKtei9eira&Soao
-
8/18/2019 04 Prolog Ling
47/93
@
Unificando com ariá!el
N-
-
8/18/2019 04 Prolog Ling
48/93
@[
Unificando Constantes
T* 1 T2Unificam se ti!erem !alores idRnticos e foremestruturalmente isomYrficos.
N- *) 1 *).true.N- arcoKa&$&*) 1 arcoKa&$&*).
true.
N- agner 1 agner.true.
N- a $ 1 a $.true.
-
8/18/2019 04 Prolog Ling
49/93
@+
ComparaVo de Termos Ar$itrários8egundo rdem Padro
Com os operadores 11/2 KidRnticos& `11/2 &01/2& 0/2 & /2& 1/2
Tipo ComparaVo – !ariá!eis endereVos – n#meros !alor numrico
– átomos !alor A8CII
-
8/18/2019 04 Prolog Ling
50/93
:)
rdem Padro dos Termos
Com os operadores 11/2 KidRnticos& `11 &01/2& 0/2 & /2& 1/2 – 8egue a ordem
!ariá!eis flutuantes inteiros átomos strings listas termos-compostos
– 8e os termos so do mesmo tipo& ento uma
comparaVo de tipoF feita.
-
8/18/2019 04 Prolog Ling
51/93
:*
rdem Padro dos TermosE9emplo% Dsort
separaKB&
-
8/18/2019 04 Prolog Ling
52/93
:2
rdem Padro dos TermosE9emplo% Dsort
N- DsortK
-
8/18/2019 04 Prolog Ling
53/93
:"
Base de ConHecimentos
→ li!roKautorKernando A.& tituloKrientacao a $Setos.li!roKautorKPedro ]e(ende& tituloKCriptografia em ]edes.li!roKautorKLui( rota& tituloK8eguranca em B.li!roKautorKMarcelo Ladeira& tituloK]edes Baesianas.li!roKautorKernando A.& tituloK]edes de Computadores.li!roKautorKMaria Emilia& tituloKenoma umano.li!roKautorKagner Tei9eira& tituloKuncoes de Crenca.li!roKautorKAlui(io Arcela& tituloKComputacao 8onica.li!roKautorKomero Picolo& tituloKComputacao rafica.li!roKautorKMaria de atima& tituloKIA na Educacao.
li!roKautorKMarco Aurelio& tituloKIA na Educacao de Adultos.li!roKautorKLi eigang& tituloK]edes 6eurais e o Tempo.li!roKautorKrancisco Carta9o& tituloKEspecificacoes ormais.artigoKautorKernando A.& tituloKDuem usa rientacao a $Setos.artigoKautorK>agner Tei9eira& tituloKsoma ortogonal.artigoKautorKAntonio 6uno& tituloKfiltro rafico.
-
8/18/2019 04 Prolog Ling
54/93
:@
Consulta so$re a Base de Li!ros
N- li!roKG&b.G 1 autorKernando A. &
b 1 tituloKrientacao a $Setos G 1 autorKPedro ]e(ende &
b 1 tituloKCriptografia em ]edes G 1 autorKLui( rota &
b 1 tituloK8eguranca em B G 1 autorKMarcelo Ladeira &
b 1 tituloK]edes BaesianasN- li!roKautorKernando A.&b. b 1 tituloKrientacao a $Setos b 1 tituloK]edes de Computadoresfalse.
• : u poteiro
apota8o para o
orrete fato a o feita ,
o poteiro atualiza8o
para refletir o oo fato
"ue ate8e a soliita>o.
ua8o o poteiro heAaao fi 8a o orrete
falha.
-
8/18/2019 04 Prolog Ling
55/93
::
Consulta so$re uma $ase
BacOtracOing KretrocessoN- artigoKautorKG&3.
G 1 ernando A.
G 1 >agner Tei9eira G 1 Antonio 6uno
N- artigoKautorKG&3& riteKG& nl& fail.ernando A.
agner Tei9eiraAntonio 6uno
false.
-
8/18/2019 04 Prolog Ling
56/93
:W
Incluindo Cláusulas na BC
assertaKclausula.Inclui uma cláusula na BC& no in5cio das cláusulascom mesmo nome.
N- dnamicKpai/2.N- assertaKpaiKSoao& maria.
true.
N- listingKpai/2.
%- dnamicKpai/2.paiK Soao& maria .
true.
-
8/18/2019 04 Prolog Ling
57/93
:
Incluindo Cláusulas na BC
assert(Kcláusula - inclui no final dascláusulas de mesmo nome.N- assert(K KirmaoKA&B %- paiKP&A& paiKP&B& A `11 B .
true.
N- listingKirmao/2.%- dnamic irmao/2.
irmaoKA& C %-
paiKB& A& paiKB& C&
A`11C.
true.
Observa !e a regra precisa estar
entre par"ntesis por conta da
prioridade do operador #$%2 sermaior !e 1000.
-
8/18/2019 04 Prolog Ling
58/93
call/1 chama o argumento como uma meta a ser avaliada.:[
Uni!
perador 1../2F transforma termo em lista – Apenas um dos seus operandos pode ser !ariá!el – E9emplos
N- structKHello& G 1.. L.L 1
-
8/18/2019 04 Prolog Ling
59/93
:+
UnificaVo
^ o processo Due torna dois termos idRnticos& aindaDue para isso se faVa su$stituiVo de !ariá!eis emtermos por outros termos. –
o termo t* unifica com o termo t se e9iste uma su$stituiVoθ
* Due torna t* identico a t Krepresentada por t ≡ t*θ* seSa t& t* e t2 termos& t uma instqncia comum de t* e t2
se∃
θ* e θ2 su$stituiV\es tais Due t ≡ t*θ* e t ≡ t2θ2.
E9emplo
t*1 concatK
-
8/18/2019 04 Prolog Ling
60/93
W)
UnificaVo
Unificador um unificador de dois termos t e t* umasu$stituiVo θ Due torna t ≡ t* /θ Kt e t* ficamidRnticos.
]egras da unificaVoa !ariá!eis unificam com !ariá!eis
G 1 b.
$ !ariá!eis unificam com termos
G 1 gostaKSoao&ler.c termos unificam com termos& se eles casam paiKP& 1 paiKSoao& (e com θ1KP/Soao& /(e. 2 1 2& Soao 1 >Soao?& etc.
Continua ...
-
8/18/2019 04 Prolog Ling
61/93
W*
UnificaVo
]egras da unificaVod Um termo no-atJmico unifica com outro se Hou!er
correspondRncia estrutural.li!roKautorK8n&6&tituloK>Clarissa? 1li!roKautorK>erissimo?&?Erico?& T.
com θ 1 K8n/?erissimo?& 6/?Erico?& T/tituloK>Clarissa?
E9ecuVoN- li!roKautorK8n&6&tituloKClarissa 1
li!roKautorKerissimo&Erico& T.
8n 1 erissimo &6 1 Erico &
T 1 tituloKClarissa
-
8/18/2019 04 Prolog Ling
62/93
Pro!a por ]efutaVo
Moti!aVoBC ⇒ P ⇔ ¬¬KBC ⇒ P
⇔ ¬¬K¬BC ∨ P
⇔ ¬KBC ∧ ¬P⇔ ¬KBC ∧ ¬P ∨ False
⇔ KBC ∧ ¬P ⇒ False
W2
-
8/18/2019 04 Prolog Ling
63/93
W"
]esoluVo
^ uma regra de inferRncia
m1& '1$ '1
n
m '1
p...& p& p...&& p$#r
s...&&s$#...p& p...&& p$#r
ent(o)&*p'% !nificador oonde
&ser&& pliteraisosSe'a)
&)
1
ii
+
¬=
∨
∨¬∨
θ
bC A
C B B Aa
-
8/18/2019 04 Prolog Ling
64/93
W@
]esoluVo
uas cláusulas de orn so resol!idas emuma no!a cláusula se uma delas conti!er umpredicado negado Due corresponda a umpredicado no-negado na outra cláusula. – Tautologia
A no!a cláusula elimina o termo decorrespondRncia e fica dispon5!el para usoem resposta a pergunta. – As !ariá!eis so su$stitu5das por constantes
associadas de maneira consistente
-
8/18/2019 04 Prolog Ling
65/93
E9emplo de ]esoluVo por
come Kurso& pei9e.come Kurso& raposa. X predicado bináriocome Kca!alo& mato.animal Kurso.animal Kpei9e. X predicado unárioanimal Kraposa.presaKG %- comeKb&G& animalKG.presaKG %- comeKb&G& animalKG. X regra
Exemplo extraído de slides apresentados pela Profª oseluce de !arias "unha/#!"$W:
-
8/18/2019 04 Prolog Ling
66/93
]egra de InferRncia% ]esoluVo
$ser!e Due a regra$ser!e Due a regra KCláusula de ornKCláusula de ornpresaKG %- comeKb&G& animalKGpresaKG %- comeKb&G& animalKG
CorrespondeCorresponde a ff a ff
99
KcomeKb&G animalKG -0 presaKGKcomeKb&G animalKG -0 presaKG
CorrespondeCorresponde a cláusulaa cláusula¬KcomeKb&G animalKG ! presaKGKcomeKb&G animalKG ! presaKG¬comeKb&G !comeKb&G ! ¬animalKG ! presaKGanimalKG ! presaKG
WW
-
8/18/2019 04 Prolog Ling
67/93
]egra de InferRncia% ]esoluVo
N- presaKG.
– Prolog procura& na BC& por uma regra com o predicadopresaKG como o conseDQente
–
BBusca outras cláusulas Due possam ser resol!idas com aregra – a( as su$stituiV\es das !ariá!eis na cláusula regraa( as su$stituiV\es das !ariá!eis na cláusula regra
*.¬comeKb&G !comeKb&G ! ¬animalKG ! presaKGanimalKG ! presaKG
2. comeKurso&pei9e2. comeKurso&pei9e
".". ¬animalKpei9e ! presaKpei9eanimalKpei9e ! presaKpei9e resol!ente de * e 2hresol!ente de * e 2h@. animal Kpei9e@. animal Kpei9e:. presa Kpei9e:. presa Kpei9e resol!ente de " e @hresol!ente de " e @h
W
-
8/18/2019 04 Prolog Ling
68/93
W[
Controle do Programa
Controla como o programa pode ser e9ecutado. – rdem das cláusulas no programa – rdem das su$metas dentro de cada cláusula
– PesDuisa em profundidade Ktenta satisfa(er umasu$meta antes de seguir para a prY9ima
– ]etrocede& tentando uma outra alternati!a de regraou instqncia de !alores para o mesmo predicado.
– prolog disp\es de tcnicas como repeat - fail& loops& recurso e cut.
-
8/18/2019 04 Prolog Ling
69/93
W+
rdem das Cláusulas no Programa
ependendo da ordem das cláusulas noprograma& ele pode entrar em loop infinito& ouapresentar um melHor ou pior desempenHo.
Loop infinito.fatK6& %- 6* is 6-*& fatK6*& *& is 6 *.
fatK)&*. –
Assim& a ordem influi para tornar o programadecid5!el
-
8/18/2019 04 Prolog Ling
70/93
%&&'/( ) uma outra forma de representa*+o do predicado concat/,.)
rdem das Cláusulas no Programa
esempenHoa ,,K
-
8/18/2019 04 Prolog Ling
71/93
*
appendK
-
8/18/2019 04 Prolog Ling
72/93
2
1. 33(BGsD,Hs,BGIsD) - 33(s,Hs,Is).
+. 33(BD,Hs,Hs). 1
1
1
1 2
2
2
2
1
2
+
,
-
7
/
- 33(s,Es, B1,+,CD)
- 33(s1,Hs1, B+,CD)
- 33(s+,Hs+, BCD)
- 33(sC,HsC,BD)
61, Is6B+,CD,
s6B1Gs1D
Es6Hs1
6+, Is6BCD,
s16B+Gs+D
Hs16Hs+
6C, Is6BD,
s+6BCGsCD
Hs+6HsC
fala
s=B1,+,CD,
Es=BD
s=B1,+D,
Es=BCD
s=B1D,Es=B+,CD
s=BD,
Es=B1,+,CD
3 45 6%s3
sC6BD,
HsC6Hs=BD
s+6BD,
Hs+6Hs=BCD
s16BD,
Hs16Hs=B+,CD
s6BD,
Es6Hs=B1,+,CD
;r!ore de ]efutaVo
-
8/18/2019 04 Prolog Ling
73/93
"
rdem das su$metas na cláusula
tioKT&8 %- irmaoKP&T& paiKP&8. – T pode ter !ários irmos& mas 8 sY tem um pai.
Assim&
tioKT&8 %- paiKP&8& irmaoKP&T.^ mais eficiente& pois no pro!oca retrocesso& aotentar $uscar outro P irmo de T Due possa ser paide 8.
-
8/18/2019 04 Prolog Ling
74/93
@
]etrocesso K$acOtracOing
Meta – 8ucede& se todas as su$metas no corpo sucedem. – alHa& se ao menos uma su$meta no corpo falHa. – _uando Há falHa& o Prolog tenta satisfa(er a meta
com outras alternati!as& $uscando um casamentoa partir de onde a meta ficou.Esse processo de tentar satisfa(er todas as su$metas&
antes de dá-la por falHa o $acOtracOing
-
8/18/2019 04 Prolog Ling
75/93
-ote que o repeat repete o que se segue a ele at) o final da clusula0:
]etrocesso
sim6aoKMsg %- nl& riteKMsg& repeat& riteK Ks/n & get3cHarK6& nl&
mem$erK6&8s6n& &
mem$erK6&8s.N- sim6aoK>_uer Sogar primeiroN .
_uer Sogar primeiroN Ks/nt
Ks/nn
false.
-
8/18/2019 04 Prolog Ling
76/93
W
peradores e Predicados de controle
& K!irgula - conSunVo. – Todas as su$metas ligadas precisam ser
!erdadeiras para a meta da cláusula ser
!erdadeira.irmasKA&B %- paiKP&A& paiKP&B& A`11B. Kponto e !5rgula - isSunVo.
– Ao menos um dos disSuntos de!e suceder paraDue a meta da cláusula suceda.
irmasKA&B %- K paiKP&A& paiKP&BmaeKM&A& maeKM&B & A`11B.
notKP %- P& & fail true. X sucede se P falHa.
-
8/18/2019 04 Prolog Ling
77/93
peradores e Predicados de controle
6o padro para todo prologiftHen KP&_ %- P& & _. X falHa so$ retrocesso
iftHenKP&_ %- .
iftHenelseKP&_&] %- P& & _. X falHa so$ retrocessoiftHenelseKP&_&] %- notKP& & ].
caseK
-
8/18/2019 04 Prolog Ling
78/93
[
peradores e Predicados de controle
- cut. 8empre !erdadeiro. 8o$ retrocesso& opredicado Due o contm falHa.
Predicado com cut
sim6aoKMsg %- nl& riteKMsg& repeat& riteKs/n N&get3cHarK6& nl& mem$erK6&8s6n& & mem$erK6&8s.
N- sim6aoKContinuaN .ContinuaN Ks/n
r Ks/nn
false.
-
8/18/2019 04 Prolog Ling
79/93
+
peradores e Predicados de controle
P -0 _ X 8e P ento _.G 1 2 -0 b is G,"& b -0 ' is b,@.
G 1 2 &
b 1 : &' 1 +
N- G 1 2 -0 b is G,"& b 0 -0 ' is b,@.
false.
-
8/18/2019 04 Prolog Ling
80/93
[)
repeat - fail
predicado repeat forVa um programa agerar soluV\es alternati!as !ia retrocesso. – E9emplos%
X cidades e !i(inHos.cidades %- repeat& nl& riteK cidade Kultima 1 fim 0&
readKG& assert(KcidadeKG& G1 fim& .
!i(inHos %- repeat& cidadeKG&
K G 1 fim&
nl& riteKInforme os !i(inHos de &
riteKG& readKbs& assert(K!i(inHosKG&bs& fail.
-
8/18/2019 04 Prolog Ling
81/93
[*
]esultado da e9ecuVo
N- cidades.cidade
go.cidade
$s$.
cidade$H.cidade
fim.true.
N- !i(inHos.Informe os !i(inHos de goZ
-
8/18/2019 04 Prolog Ling
82/93
[2
8ituaVo no d$
? listing%2vi3inhos/, cidade/14'./5 vi3inhos/, 5/
vi3inhos% go 26s6cuia6a6h4 '.
vi3inhos% 6s6 2go6h4 '.
vi3inhos% 6h 26s6go4 '.
/5 cidade/1 5/
cidade% go '.
cidade% 6s6 '.cidade% 6h '.
cidade% fim '.
true.
8
-
8/18/2019 04 Prolog Ling
83/93
["
Cut - fail& cut e espaVo de $usca
cut usado em geral para manuseare9ceV\es e restringir o espaVo de $usca.
-
8/18/2019 04 Prolog Ling
84/93
[@
Cut - fail
elegi!elKG %- analfa$etoKG& & fail.elegi!elKG %- cidadaoKG&idadeKG&b& b 01 *[.cidadaoKSoao.cidadaoKsusana.
cidadaoKro$erta.cidadaoKricardo.cidadaoKmarcelo.idadeKSoao& "W.idadeKsusana& *:.idadeKro$erta& "*.idadeKricardo& 22.idadeKmarcelo& *.analfa$etoKSoao.
?- eleAiel(&oao).
false. J
-
8/18/2019 04 Prolog Ling
85/93
[:
Cut - fail
elegi!elKG %- cidadaoKG&analfa$etoKG& fail.
elegi!elKG %- cidadaoKG¬K analfa$etoKG&idadeKG&b& b 01 *[.
cidadaoKSoao.cidadaoKsusana.cidadaoKro$erta.cidadaoKricardo.cidadaoKmarcelo.idadeKSoao& "W.
idadeKsusana& *:.idadeKro$erta& "*.idadeKricardo& 22.idadeKmarcelo& *.analfa$etoKSoao.
?- eleAiel().
= ro
-
8/18/2019 04 Prolog Ling
86/93
[W
Cut - fail
aK* %- riteKum& nl.aKG %- dKG&
riteKdois& nl.aK" %- riteKtres& nl.dK2a.
dK2$.N- aK6.um6 1 * dois6 1 2a
dois6 1 2$ tres6 1 "
N-
a(1) - Orite(u), l.
a() - 8(),!, Orite(8ois), l.
a(C) - Orite(tres), l.
8(+a).
8(+o para ter ua
elhor opreeso 8o ut
-
8/18/2019 04 Prolog Ling
87/93
[
cut e espaVo de $usca
#$ a*9)1
2+
, -
12
,-
+%61
%6
6Q+aQ6Q+
-
8/18/2019 04 Prolog Ling
88/93
[[
Cut e espaVo de $usca
espaVo de $usca de uma consulta o conSunto de todas asrespostas poss5!eis.
Cut corte usado para redu(ir o espaVo de $usca& instruindo ointerpretador a no retroceder so$re os predicados Due
precedem o cut. – es!antagens sacrifica a clare(a do programa causa disruptura $rusca na e9ecuVo do programa.
– Efeito so$re consultas compostasZN- aKG& $Kb& & cKG&b&'o$tenHa um #nico !alor para G e b e a!alie cKG&b&'.
– Efeito so$re cláusulas de um mesmo predicado se uma das cláusulas tem um corte no seu corpo& e o prolog o alcanVa&
ento ele no fa( retrocesso so$re outras cláusulas do conSunto.KE9.% ,,& e aK6 com ár!ore de refutaVo. Estude o caso de ,, comcorte& so$re a ár!ore de refutaVo.
-
8/18/2019 04 Prolog Ling
89/93
[+
Parando depois da *a resposta
cidadaoKSoao.cidadaoKsusana.cidadaoKro$erta.cidadaoKricardo.cidadaoKmarcelo.idadeKSoao& "W.idadeKsusana& *:.idadeKro$erta& "*.
idadeKricardo& 22.idadeKmarcelo& *.analfa$etoKSoao.
?- i8a8e(&oao, H), !.
H = CS
-
8/18/2019 04 Prolog Ling
90/93
+)
Corte na su$meta
tem]KG %- HomemKG&idadeKG&b&&b0*[.
mulHerKsusana.mulHerKro$erta.
HomemKSoao.HomemKricardo.HomemKmarcelo.idadeKSoao& "W.idadeKsusana& *:.
idadeKro$erta& "*.idadeKricardo& 22.idadeKmarcelo& *.
?- teWX().
= &oao
?-
o 8e
-
8/18/2019 04 Prolog Ling
91/93
+*
Isolando o efeito do corte
tem]KG %- HomemKG&idadeKG&b& b0*[.
mulHerKsusana.mulHerKro$erta.
HomemKSoao.HomemKricardo.HomemKmarcelo.idadeKSoao& "W %- .idadeKsusana& *: %- .
idadeKro$erta& "* %- .idadeKricardo& 22 %- .idadeKmarcelo& * %- .
?- teWX().
= &oao ;
= riar8o ;
false.o
-
8/18/2019 04 Prolog Ling
92/93
+2
Isolando o efeito do corte
tem]KG %- HomemKG&soumaKidadeKG&b& b0*[.
mulHerKsusana.mulHerKro$erta.
HomemKSoao.HomemKricardo.HomemKmarcelo.idadeKSoao& "W.idadeKsusana& *:.idadeKro$erta& "*.idadeKricardo& 22.idadeKmarcelo& *.soumaKP %- P& .
:$ tem; 5 + =
6 5 s!sana &
> 5 1- =
6 5 roberta &
> 5 +1 =6 5 ricardo &
> 5 22 =
6 5 marcelo &
> 5 17
:$
-
8/18/2019 04 Prolog Ling
93/93
Isolando o efeito do corte
predicado soumaKP enseSa um usoadeDuado do cut& Duando a pretenso eliminar $uscas desnecessárias& ou restringir
a uma sY resposta. – 6o precisa usar cut diretamente na consulta – 6o precisa usar cut so$re cláusulas na $ase. – soumaKP falHa so$ retrocesso& mas no impende
Due !ariá!eis em predicados anteriores& nomesmo corpo& seSam re!aloradas. – ^ assim uma soluVo mais limpa para o cut.