\documentclass[12pt, a4paper]{report}

\pagestyle{empty}
\begin{document}
 
\noindent Bacharelado em Ci\^{e}ncia da Computa\c{c}\~{a}o
\hfill DCC/ICEx/UFMG
 
\noindent {\it Intelig\^encia Artificial}
\hfill $\mbox{2}^{\mbox{\underline{o}}}$ semestre de 2001
 
\noindent Prof.: Newton Jos\'{e} Vieira
 
\noindent {\bf Exerc\'{\i}cio Substitutivo de Prolog} \hfill Devolu\c c\~ao: 30/08/01

\vspace*{7mm}
Fa\c ca os seguintes exerc\'{\i}cios em Prolog. Teste todos os procedimentos definidos
no Prolog de sua escolha, mas entregue-os na sintaxe padr\~ao. Cada um \'e identificado
pelo n\'umero da proposi\c c\~ao do mesmo no livro texto (Bratko). Basta entregar
os c\'odigos fonte, bem documentados, por e-mail.

\begin{enumerate}
 \item[3.2] Defina a rela\c c\~ao \verb#last(Item,List)#, de forma que \verb#Item# \'e o
            \'ultimo elemento da lista \verb#List#. Escreva duas vers\~oes: (a) usando
            a rela\c c\~ao \verb#conc#, e (b) sem \verb#conc#.
 \item[3.4] Defina a rela\c c\~ao \verb#reverse(List,ReversedList)#, que reverta listas.
            Por exemplo, \verb#reverse([a,b,c,d],[d,c,b,a])#.
 \item[3.5] Defina o predicado \verb#palindrome(List)#. Uma lista \'e um pal\'{\i}ndromo
            se \'e id\^entica ao seu reverso. Exemplo: \verb#[m,a,d,a,m]#.
 \item[3.6] Defina a rela\c c\~ao \verb#shift(List1,List2)# de forma que \verb#List2# seja
            um ``deslocamento rotativo'' de \verb#List1# de um elemento. 
            Por exemplo,
            \begin{enumerate}
             \item[\ ] \verb#?- shift([1,2,3,4,5],L1),# \\
                       \hspace*{.7cm}\verb#shift(L1,L2).#
            \end{enumerate}
            produz:
            \begin{enumerate}
             \item[\ ] \verb#L1=[2,3,4,5,1]# \\
                       \verb#L2=[3,4,5,1,2]# 
            \end{enumerate}
 \item[3.7] Defina a rela\c c\~ao \verb#translate(List1,List2)#, para traduzir uma lista
            de d\'{\i}gitos decimais, \verb#List1#, para a lista de palavras
            correspondentes. Por exemplo:
            \begin{center}
             \verb#translate([7,0,7,3],[seven,zero,seven,three])#.
            \end{center}
            Use a seguinte rela\c c\~ao auxiliar:
            \begin{center}
             \verb#means(0,zero)#, \verb#means(1,one)#,\verb#means(2,two)#, \ldots
            \end{center}
 \item[3.8] Defina a rela\c c\~ao \verb#subset(Set,Subset)#, onde \verb#Set# e \verb#Subset#
            s\~ao duas listas representando conjuntos. O usu\'ario dever\'a ser capaz de usar
            esta rela\c c\~ao, n\~ao apenas para verificar se um conjunto \'e subconjunto de
            outro, mas tamb\'em para gerar todos os subconjuntos de um dado conjunto. Por
            exemplo:
            \begin{enumerate}
             \item[\ ] \verb#?- subset([a,b,c],S)# \\
                       \verb#S = [a,b,c];# \\
                       \verb#S = [a,b];# \\
                       \verb#S = [a,c];# \\
                       \verb#S = [a];# \\
                       \verb#S = [b,c];# \\
                       \verb#S = [b];# \\
                       $\cdots$
            \end{enumerate}
 \item[3.10] Reescreva o programa do macaco e da banana definindo a rela\c c\~ao
            \begin{center}
             \verb#canget(State,Actions)#
            \end{center}
             de forma que \verb#Actions# seja uma lista que representa a sequ\^encia de opera\c c\~oes
             que o macaco deve executar para conseguir a banana partindo do estado \verb#State#. Assim,
             terse-\'a:
             \begin{enumerate}
             \item[\ ] \verb#?-canget(state(atdoor,onfloor,atwindow,hasnot),A).# \\
                       \verb#A = [walk(door,window),push(window,middle),climb,grasp]#
             \end{enumerate}
\end{enumerate}

\end{document}
 
