Professional Documents
Culture Documents
Lenguajes de Programación
Universidad Técnica Federico Santa María
Departamento de Informática
Lenguajes de Programación
Universidad Técnica Federico Santa María
a) ( 3 . 4)
Ejercicios de Scheme b) ( 3 4)
c) ((34))
d) ( 3 (4) )
e) N.A.
1
XX-2
Pregunta. Dado el siguiente procedimiento Scheme: Pregunta. Dada la definición del siguiente procedimiento:
¿Qué entrega la evaluación de: (myst (cons 'a 'b)) ? La evaluación de (otro ´(1 2 3)) entrega:
a) (a b)
b) (b a) a) 1
c) (a . b) b) 3
d) (b . a) c) 6
e) Ninguna de las anteriores d) (1 2 3)
XX-3
e) Ninguna de las anteriores XX-4
Problema. Escriba en Scheme el procedimiento (concatenar l1 l2) que Problema. Defina en Scheme un procedimiento recursivo que encuentre
recibe dos listas l1 y l2 como argumento y retorna una única el primer elemento de una lista que es un número. Debe retornar
lista que contiene primero todos los elementos de l1 seguido el número si lo encuentra, sino retornar null.
de todos los elementos de l2 (no puede usar el procedimiento
interno append que viene en algunas implementaciones de Scheme).
(define primer-numero
(define concatenar (lambda (ls)
(lambda (l1 l2) (cond
(if (null? l1) ((null? ls) #f)
l2 ((number? (car ls)) (car ls))
(cons (car l1) (concatenar (cdr l1) l2))))) (else (primer-numero (cdr ls))))))
XX-5 XX-6
1
Departamento de Informática Departamento de Informática
Lenguajes de Programación Lenguajes de Programación
Universidad Técnica Federico Santa María Universidad Técnica Federico Santa María
Problema.
Problema. Escriba en Scheme un procedimiento que al
Escriba en Scheme procedimiento (filtrar ls) que recibe
corresponde predicado (miembro? x ls) (retorna #t o #f) que
como único argumento una lista ls y retorna una lista con
permite verificar si x es un elemento que está en la lista ls
los mismos elementos de la lista, pero eliminando
usando equal? para comparar (no puede usar procedimiento
elementos repetidos.
member).
XX-7 XX-8
Departamento de Informática
Lenguajes de Programación
Universidad Técnica Federico Santa María
Departamento de Informática
Lenguajes de Programación
Universidad Técnica Federico Santa María
Problema.
Defina en Scheme un procedimiento con recursión de cola
que permita contar la ocurrencia de un determinado valor en
una lista.
XX-9
d) n
2
e) N. A
XX-11 XX-12
2
Departamento de Informática Departamento de Informática
Lenguajes de Programación Lenguajes de Programación
Universidad Técnica Federico Santa María Universidad Técnica Federico Santa María
Problema.
Pregunta. Dado el siguiente programa Prolog:
Escriba una relación en Prolog que permita traducir una lista
de números entre 0 y 6 inclusive en los correspondientes días
fun(Val, 0) :- Val > 0, Val < 5, !.
de la semana, considerando el día domingo como 0 y el
fun (Val, 1) :- Val < 14, !.
sábado como 6.
fun (Val, 2). map(0, domingo).
Ejemplo: map(1, lunes).
¿Cuántas soluciones tiene la consulta? map(2, martes).
?- traducir([1, 4], X).
?- fun (6, X).
X = [lunes,jueves] map(3, miercoles).
map(4, jueves).
a) 0 map(5, viernes).
b) 1 map(6, sabado).
c) 2
d) No tiene solución traducir([], []).
e) Ninguna de las anteriores traducir([X | R], [Y | S]) :- map(X, Y), traducir(R, S).
XX-13 XX-14
Problema.
Problema. Defina en Prolog un predicado split que permite dividir
Determine si dos números enteros son coprimos. una lista en dos partes, donde se especifica el largo de
Dos números son coprimos si su máximo común divisor la primera parte.
es igual a 1. ¡No use otro predicado definido anteriormente!
Ejemplo: ?- coprimo(35, 64). Ejemplo de uso:
yes ?- split([a,b,c,d,e,f,g,h,i,k], 3, L1, L2).
% mcd(X,Y,G) :- G es el máximo común divisor de X e Y L1 = [a,b,c]
L2 = [d,e,f,g,h,i,k]
mcd(X, 0, X):- X > 0.
mcd(X, Y, G):- Y > 0, Z is X mod Y, mcd(Y,Z,G). % split(L,N,L1,L2) : La lista L1 contiene los primeros N elementos de la
% lista L, L2 contiene el resto de los elementos
% coprimo(X, Y) :- X es coprimo con Y
split(L,0,[],L).
coprimo(X,Y) :- mcd(X,Y,1). split([X|Xs],N,[X|Ys],Zs) :- N > 0, N1 is N - 1, split(Xs,N1,Ys,Zs).
XX-15 XX-16
Respuesta
Problema.
Escriba en Prolog un programa que genere una combinación de
% combinacion(K,L,C) : C es lista de K elementos distintos elegidos
K objetos de una lista que tiene N elementos. Para ello implemente
% de lista L
el predicado: combinacion(K, L, C), donde K es el número de
elementos de la combinación C y L es la lista de N elementos
combinacion(0,_,[]).
desde donde se genera la combinación.
combinacion(K, L, [X | Xs]) :- K > 0, el( X, L, R),
K1 is K-1, combinacion(K1, R, Xs).
Ejemplo:
% el (X, L, R) : R es el resto de la lista L después de donde
?- combinacion(3, [a,b,c,d,e,f], Comb).
% aparece X
Comb = [a,b,c] ;
Comb = [a,b,d] ;
el(X, [X | L], L).
Comb = [a,b,e] ;
el(X, [ _| L], R) :- el(X, L, R).
% hasta 6!/ (3! * (6-3)!) = 20 respuestas diferentes
XX-17 XX-18
3
Departamento de Informática
Lenguajes de Programación
Universidad Técnica Federico Santa María
Problema.
Dado el siguiente programa:
persona(maria).
persona(pedro).
flaco(maria).
?- macizo(pedro).
yes
?- macizo(maria).
no
?- macizo(X).
no