\documentclass{article} \usepackage[utf8]{inputenc} \usepackage[spanish]{babel} \usepackage{listings} \title{Práctica 4 - Programación Lógica} \author{Carlos S. Galindo Jiménez} \begin{document} \maketitle Todos los ejercicios ejecutan la misma función: \begin{lstlisting} f(l) = if null?(l) then 0 else l + f(cdr(l)) \end{lstlisting} Esta función calcula la longitud de una lista, y su comportamiento específico variará en función de sus argumentos y la respuesta que esperemos. \begin{enumerate} \item X $\rightarrow$ 0, puesto que el argumento es la lista vacía. \item X $\rightarrow$ 2; el argumento es la lista [1, 2] expresada con el constructor de listas \texttt{cons}. \item X $\rightarrow$ 2; puesto que es el mismo caso que el anterior pero con otro constructor. \item X $\rightarrow$ 2; puesto que a pesar de contener variables enteras, su valor es irrelevante para la longitud de la lista. \item VL $\rightarrow$ \{\texttt{nil}\}. Puesto que uno de los constraints es que el resultado sea 0, la única lista posible es la lista vacía, [ ] o \texttt{nil} \item VL $\rightarrow$ \{[1,1,1,1]\}, asignando $'x_i$ a cada sublista, empezando con [ ] hasta que el resultado es \texttt{cons(1,'x1)}. \item No encuentra solución. Esto se debe a que no existen suficientes variables intermedias $x_i$ para obtener la longitud 5 deseada. Añadiendo otra variable temporal más, o convirtiendo la variable lista en cola de una operación \texttt{cons} se puede obtener una lista de longitud 5. En esto consisten los siguientes ejercicios. \item VL $\rightarrow$ \{[1,1,1,1]\}; de forma similar al ejemplo 6. Insertado en \texttt{cons(1,l)} obtendría una lista de longitud 5. \item Igual que en el caso anterior, pero planteando la cabeza de la lista como una variable entera. Como ya se ha mencionado en el ejemplo 4. \item No obtiene solución. De nuevo no hay suficientes variables intermedias para crear una cola de 5 elementos de tal modo que la lista sea de 6 elementos. Se plantea el mismo problema que en el ejercicio 7, con soluciones similares. \end{enumerate} \end{document}