Você está na página 1de 23

UNIVERSIDADE DO VALE DO RIO DOS SINOS DISCIPLINA: PARADIGMAS DE PROGRAMAO

! !           ) 9 % 8 7 6 5 4 $ 4 4 3 2 1 1 @ A A 0 ' ) ( ' & % $ # "

SANDRA CORTINOVI

PROLOG uma linguagem de programao simples, embora poderosa, fundamentada na lgica simblica. Foi desenvolvida na Universidade de Marselha, Frana, com o intuito de ser uma ferramenta prtica para programao em lgica. De forma semelhante a LISP, PROLOG uma linguagem interativa projetada primeiramente para processamento de dados simblicos. Ambas as linguagens so ferramentas para desenvolvimento de aplicaes da rea de Inteligncia Artificial, estando baseadas em sistemas matemticos formais: LISP, baseada no clculo lambda, tipicamente usada para definio de funes; PROLOG, baseada em um subconjunto poderoso da lgica clssica, usada para definio de relaes. A linguagem LISP pura, de fato, pode ser vista como uma especializao da linguagem PROLOG. A linguagem PROLOG baseada em um provador de teoremas para clusulas de Horn. A estratgia especfica utilizada uma forma restrita de resoluo linear de entrada.

PROLOG uma linguagem de programao usada para solucionar problemas que envolvem objetos e relaes entre objetos. Programas em PROLOG consistem de: declarao de alguns fatos sobre objetos e seus relacionamentos; definio de regras sobre os objetos e seus relacionamentos; resposta a consultas sobre objetos e seus relacionamentos. A programao em PROLOG permite ignorar a maioria dos detalhes referentes a como um programa executado. A linguagem PROLOG foi projetada de forma a permitir que o utilizador fornea comandos sobre alguma coisa que seja logicamente verdadeira de modo que o interpretador PROLOG possa tirar concluses; no requer que se especifique como um programa deve ser executado, mas que se especifique com o que as solues de um problema se parecem. PROLOG provm de PROgramao em LGica. Em lgica, define-se, a grosso modo, um teorema e se pesquisa fatos e regras para verificar a validade do teorema. De forma anloga lgica, PROLOG usado para expressar fatos e relacionamentos entre esses fatos, e para inferir solues para problemas. Um fato expressa alguma verdade sobre um relacionamento. Por exemplo, SCRATES HOMEM. um fato que define que o indivduo SCRATES pertence classe HOMEM. Uma regra, por outro lado, expressa um relacionamento entre fatos. Um relacionamento em uma regra verdadeiro se os outros relacionamentos nessa regra tambm o so. Por exemplo, SE ALGUM UM HOMEM, ESSE ALGUM MORTAL. uma regra que define que se um indivduo pertence classe HOMEM, esse indivduo tambm pertence classe MORTAL. Uma inferncia possvel a partir desse fato e dessa regra que SCRATES MORTAL. Em PROLOG, esse fato e essa regra so expressos da seguinte forma: homem(socrates). mortal(X):-homem(X). e a consulta: SCRATES UM MORTAL expressa e respondida da forma que segue: ?-mortal(socrates). yes

1 de 23

Linguagem Prolog

PROLOG uma linguagem de programao orientada para o processamento de smbolos. Smbolos no permitem operaes convencionais; s permitem montar estruturas de smbolos. Os objetos manipulados pelos programas PROLOG so chamados termos. Termos podem ser tomos ou estruturas.
p h i h g f e d e d e d

tomos podem ser constantes ou variveis. Constantes podem ser: identificadores que iniciam por letras minsculas. Exemplos: brasil, mt1, get_item cadeias de caracteres entre apstrofes. Exemplos: Socrates, 4 andar nmeros inteiros. Exemplos: 146, 20 Variveis assemelham-se a identificadores, exceto que comeam com uma letra maiscula ou um smbolo sublinha ( _ ). Uma varivel pode ser vista como representando algum objeto que no se capaz de nomear. Em linguagens convencionais uma varivel representa uma clula de memria. varivel + atribuio de valor varivel
r q q s

Em PROLOG uma varivel associada a um objeto. varivel + ligao de objeto varivel varivel objeto

A vantagem da ligao sobre a atribuio est no fato de que qualquer tipo de objeto pode ser ligado a uma mesma varivel; no se tem restries s ligaes, pois uma varivel no possui estrutura interna. X = 5 ligao X 5 Valores associados varivel X

ligao

Em PROLOG a ligao de uma varivel a um termo (objeto) chamada substituio. Diz-se que a varivel substituda pelo termo, pois onde a varivel usada tudo se passa como se o termo estivesse sendo usado. Portanto, uma varivel pode estar sendo usada, simultaneamente, em vrios pontos de um programa, mesmo que no esteja ligada a qualquer objeto. Quando essa ligao estabelecida, ela repercute em todos os pontos em que a varivel est sendo usada, tudo se passando a partir da como se o objeto ligado varivel estivesse sendo usado naqueles pontos desde o incio.

2 de 23
Sandra Cortinovi

varivel valor

Linguagem Prolog

Uma estrutura um objeto que possui organizao interna. Em PROLOG estruturas so representadas por smbolo funcional(lista de argumentos) onde smbolo funcional um identificador e lista de argumentos uma lista de termos que pode ser vazia; isto , um tomo um caso particular de estrutura. Exemplos: livro(gabriela,autor(amado,jorge)) cidade(sao-paulo, pais(brasil)) Em PROLOG, os termos estruturados so vistos como rvores. Por exemplo, a estrutura sentena(sujeito(joao), predicado(verbo,comeu), objeto(pipoca))) equivale seguinte rvore: sentena

Usa-se o termo base de dados quando se tem um conjunto de fatos e regras, chamados genericamente de clusulas, que so usados para solucionar um problema especfico.

Um fato uma relao entre objetos da forma relao(objeto1, ..., objeton). Os nomes dos objetos que encontram-se entre parnteses so chamados argumentos. O nome da relao chamado predicado. Exemplo de relao: naturalidade(joao,cidade(sao-paulo,pais(brasil))). naturalidade(jean,cidade(paris,pais(frana))). naturalidade(john,cidade(londres,pais(inglaterra))). Uma relao um conjunto de n-uplas de objetos. Cada comando PROLOG chamado clusula. Os comandos que definem uma base de dados so chamados fatos porque representam o fato de que uma determinada n-upla pertence a uma certa relao.

y h

x e d

sujeito

predicado

joao

verbo

objeto

comeu

pipoca

3 de 23
Sandra Cortinovi

Linguagem Prolog

Uma vez criada, uma base de dados PROLOG pode ser consultada. Uma consulta uma pergunta ao sistema, o qual deve respond-la conforme a natureza da pergunta. Se ela for fechada, isto , no contiver variveis, deve ser entendida como uma solicitao para verificar a veracidade de um fato, ou seja, se uma determinada n-upla pertence realmente a uma dada relao. Neste caso a resposta do sistema deve ser da forma sim/no. Se a consulta for aberta, isto , se contiver variveis, deve ser entendida como uma solicitao para listar todos os valores que, substitudos nas variveis, tornam um fato verdadeiro fazem sua correspondente n-upla pertencer a uma dada relao. Neste caso, a resposta do sistema deve ser uma lista de substituies da forma varivel = valor Uma consulta a uma base de dados PROLOG feita na forma ?- predicado(argumentos). Por exemplo, dada a base de dados naturalidade(joao,cidade(sao-paulo,pais(brasil))). naturalidade(jean,cidade(paris,pais(frana))). naturalidade(john,cidade(londres,pais(inglaterra))). possui(andre,livro(gabriela,autor(amado,jorge))). possui(andre,livro(zoeira,autor(verissimo,luis))). possui(julia,livro(o-continente,autor(verissimo,erico))). empregado(nr(1027),nome(silva,jose),dep(vendas)). empregado(nr(1028),nome(silva,julio),dep(trocas)). observe a forma como o PROLOG responde s seguintes consultas. ?- naturalidade(jean,X). X=cidade(paris,pais(frana)) ?-naturalidade(X,cidade(Y,pais(Z))). X=joao Y=sao paulo Z=brasil ?-; X=jean Y=paris Z=frana ?-; X=john Y=londres Z=inglaterra ?-; no ?-possui(andre,livro(zoeira,autor(verissimo,luis))). yes ?-possui(X,livro(Y,autor(verissimo,Z))). X=andre Y=zoeira Z=luis ?-; X=julia Y=o-continente Z=erico ?-empregado(nr(1028),N,D). N=(silva,julio) D=dep(trocas) A resposta a uma consulta fechada um valor lgico que indica se uma determinada nupla pertence relao. A resposta a uma consulta aberta um valor lgico que indica se h pelo menos uma n-upla que se enquadra no esquema definido pela consulta; em caso afirmativo, a resposta vem acompanhada da extenso do subconjunto da relao o qual satisfaz a consulta. H, portanto, para cada consulta, uma extenso de resposta possvel. Isso leva naturalmente idia de interseco de extenses para obteno de respostas caracterizadas por meio de diversas condies, isto , obteno de elementos que pertenam a diversas relaes simultaneamente.

Observao: O smbolo ; significa ou. Quando de uma consulta, o PROLOG busca o primeiro fato da base de dados que a satisfaz, fornecendo a resposta. Um ; faz com que o PROLOG pesquise na base, a partir da ltima soluo encontrada, um prximo fato que satisfaa a consulta. No o encontrando responde no.

4 de 23
Sandra Cortinovi

Linguagem Prolog

Exemplo: /* base de dados */ amigo(antonio,andre). amigo(joao,jose). amigo(maria,julia). vizinho(andre,pedro). vizinho(julia,rui). vizinho(julia,pedro). /* consulta */ ?-amigo(X,Y),vizinho(Y,pedro). X=antonio Y=andre ; X=maria Y=julia ; no

Chama-se substituio de varivel operao de associao de uma varivel a um termo qualquer. Uma varivel est livre se no est associada a nenhum termo. Uma varivel s pode ser substituda por um termo quando estiver livre. Uma varivel substituda por outra varivel fica substituda pelo objeto associado a essa ltima. Se a segunda varivel estiver livre, diz-se que ambas ficam substitudas, uma pela outra. Neste caso, as duas continuam livres aps a substituio. Uma varivel substituda s pode sofrer nova substituio aps ter sido liberada do termo a que estava associada. A unificao a operao pela qual dois termos so tornados nicos, isto , com o mesmo valor. O valor de um termo a sua estrutura simblica. Dois termos possuem o mesmo valor quando possuem a mesma estrutura simblica. A unificao definida do seguinte modo: 1. Dois tomos constantes so unificveis se so iguais. 2. Uma varivel livre unificvel com qualquer termo - a unificao se faz pela substituio da varivel pelo termo. 3. Uma varivel associada a um objeto unificvel com um termo se o objeto for unificvel com o termo. 4. Um termo estruturado unificvel com outro termo estruturado se a cada componente de um corresponder um componente do outro, e os componentes correspondentes forem unificveis. O resultado da unificao um termo que substitui os dois termos iniciais.

5 de 23
Sandra Cortinovi

Linguagem Prolog

Em PROLOG, regras so usadas quando se deseja dizer que um fato depende de uma conjuno de outros fatos. Uma regra um comando geral sobre objetos e seus relacionamentos, na forma cabea :- corpo. Em PROLOG, uma regra consiste em uma cabea e um corpo, conectados pelo smbolo :-, o qual significa se. A cabea de uma regra descreve o fato que esta pretende definir. O corpo descreve a conjuno de objetivos que devem ser satisfeitos, um aps o outro. Em geral um predicado ser definido por uma mistura de fatos e regras. Estas so chamadas clusulas de um predicado. Usa-se o termo clusula quando se refere a um fato ou uma regra. Cabe ressaltar que uma regra uma definio geral por permitir que uma varivel represente um objeto diferente para cada uso da regra. O PROLOG deve ser capaz de dizer se uma varivel X qualquer representa objetos distintos em clusulas distintas - isto resolvido atravs do conhecimento do escopo de uma varivel. Por exemplo, dada a base de dados: /* fatos */ fica-em(sao-paulo,brasil). fica-em(paris,frana). fica-em(grenoble,frana). nasceu-em(joao,sao-paulo). nasceu-em(jean,paris). nasceu-em(louis,grenoble) /* regra */ patria-de(X,Y):-nasceu-em(X,Z),fica-em(Z,Y). as seguintes consultas tm como respostas: ?-patria-de(louis,P). P=frana ?-patria-de(joao,brasil). yes A regra estabelece que patria-de uma relao dependente das relaes nasceu-em e fica-em, e mostra como os tens da relao patria-de se relacionam com os tens das outras relaes. Por exemplo, dada a base de dados amigo(antonio,andre). amigo(andre,juliana). amigo(juliana,andre). amigo(juliana,jose). amigo(X,Y):-amigo(Y,X). amigo(X,Z):-amigo(X,Y),amigo(Y,Z). observa-se que com esta definio da relao amigo existe uma regra definindo-a como reflexiva e outra definindo-a como transitiva. Por exemplo, na base de dados mae(antonio,maria). mae(pedro,maria). mae(jose,ana). pai(antonio,carlos). pai(pedro,jose). pai(eva,jose). irmao(X,Y):-pai(X,Z),pai(Y,Z). irmao(X,Y):-mae(X,Z),mae(Y,Z). observa-se que a relao irmao definida por duas clusulas.

6 de 23
Sandra Cortinovi

Linguagem Prolog

A mquina que executa os programas escritos em PROLOG pe em funcionamento um mecanismo de inferncia lgica para procurar a resposta a qualquer pergunta que for colocada. O mecanismo usado pela mquina PROLOG baseia-se no princpio da resoluo, que um mtodo de demonstrao automtico de teoremas. A mquina PROLOG normalmente uma mquina virtual simulada por um programa executado em um computador clssico: um programa emulador da mquina PROLOG. Durante sua execuo, o emulador da mquina PROLOG cria uma rvore que representa o espao de procura do problema em questo. A tcnica de procura usada a de pesquisa em profundidade simples. O diagrama da pgina seguinte representa o funcionamento de um emulador para uma mquina PROLOG.

Quando de uma consulta, a mquina PROLOG pesquisa a base de dados procurando clusulas que se unifiquem com a consulta. Dois fatos se unificam se seus predicados so os mesmos (escritos da mesma forma), e se seus argumentos correspondentes so os mesmos. PROLOG responder sim se localizar um fato que se unifique com a consulta; se o fato consultado no existir na base de dados, PROLOG responder no. Quando uma consulta contm variveis, a mquina PROLOG realiza um pesquisa em todas as clusulas para localizar os objetos que as variveis podem representar. Quando PROLOG responde consulta ?-gosta(joao,X). referente base de dados gosta(joao,flores). gosta(joao,maria). gosta(paulo,maria). a varivel X inicialmente no est instanciada, isto , no representa nenhum objeto. O mecanismo de inferncia da linguagem PROLOG pesquisa a base de dados em busca de uma clusula que se unifique com a consulta; se uma varivel no instanciada aparecer como argumento, a mquina PROLOG permitir varivel associar-se com qualquer outro argumento na mesma posio da clusula. Nesse caso especfico, PROLOG pesquisa por qualquer clusula cujo cabealho tenha como predicado gosta com primeiro argumento joao; o segundo argumento desse predicado pode ser qualquer coisa, pois a consulta contm uma varivel no instanciada como segundo argumento. Quando uma clusula dessas encontrada, a varivel X passa a representar o segundo argumento do predicado, qualquer que seja esse. A mquina PROLOG pesquisa a base de dados na ordem em que esta foi criada, sendo o fato gosta(joao,flores) localizado primeiro. A varivel X ento representar o objeto flores (diz-se que X est instanciada para flores), e PROLOG ento marca o ponto na base de dados onde a unificao foi detectada. Desde que a mquina PROLOG localize um fato que se unifique com a consulta, ela responde com o(s) objetos(s) que a(s) varivel(is) representa(m); no exemplo anterior, somente a varivel X associada ao objeto flores. Ento o PROLOG espera por instrues adicionais: se o usurio transmitir um ponto-e-vrgula (;), o PROLOG retoma a pesquisa a partir do ponto na base de dados onde localizou a resposta anterior; se o usurio no transmitir um ponto-e-vrgula, que significa que est satisfeito com apenas uma resposta, o PROLOG interrompe a pesquisa. Quando o PROLOG inicia a pesquisa a partir de uma marca de reincio, ao invs do incio da base de dados, diz-se que o PROLOG est tentando re-satisfazer a consulta. O smbolo vrgula (,) corresponde conjuno lgica, servindo para separar qualquer nmero de objetivos diferentes que devem ser satisfeitos a fim de responder a uma consulta. Quando uma seqncia de objetivos separados por vrgulas fornecida, o PROLOG tenta satisfazer cada objetivo, e todos os objetivos devem ser satisfeitos para que a seqncia seja satisfeita.

7 de 23
Sandra Cortinovi

Linguagem Prolog

INCIO

ETAPA INICIAL Existe um objetivo a ser satisfeito expresso pela consulta. No existem restries. Sim

Existem objetivos a serem satisfeitos? No Imprimir resposta expressa pelas restries

Comear pela primeira regra

Estamos na etapa inicial? No Sim

Passar prxima etapa

Voltar etapa anterior

FIM

J experimentamos todas as regras?

Sim No

Substituir o primeiro objetivo pelo membro direito da regra e ajustar s novas restries

No A regra aplicvel. Podemos satisfazer a equao membro esquerdo = primeiro objetivo a ser satisfeito?

Passar prxima regra

Sim

8 de 23
Sandra Cortinovi

Linguagem Prolog

Por exemplo, na consulta ?-gosta(paulo,X),gosta(joao,X). o PROLOG procede da seguinte forma: Se o primeiro objetivo for localizado na base de dados, ento o PROLOG marca a clusula que o satisfez e tenta satisfazer o segundo objetivo. Se o segundo objetivo for satisfeito, marca o ponto onde foi localizado e obtm uma soluo que satisfaz ambos os objetivos. Se, entretanto, o segundo objetivo no for satisfeito, o PROLOG tentar re-satisfazer o primeiro objetivo, iniciando a pesquisa a partir da marca de parada desse objetivo. Nesse caso o PROLOG responder: X=maria Se o usurio solicitar outra possibilidade de resposta, enviando ; o PROLOG responder no, significando que no existem outros fatos que satisfaam a conjuno de objetivos expressa na consulta. importante ressaltar que: cada objetivo tem sua prpria marca de reincio; o PROLOG pesquisa toda a base de dados para cada objetivo; se acontecer de uma clusula da base de dados satisfazer um objetivo, o PROLOG marcar a localizao dessa clusula na base de dados para o caso de ter de resatisfazer esse objetivo; e quando um objetivo for re-satisfeito, o PROLOG iniciar a pesquisa a partir da marca de reincio do prprio objetivo, ao invs do incio da base de dados.

Retrocesso o nome dado ao comportamento do mecanismo de inferncia da linguagem PROLOG de tentar repetidamente satisfazer e re-satisfazer objetivos numa conjuno de objetivos. Pode-se visualizar uma conjuno de objetivos como tendo os objetivos arranjados da esquerda para a direita, separados por vrgula. Cada objetivo pode ter um vizinho esquerda e um vizinho direita, exceto o objetivo na extrema esquerda (somente um vizinho direita) e o objetivo na extrema direita (somente um vizinho esquerda). Quando manipula uma conjuno de objetivos, o PROLOG tenta satisfazer cada objetivo analisando-os da esquerda para a direita. Se um objetivo satisfeito, o PROLOG deixa uma marca na clusula (ponto da base de dados) que o satisfez. Deve-se entender essa marca como um apontador do objetivo para a clusula onde se encontra a soluo. Alm disso, quaisquer variveis previamente no instanciada tornam-se instanciadas. O PROLOG tenta ento satisfazer seu objetivo vizinho direita, partindo do inicio da base de dados. Sempre que a tentativa de satisfao de um objetivo falhar, ou seja, no se possa detectar uma clusula que se unifique com ele, o PROLOG volta atrs, torna no instanciadas as variveis instanciadas pelo objetivo que falhou e tenta re-satisfazer o objetivo anterior (vizinho esquerda), iniciando a pesquisa a partir da marca de reincio deste. Se cada objetivo, aps ter ingressado no seu vizinho direita, no puder ser resatisfeito, ento as falhas causaro gradualmente o retorno a objetivos esquerda a medida em cada objetivo falhar. Se o primeiro objetivo da seqncia de objetivos (objetivo na extrema esquerda da conjuno de objetivos) falhar, ento a conjuno inteira falha, isto , no pode ser satisfeita. Em suma, retrocesso consiste em revisar o que tem sido feito, tentando re-satisfazer os objetivos atravs de formas alternativas para satisfaz-los. Alm disso, se o usurio no est satisfeito com apenas uma resposta, pode iniciar um retrocesso digitando um ponto-e-vrgula quando o PROLOG informar a soluo.

9 de 23
Sandra Cortinovi

Linguagem Prolog

Dada a seguinte base de dados mae(antonio, maria). /* fato1 */ mae(pedro, maria). /* fato2 */ mae(jose, ana). /* fato 3 */ pai(antonio,carlos). /* fato 4 */ pai(pedro,jose). /* fato5 */ pai(paulo,jose). /* fato6 */ irmao(X,Y):-pai(X,Z), pai(Y,Z), X\==Y. /* regra1 */ irmao(X,Y):-mae(X,Z), mae(Y,Z), X\==Y. /* regra2 */ a soluo para a consulta ?-irmao(antonio,I) obtida atravs do processo explicado a seguir. O PROLOG unifica o predicado irmao(antonio,I) contido na consulta com a cabea da regra1, na forma irmao(antonio,I):-pai(antonio,Z), pai(I,Z), antonio \== I. Satisfazendo o primeiro objetivo dessa regra, o PROLOG encontra o fato4: pai(antonio,carlos), associando o valor carlos varivel Z. Neste momento a regra1 vista da seguinte forma: irmao(antonio,I):-pai(antonio,carlos),pai(I,carlos),antonio\==I. O PROLOG pesquisa novamente desde o incio da base de dados buscando um fato que satisfaa o objetivo pai(I,carlos). Encontra o fato4: pai(antonio,carlos), associando o valor antonio varivel I. A regra fica com a seguinte forma: irmao(antonio,I):-pai(antonio,carlos),pai(I,carlos),antonio\==antonio. Ao tentar satisfazer o terceiro e ltimo objetivo da regra (X\==I), ocorre uma falha, pois antonio no diferente de antonio. Com isso, o PROLOG tenta re-satisfazer o objetivo anterior pai(I,carlos), pesquisando a base de dados a partir da posio imediatamente posterior ao fato4. No detectando nenhum fato que se unifique com esse predicado, tenta re-satisfazer o primeiro objetivo pai(antonio,Z), pesquisando a partir da posio imediatamente posterior ao fato4. Novamente ocorre uma falha, fazendo com que a regra1 falhe. O PROLOG busca ento, a partir da posio seguinte regra1, um predicado que se unifique com o da consulta irmao(antonio,I), localizando a regra2, que assume a forma irmao(antonio,I):-mae(antonio,Z),mae(I,Z),antonio\==I. Satisfazendo o primeiro objetivo me(antnio,Z) o PROLOG localiza o fato1, associando a varivel Z maria. O prximo objetivo a ser satisfeito mae(I,maria). O fato1 detectado, assumindo I o valor antonio. Ao ser avaliado o terceiro objetivo est na forma antonio\==antonio, que retorna o valor falso. Neste ponto ocorre um retrocesso, sendo que o PROLOG busca re-satisfazer o objetivo mae(I,maria), detectando o fato2 e associando o valor pedro varivel I. O terceiro ojetivo novamente testado com a forma antnio\==pedro, devolvendo valor verdadeiro. A regra2 satisfeita e a resposta fornecida pelo PROLOG I=pedro. Observaes: numa base de dados PROLOG o que estiver contido entre os smbolos /* e */ considerado comentrio; e o smbolo \== um predicado de comparao que significa diferente: c T1\==T2 a comparao T1 diferente de T2.

Como mostrado pelo exemplo anterior, a linguagem PROLOG seqencial: objetivos so pesquisados seqencialmente, da esquerda para a direita, durante a verificao de uma regra; clusulas so pesquisadas seqencialmente, do incio para o fim, durante a verificao de um objetivo. PROLOG possui dois mecanismos principais de controle do processo de pesquisa: um mecanismo para controlar a pesquisa vertical (entre clusulas) e outro para ontrolar a pesquisa horizontal (entre objetivos). Os dois mecanismos interagem fortemente, formando diversos esquemas de controle de ativao das clusulas.

10 de 23
Sandra Cortinovi

Linguagem Prolog

O mecanismo que controla a pesquisa vertical fundamenta-se na operao de unificao dos argumentos de uma chamada com os argumentos de uma clusula a ser ativada. Pode ser visto como uma forma generalizada de ativao de procedimentos: ativao por unificao de padres. Dado o predicado amigo(X,Y) definido da seguinte forma amigo(antonio,andre). amigo(andre,juliana). amigo(antonio,maria). amigo(juliana,jose). amigo(X,Y):-amigo(Y,X). a ativao de uma entre as cinco clusulas, quando de uma chamada, se faz em funo do padro (forma) dos argumentos: a forma do par de argumentos que determina qual clusula ser ativada. Uma chamada do tipo ?-amigo(X,Y) produzir como primeira resposta X=antonio Y=andre Entretanto, se a base de dados desse exemplo estivesse arranjada da seguinte forma amigo(X,Y):-amigo(Y,X). amigo(antonio,andre). amigo(andre,juliana). amigo(antonio,maria). amigo(juliana,jose). a mesma consulta ?-amigo(X,Y) faria com que o PROLOG ingressasse numa recurso incontrolvel. Um problema fundamental em definies recursivas a recurso esquerda. Isto surge quando uma regra causa a chamada de um objetivo que essencialmente equivalente ao objetivo que levou ao uso da regra. No se assume que, apenas porque se forneceu todos os fatos e regras relevantes, o PROLOG sempre as encontrar. Deve-se ter em mente quando se escreve programas em PROLOG como o PROLOG pesquisa atravs da base de dados e quais variveis sero instanciadas quando uma de suas regras usada. De uma forma geral, uma boa idia colocar fatos antes de regras sempre que possvel. Algumas vezes as regras em uma determinada ordem sero teis se forem usadas para resolver objetivos gerados de um modo, mas no se os objetivos forem gerados de outro. Considerando-se a seguinte definio do predicado fat, que fornece o fatorial de um nmero fat(N,F) :- N1 is N-1, fat(N1,F1), F is N*F1. fat(0,1). o programa entrar num lao eterno. Uma definio melhor do predicado fat a seguinte: fat(0,1). fat(N,F) :- N1 is N-1, fat(N1,F1), F is N*F1. No entanto, o controle da pesquisa vertical pela forma dos argumentos no suficiente para garantir a excluso mtua de clusulas alternativas. Assim, por exemplo, dada a ltima definio do fatorial de uma nmero, a chamada ?-fat(3,F). produz uma primeira resposta F=6 e, se lhe for permitido procurar novas respostas, o mecanismo de retrocesso forar o programa a entrar em uma recursividade incontrolvel, pois o argumento N passar a assumir valores negativos. Portanto, o mecanismo de unificao de argumentos s eficaz quando o controle da pesquisa vertical pode ser feito apenas com base na forma dos parmetros. Porm, quando preciso decidir com base na avaliao dos valores dos parmetros, ele se torna insuficiente.

11 de 23
Sandra Cortinovi

Linguagem Prolog

O controle da pesquisa horizontal o controle da busca de valores alternativos para as substituies das variveis de uma clusula. Ele , portanto, o controle do procedimento de retrocesso na pesquisa de clusulas alternativas, durante a verificao de um objetivo.

Uma lista um termo estruturado que operado como um conjunto ordenado de elementos. Os elementos podem ser tomos ou termos estruturados, inclusive listas. Uma lista ou uma lista vazia, no possuindo elementos, ou uma estrutura com dois componentes: a cabea e a cauda. O fim da lista costumeiramente representado como uma clusula que composta pela lista vazia, a qual expressa como []. A cabea e a cauda de uma lista so componentes do smbolo funcional .. Exemplos: a) a lista contendo o nico elemento a .(a,[]) a) a lista que consiste dos tomos a, b e c pode ser escrita .(a,.(b,.(c,[])))

Listas so consideradas seqncias ordenadas, sendo a lista .(a,.(b,[])) diferente da lista .(b,.(a,[])). A notaao de lista consiste dos elementos da lista separados por vrgulas e a lista toda entre colchetes. Exemplos: [] [a, b, c, [d, e, f], g] [a, V1, b, [X, Y]] Variveis dentro de listas so tratadas da mesma forma que em qualquer outra estrutura. Podem tornar-se instanciadas a qualquer tempo, sendo que o uso sensato de variveis pode fornecer uma forma de colocar espaos em listas que podem ser preenchidos posteriormente. Listas so manipuladas por meio de sua diviso em uma cabea e uma cauda. A cabea de uma lista o primeiro argumento do smbolo funcional ., o qual usado para construo de listas. A cauda de uma lista o segundo argumento do smbolo funcional . , portanto sempre uma lista.

12 de 23
Sandra Cortinovi

.(a,.(b,.(c,[]))

Listas sempre podem ser representadas por rvores binrias em que os ns intermedirios so constiudos pelos . e as folhas por tomos. .(a,[])

[]

[]

Linguagem Prolog

Quando uma lista est na notao entre colchetes, a cabea da lista o primeiro elemento dessa e a cauda da lista consiste de quaisquer elementos exceto o primeiro. Lista [a, b, c, d] [a] [] [[o, gato], caiu] [o, gato] [o, [gato, caiu]] [o, [gato,caiu], l] [X+Y, x=y] Cabea a a falha [o, gato] o o o X+Y Cauda [b, c, d] [] falha [caiu] [gato] [[gato, caiu]] [[gato, caiu], l] [x = y]

A lista vazia no possui cabea nem cauda

Uma operao comum sobre uma lista dividi-la em sua cabea e cauda. H uma notao especial para representar a lista com cabea X e cauda Y: X|Y. Lista1 [X, Y, Z] [gato] [X, Y|Z] [[o, Y]|Z] [golden|T] [vale, cavalo] [branco, Q] Lista2 [joo, come, peixe] [X|Y] [maria, bebe, vinho] [[X, lpis], [est, aqui]] [golden, norfolk] [cavalo, X] [P|cavalo] Variveis instanciadas quando da unificao de Lista1 com Lista2 X=joo Y=come Z=peixe X=gato Y=[] X=maria Y=bebe Z=[vinho] X=o Y=lpis Z=[[est, aqui]] T=norfolk falha a unificao P=branco Q=cavalo

A relao entre um objeto e uma lista que diz se este objeto membro da lista o predicado membro(X,L), que verdaeiro se o objeto representado por X um membro da lista representada por L. Existem duas condies que devem ser verificadas: 1) X menbro da lista L se X a cabea da lista: membro(X, [X|_]). 2) X membro da lista L se X pertence cauda da lista: membro(X,[_|Y]) :membro(X,Y). Este dois predicados definem o predicado membro de uma lista, informando ao PROLOG para pesquisar a lista do incio at o fim, procurando um determinado elemento. O ponto mais importante a lembrar, quando um predicado definido recursivamente, a procura por condies de limite do caso recursivo. Para o predicado membro h duas condies de limite, j que o objetivo procurado ou est na lista ou no est : 1. O membro reconhecido pela primeira clusula, que faz com que a pesquisa seja interrompida se o primeiro argumento do predicado membro unificar-se com a cabea do segundo agumento. 2. O segundo argumento do predicado membro a lista vazia (o primeiro argumento no membro da lista). Quanto ao caso recursivo (segunda clusula) tem-se o seguinte: em algum ponto ou h uma unificao com a primeira clusula ou o predicado ter a lista vazia como segundo argumento. Quando qualquer um desses fatos ocorre a recursividade dos objetivos membro termina. A primeira condio de limite reconhecida por um fato, o qual no causa considerao de quaisquer subobjetivos adicionais. A segunda condio de limite no reconhecida por qualquer clusula do predicado membro, sendo que este falha.

13 de 23
Sandra Cortinovi

Linguagem Prolog

Exemplos: membro(X,[X|_]). membro(X,[_|Y]):-membro(X,Y). ?-membro(d,[a,b,c,d,e,f,g]). yes ?-membro(2,[3, a, 4, f]). no importante ressaltar que cada vez que o predicado membro tem chamada a sua segunda clusula, a linguagem PROLOG trata cada invocao como uma cpia diferente. Observao: Os predicados apresentados nesta seo utilizaram diversas vezes variveis annimas (denotadas por um nico smbolo sublinha) em suas clusulas. Uma varivel annima usada naqueles momentos em que se necessita usar uma varivel, mas o objeto a ela associado no precisa se conhecido. Por exemplo, na primeira clusula do predicado membro membro(X,[X|_]). somente a cabea da lista que constitui o segundo argumento desse predicado relevante; os objetos que compem a cauda da lista no interessam nesta situao.

Recapitulando o que foi apresentado anteriormente sobre o que pode ocorrer a um objetivo numa conjuno de objetivos, tem-se: 1o) Uma tentativa pode ser feita para satisfazer um objetivo. Quando o PROLOG tenta satisfazer um objetivo, pesquisa a base de dados a partir de seu incio, existindo duas situaes possveis de acontecer: a) Um fato, ou cabea de regra, unifica-se com o objetivo. O PROLOG marca o lugar desse fato ou regra na base de dados e instancia quaisquer variveis previamente no instanciadas que tenham sido unificadas. Se a unificao se d com uma regra, o PROLOG deve primeiro tentar satisfazer todos os objetivos que compem a regra. Se o primeiro objetivo satisfeito, ento o PROLOG tenta satisfazer o prximo objetivo direita da conjuno de objetivos. b) Nenhum fato ou cabea de regra que seja unificvel com o objetivo encontrado. Neste caso, diz-se que ocorreu uma falha. O PROLOG ento tenta re-satisfazer o objetivo anterior esquerda. o que se chama retrocesso. 2o) O PROLOG pode tentar re-satisfazer um objetivo. Neste caso deve tornar no instanciadas quaisquer variveis que se tornaram instanciadas quando este objetivo foi anteriormente satisfeito. Este o significado de desfazer todo o trabalho feito previamente neste objetivo. A seguir o PROLOG retoma a pesquisa na base de dados a partir do lugar onde a marca de reincio do objetivo foi colocada. Como visto anteriormente, este novo objetivo retrocedido pode ter sucesso ou falhar, sendo que ou a situao em (a) ou a situao em (b) acima ocorrer.

14 de 23
Sandra Cortinovi

Linguagem Prolog

O corte um mecanismo especial usado em programas PROLOG que permite informar ao sistema quais escolhas prvias no necessitam ser consideradas novamente quando de um retrocesso. Sintaticamente, o uso do operador de corte em uma regra assemelha-se ao de um objetivo que tenha como predicado o smbolo ! e nenhum argumento. A forma geral de uma clusula que contm um operador de corte a seguinte: cabea :- objetivo1, ..., !, ..., objetivon. sendo que o nmero de objetivos direita e esquerda do corte pode ser nulo. Como objetivo, o operador de corte sempre sucede e no pode ser re-satisfeito. O seu efeito remover as marcas de reincio de certos objetivos de forma que eles no possam ser resatisfeitos. Quando um operador de corte encontrado como um objetivo de uma regra, o PROLOG imediatamente congela todas as escolhas feitas desde que o objetivo-pai foi invocado - por objetivo-pai entende-se o objetivo que causou o uso da regra que contm o corte. Todas as outras escolhas alternativas so descartadas. Dessa forma, quaisquer tentativas de re-satisfazer um objetivo entre o objetivo-pai e o corte falhar. H diversas formas de descrever o que acontece com as escolhas que so afetadas pelo corte. Pode-se dizer que as escolhas so congeladas, que o sistema se detm nas escolhas feitas ou que as alternativas so descartadas. Ou pode-se tambm ver o smbolo de corte como sendo uma barreira que separa objetivos. O operador de corte, portanto, cancela as substituies feitas antes de ele ser ativado. Ele possibilita a pesquisa exaustiva de todas as alternativas de substituies para os objetivos que esto a sua direita. Porm, um retrocesso que tente buscar valores alternativos para o corte produz o retorno da chamada da clusula como falha, o que significa que no h mais alternativas a procurar: os objetivos direita do corte foram esgotados e os esquerda do corte foram congelados. Assim, o programa trocar(eu,voce). trocar(bebo,bebe). trocar(X,X). alterar([],[]). alterar([P|R],[M|N]):-trocar(P,M),alterar(R,N). produz as seguintes respostas consulta: ?-alterar([eu,bebo,cerveja],F). F=[voce,bebe,cerveja] ?-; F=[voce,bebo,cerveja] ?-; F=[eu,bebe,cerveja] ?-; F=[eu,bebo,cerveja] ?-; no Tal ocorre porque o retrocesso sobre trocar(P,M) no est controlado, possibilitando o uso de todas as alternativas de substituio. Se for necessrio fixar apenas uma alternativa, preciso cortar o retrocesso sobre o predicado trocar. Esse corte pode ser obtido reescrevendo a regra da seguinte forma: alterar([],[]). alterar([P|R],[M|N]):-trocar(P,M),!,alterar(R,N). A consulta, agora, produz apenas um resposta ?-alterar([eu,bebo,cerveja],F). F=[voce,bebe,cerveja] ?-; no pois todas as tentativas de obter novas substituies para M so evitadas pela presena do corte.

15 de 23
Sandra Cortinovi

Linguagem Prolog

De forma geral, as clusulas que contm o operador de corte podem ser interpretadas de trs maneiras distintas, uma para cada modo de utilizao deste operador: a) o corte para implementar excluso mtua incondicional entre clusulas; b) o corte para implementar excluso mtua condicional entre clusulas; e c) o corte para produzir resposta nica. Na primeira forma de uso, excluso mtua incondicional, a clusula no contm as condies esquerda do corte, ficando com a forma cabea:-!, objetivo2, ..., objetivon. Por exemplo, o programa de alterao de sentenas pode ser reescrito como: trocar(eu,voce):-!. trocar(bebo,bebe:-!. alterar([],[]). alterar([P|R],[M|N]):-trocar(P,M),alterar(R,N). Nesse exemplo o corte implementa excluso mtua incondicional entre as clusulas do predicado trocar, e o programa s fornece uma resposta para cada consulta. Na excluso mtua condicional, as clusulas tem a forma geral plena cabea :- objetivo1, ..., !, ..., objetivon. onde os objetivos direita do corte podem ou no estar presentes. O programa a seguir, que retorna o fatorial de um nmero, ilustra a excluso mtua condicional. fat(N,F):- N=0, !, F=1. fat(N,F) :- N1 is N-1, fat(N1,F1), F is N*F1. Na implementao de resposta nica, os objetivos direita do corte no existem, havendo apenas objetivos esquerda do corte. cabea :- objetivo1, ..., objetivon, !. O programa a seguir exemplifica a implementao de resposta nica. primo(joao,jose). primo(joao,julio). primo(jaco,julio). primo(jair,jorge). tem-primo(X):-primo(X,Y),!.

O predicado repeat constitui-se numa forma adicional de gerar mltiplas solues atravs de retrocesso. Na maioria dos sistemas PROLOG encontra-se embutido, isto , est pr-definido na implementao da linguagem, na forma: repeat. /*C1*/ repeat:-repeat. /*C2*/ Qual o efeito de colocar-se o predicado repeat como um objetivo em uma regra? Primeiro, o objetivo sempre sucede devido ao fato C1. Segundo, se o retrocesso retorna a este ponto novamente, o PROLOG ser capaz de tentar uma alternativa, a regra presente em C2. Quando usa essa regra, outro objetivo repeat gerado. Desde que esse unifica-se com o fato em C1, sucede novamente. Se por retrocesso voltar a este ponto, o PROLOG novamente usar a regra onde usa o fato anterior. Para satisfazer o objetivo extra, novamente tomar o fato como primeira opo. E assim sucessivamente. Portanto, o objetivo repeat ser capaz de suceder muitas vezes por retrocesso. Cabe observar a importncia da ordem da informao na definio do repeat: fato antes da regra. Por que gerar objetivos que sempre sucedero no retrocesso? A razo que permitem construir, fora de regras que no permitem alternativas de retrocesso nelas prprias, regras que permitem alternativas, podendo-se faz-las gerar valores diferentes de cada vez.

16 de 23
Sandra Cortinovi

Linguagem Prolog

O predicado pr-definido fail sempre falha. Um dos usos desse predicado quando se deseja explicitamente que outro objetivo retroceda atravs de todas as solues possveis. O ciclo repeat-fail assume a forma geral: r:-repeat, q, (c;fail). Essa combinao permite que um predicado q seja continuamente executado at que uma condio c se torne verdadeira. Exemplo: le-predicados:-repeat, read(P), (P=fim, !; analisa-predicado(P), fail).

O operador de corte pode ser combinado com o predicado fail para produzir uma falha forada. Uma conjuno de objetivos da forma cabea :- objetivo1, ..., objetivon, !, fail. usada para informar ao PROLOG: se a execuo chegou at esse ponto, ento pode abandonar a tentativa de satisfazer essa regra. A conjuno falha devido ao fail, e o objetivo-pai falha devido ao corte. A verso do programa do fatorial a seguir ilustra o emprego da falha forada. fat(N,F) :- N<0, !, fail. fat(0,1) :- !. fat(N,F) :- N1 is N-1, fat(N1,F1), F is N*F1. Com a combinao de corte e falha implementa-se em PROLOG a negao lgica not(X) :- X, !, fail. not(X). que tem a particularidade de ser uma negao definida pela impossibilidade se se provar X. Com o predicado not, a consulta ?-not(primo(jaco,jair)). sobre a seguinte base de dados primo(joao,jose). primo(joao,julio). primo(jaco,julio). primo(jair,jorge). tem-primo(X):-primo(X,Y),!. produz a resposta yes.

'

&

"

"

"

17 de 23
Sandra Cortinovi

Linguagem Prolog

O ambiente/linguagem Prolog apresenta um conjunto de predicados pr-definidos para entrada e sida, manipulao da base da dados, manipulao de termos, operaes aritmticas, metalgica, controle do retrocesso, depurao e gerncia da rea de trabalho. A seguir apresenta-se alguns predicados que se encontram pr-definidos na maioria das implementaes da linguagem Prolog.

H quatro tipos de objetos que podem ser lidos ou escritos: termos PROLOG, caracteres ASCII, strings e dados formatados. Cada tipo de objeto manipulado por seus prprios predicados de entrada e saida. A seguir apresenta-se alguns dos predicados para entrada e sada disponveis no Arity Prolog.

Os predicados de entrada e saida de termos lem e escrevem termo Prolog vlido, como tomos, variveis, inteiros e clusulas. Tanto a entrada como a saida de termos obedecem s seguintes normas: quando se l um termo do teclado, o ponto (.) e o sinal de transmisso marcam o fim do termo; tomos que contenham espaos ou iniciam por letra maiscula devem ser colocados entre apstrofes; e quando um programa escreve um termo, variveis no instanciadas so escritas como um sublinha seguido de um nmero hexadecimal que a localizao da varivel.
v v v

read(Termo) write(Termo) display(Termo)

L um termo a partir do dispositivo padro de entrada. Escreve um termo no dispositivo padro de saida. Escreve um termo no dispositivo padro de saida na forma prefixada.

Observao: Os predicados read, write e display no podem ser re-satisfeitos.

op(Precedncia, Associatividade, Valor) Define um operador, determinando como podem ser traduzidas espresses que envolvam o operador. Quando uma expresso lida, a definio do operador determina como ela ser traduzida na notao prefixada. Quando a expresso escrita, determina como pode ser traduzida de volta para a notao convencional. Posio determina a ordem na qual o operador aparece em relao ao seus operandos; pode ser: prefixada xfx posfixada fx infixada xf Precedncia determina a ordem na qual os operadores so traduzidos - qual operador o mais externo na notao prefixada quando parnteses no esto presentes na expresso. Por exemplo, como o operador de multiplicao possui precedncia menor que o operador de adio, a expresso a*b+c traduzida como +(*(a,b),c)
w w w

0 R f Q e

18 de 23
Sandra Cortinovi

Linguagem Prolog

de forma que o operador de adio torna-se o operador principal, e o termo *(a,b) o seu primeiro argumento. Associatividade determina a ordem na qual operadores de igual precedncia so traduzidos, podendo ser da esquerda para a direita, da direita para a esquerda ou no associativa (esta ltima significando que operadores no associativos no podem aparecer na mesma expresso). Posio Infixada tomo xfx xfy yfx fx fy xf yf Associatividade no associativa direita para a esquerda esquerda para a direita no associativa esquerda para a direita no associativa direita para a esquerda

Prefixada Posfixada

Observaes: As regras de precedncia e associatividade definidas para um operador podem sempre ser alteradas atravs do uso de parnteses. A precedncia de um operador definida atravs de um nmero entre 1 e 1200. Expresses envolvendo operadores de precedncia igual ou superior a 1000 s podem ser usadas como argumento de um smbolo funcional se estiverem entre parnteses. Associar a um operador a precedncia 0 implica em desabilit-lo. A tabela a seguir apresenta a definio de alguns operadores pr-definidos no Arity Prolog. Operador ::; , \+ = is < + : + * ^ .. ?Associatividade xfx fx xfy xfy fy xfy xfx yfx yfx xfy fx yfx xfy yfx Precedncia 1200 1200 1100 1000 900 700 700 600 500 500 500 400 300 200
x x x x

=.. \= == \== =< > >= / mod

//

19 de 23
Sandra Cortinovi

Linguagem Prolog

Os predicados para entrada e sada de termos exige que cada linha seja um termo (terminando com ponto seguido de enter), o que no muito natural para entrada de dados. Os predicados de entrada e saida de caracteres fornecem meios mais naturais, lendo e/ou escrevendo um caracter por vez.

get0(Caracter)

get(Caracter) put(Caracter) nl tab(Nmero)

L um caracter a partir do dispositivo de entrada padro. Se Caracter estiver instanciado, o predicado get0 verifica se o prximo caracter lido igual ao caracter especificado, retornando sucesso ou falha. Semelhante ao predicado get0, exceto que no l caracteres com cdigo ASCII inferior a 32 (pula caracteres no visveis). Escreve no dispositivo padro de saida o caracter especificado. Faz com que a prxima saida seja impressa na prxima linha. Escreve o nmero especificado de espaos no dispositivo padro de saida.

A entrada e saida em arquivos difere da entrada e sada padro devido ao fato de ser necessrio abrir ou criar o arquivo antes de l-lo ou grav-lo e fechar o arquivo quando todas as operaes de entrada e sada forem completadas. Sempre que um programa abre um arquivo, o Arity Prolog associa a ele um nmero, que chamado de apontador de arquivo (AA). Esse nmero deve ser usado em todas as operaes subseqentes sobre o arquivo.

read(AA,Termo) get0(AA,Termo) get(AA,Caracter) display(AA,Caracter) write(AA,Termo) put(AA,Termo) nl(AA) tab(AA,Nmero) create(AA,Arquivo) open(AA,Arquivo,Modo)

close(AA)

n m

j g

L termos do arquivo. L caracteres do arquivo. L somente caracteres com cdigo ASCII maior que 32 do arquivo. Escreve termos no arquivo na notao pr-fixada. Grava termos no arquivo. Grava caracteres no arquivo. Grava um caracter new-line no arquivo. Grava o nmero especificado de espaos no arquivo. Cria um arquivo, abrindo-o para gravao; se o arquivo j existe, ele esvaziado e regravado. Abre o arquivo com o modo de acesso especificado, que pode ser: r (read), w (write), a (append), rw (read/write) e ra (read/append). Fecha o arquivo.

20 de 23
Sandra Cortinovi

Linguagem Prolog

Os predicados a seguir possibilitam adicionar, revisar e remover clusulas de uma base de dados Prolog.

consult(Arquivo) reconsult(Arquivo)

save(Arquivo) restore(Arquivo). listing listing(Nome/Grau,...)

clause(Cabea,Corpo)

asserta(Clusula) assertz(Clusula) retract(Clusula)

L uma base de dados do disco, na forma fonte, acrescentando-a base corrente. L uma base de dados do disco, na forma fonte, substituindo as clusulas duplicadas na base de dados corrente pelas clusulas lidas. Grava a base de dados corrente em disco, na forma binria. L uma base de dados do disco na forma binria, destruindo a base de dados corrente. Lista no dispositivo padro de saida todos os predicados da base de dados. Lista no dispositivo padro de saida os predicados especificados, com smbolo funcional dado por Nome e nmero de argumentos dado por Grau. Retorna os objetivos associados a uma dada Cabea. Se houver mais de uma clusula associada, o Prolog escolher a primeira. Se uma clusula no possuir corpo, considera-se que tem Corpo com valor true. Acrescenta uma clusula no incio da lista de predicados. Acrescenta uma clusula no fim da lista de predicados. remove uma clusula da base de dados.

21 de 23
Sandra Cortinovi

Linguagem Prolog

var(X) nonvar(X) atom(X) integer(X) atomic(X) X=Y X \= Y X == Y X \== Y Estrutura =.. Lista

arg(Argumento,Termo,Valor) functor(Estrutura,Nome,Grau) name(tmo,Lista)

Os seguintes predicados atuam sobre operadores aritmticos. X>Y X<Y X >= Y X =< Y X =:= Y X =\= Y X is Y Sucede se X for maior que Y. Sucede se X for menor que Y. Sucede se X for maior ou igual a Y. Sucede se X for menor ou igual a Y. Sucede se X for igual a Y. Sucede se X for diferente de Y. Avalia a expresso aritmtica Y e unifica seu valor com X. Y deve estar instanciada para uma estrutura que possa ser interpretada como uma expresso aritmtica. Primeiro, a estrutura instanciada por Y avaliada para fornecer um inteiro, o resultado. Se X no estiver instanciada, ento X torna-se instanciada para o resultado e o is sucede. Se X j estiver instanciada, ento X e o resultado so comparados para igualdade, sendo que o is sucede ou falha dependendo do resultado do teste.

Sucede se X uma varivel no instanciada. Determina se X uma varivel annima. Sucede quando X est representando um tomo Prolog. Sucede quando X est representando um nmero inteiro. Sucede quando X est representando um tomo ou um inteiro. Sucede se X unificvel com Y. Sucede se X no unificvel com Y. Sucede se X for equivalente a Y. Sucede se X no for equivalente a Y. Converte uma estrutura em uma lista e viceversa. A lista gerada a partir da estrutura usando o smbolo funcional como cabea e os argumentos como cauda. A estrutura montada a partir da lista usando a cabea como smbolo funcional e a cauda como argumentos. Retorna o valor de um dado argumento de um termo. Desmonta uma estrutura retornando seu nome e grau. Converte uma lista em um tomo e vice-versa. Se tomo um tomo, a lista gerada como uma seqncia com os cdigos ASCII que compem o nome do tomo. Se tomo um inteiro, a lista gerada como uma seqncia de cdigos ASCII para a impresso de valores inteiros.

22 de 23
Sandra Cortinovi

Linguagem Prolog

trace notrace spy(Nome/Grau) nospy(Nome/Grau)

Ativa uma depurao exaustiva. Desatva o modo de depurao. Especifica um ponto de parada em um predicado. Remove um ponto de parada de um predicado.

23 de 23
Sandra Cortinovi

Você também pode gostar