You are on page 1of 2

Ficha Prtica de Prolog (1) a

Lgica Computacional 2o ano LCC o 2011/2012

Prembulo a
1. Os alunos devem submeter a cha sob a forma de um cheiro Prolog que inclua as respostas as questes apresentadas. ` o 2. A submisso ser realizada no site elearning, at ` data limite a anunciada. a a ea 3. As questes que no digam respeito a cdigo Prolog devem ser respondidas no o a o mesmo cheiro como comentrios em Prolog os comentrios so delimitados a a a como em C, C++ ou Java (/* ... */)). 4. Tambm se sugere que se incluam como comentrios fragmentos relevantes da script e a de interaco com o interpretador SWI-Prolog (e.g. aps a deniao de um predica o c cado, incluir num comentrio queries que ilustrem a utilizaao do predicado). a c 5. Dvidas que surjam no decorrer da realizaao/submisso do trabalho podem ser u c a esclarecidas enviando um correio electrnico ao docente da disciplina. Recomenda-se o que inclua na linha de subject o prexo LC: aluno XXXXX - Ficha X

Chama-se a ateno para os seguintes aspectos prticos sobre a realizao da cha: ca a ca

Operaes sobre listas co


1. Dena append/3 que concatene duas listas. 2. Dena last/2 que verique se o ultimo elemento de uma lista um dado. e 3. Utilize o predicado append para denir os predicados prexo e suxo que vericam se uma lista prexo ou suxo doutra. e 4. Dena sum/2 que permita determinar o somatrio de uma lista de inteiros. Pode o esse predicado ser invocado com a lista no instanciada? Justique. a 1

Exerc cio 1

5. Dena split/4 que separe os elementos de uma lista nos menores e maiores que um dado valor. 6. Considere o predicado: takeout(X,[X|R],R). takeout(X,[F|R],[F|S]) :- takeout(X,R,S). O que faz este predicado? (sugesto: teste-o com alguns valores). a 7. Construa a rvore de procura de solues (rvore de inferncia) para o objectivo a co a e takeout(X,[1,2,3],Y). 8. Utilize o predicado takeout para denir um predicado que determine se uma lista e permutao de uma outra. ca

2.1

Tipos Algbricos e

A utilizaao de termos permite a manipulao em Prolog de valores de tipos algbricos (que c ca e em Haskell seriam declarados com data). Um primeiro exemplo disso j foi ilustrado num a exerc atrs quando se manipularam naturais (zero, suc(zero), etc.). Para sistemacio a tizar, vejamos agora como manipular um outro tipo algbrico bem conhecido: as rvores e a binrias. Uma escolha bvia para representar os seus valores ser considerar o tomo vazia a o a a para representar a arvore vazia e termos da forma nodo(X,E,D) para representar nodos intermdios (com valor X, sub-rvore esquerda E e sub-rvore direita D). Temos ento como e a a a exemplos de termos: vazia, nodo(4, vazia, vazia), etc. Note no entanto que em Prolog no existe a noao de tipo (e.g. no podemos, a a c a ` priori, condicionar um dado argumento de um predicado a ser uma arvore binria a a unica alternativa ser denir-se um predicado que suceda para termos que tenham a a estrutura prescrita...) Exerc cio 2 1. Dena um predicado arvBin/1 que verique se o termo dado uma rvore binria e a a (e.g. deve falhar para termos como vazia(nodo,vazia(nodo))). 2. Dena um predicado que verique se uma lista uma travessia in-order de uma e a rvore. 3. Dena predicados que determinem: (a) se uma lista est ordenada. a (b) se uma rvore uma Arvore Binria de Procura a e a

You might also like