Download Programación Exploratoria Año 2016 Práctico Nro. 4 1) Definir el

Document related concepts
no text concepts found
Transcript
Programación Exploratoria
Año 2016
Práctico Nro. 4
1) Definir el predicado calculo(E, V) de manera tal que, dada una lista E que contiene a
una expresión aritmética escrita en notación polaca, se instancie a V con el valor
numérico que resulta de calcular dicha expresión. Se debe tener en cuenta que la
expresión aritmética contenida en E es representada mediante un árbol binario: los
nodos internos del árbol representan a operadores y las hojas del árbol representan a
operandos. En relación a los operadores de la expresión aritmética, se debe
considerar que dicha expresión sólo incluye a operadores elementales (+, -, *, /).
?- calculo([*,5,[+,4,3]],V).
V = 35
2) Definir el predicado ordenado(Arbol) de manera tal que sea verdadero si Arbol es un
árbol binario de números enteros que se encuentra ordenado. Se considera que un
árbol binario de números enteros está ordenado si se cumple la siguiente condición.
Para cada nodo del árbol, los números enteros en el subárbol izquierdo son más
pequeños que el número entero contenido en el nodo y los números enteros en el
subárbol derecho son mayores que el número entero contenido en el nodo.
3) Considere los incisos a), b), c) y d) del ejercicio 4 del Práctico Nro. 2.
a) Analice en qué lugar del programa del inciso a) se debería incorporar un cut para
que dicho programa tenga el mismo comportamiento que el programa del inciso
b).
b) Analice en qué lugar del programa del inciso d) se debería incorporar un cut
para que dicho programa tenga el mismo comportamiento que el programa del
inciso c).
4) Explicar y comparar el significado de los programas que se presentan debajo. Para
llevar esto a cabo, es importante tener en cuenta a todas las reevaluaciones de cada
programa.
a) select(X, [X|Xs], Xs).
select(X, [Y|Ys], [Y|Zs]):- select(X,Ys,Zs).
b) select(X, [X|Xs], Xs):-!.
select(X, [Y|Ys], [Y|Zs]):- select(X,Ys,Zs).
5) Definir el predicado paga_impuestos(X) de manera que sea verdadero cuando X es
una persona que debe pagar impuestos y que sea falso cuando X es una persona que
no debe pagar impuestos. Se debe considerar que: las personas extranjeras no pagan
impuestos; las personas que tienen ingresos menores a $1000 no pagan impuestos;
el resto de las personas sí pagan impuestos.
a) Definir el predicado utilizando la combinación cut - fail, y sin utilizar not.
b) Definir el predicado utilizando not, y sin utilizar la combinación cut - fail.
6) Considere el predicado país_grande(X) que se presenta debajo. Este predicado
expresa que un país X es grande si se cumple la siguiente condición. Al menos una
empresa Y de X tiene sede central en la capital C de X y un valor V de ventas mayor
a 10000.
país_grande(X):- capital(X,C), empresa(X,Y), central(Y,C), ventas(Y,V), V>10000.
a) Analice cómo se modifica el comportamiento de país_grande(X) si se incorpora
un cut después de central(Y,C).
b) Analice cómo se modifica el comportamiento de país_grande(X) si se incorpora
un cut después de capital(X,C).
7) Analizar el comportamiento de los programas que se presentan debajo, y establecer si
existen diferencias en cuanto al comportamiento y a las respuestas de los programas.
a) iguales (X, X).
noiguales (X,S) :- not(var(X)),not(var(S)), not(iguales(X,S)).
noiguales(X,S).
b) iguales (X, X).
noiguales (X,S) :- not(var(X)),not(var(S)),!,not(iguales(X,S)).
noiguales(X,S).
8) Dada la siguiente base de datos:
a :- assert(d).
b :- assert(e).
b :- assert(f(1)).
c.
g(X) :- a, b, c, !, d, e, f(X).
g(X) :- write('will not reach here with a cut'), nl.
a) Establecer cuál es el resultado de la consulta: ?- g(Y).
b) Establecer cuál sería el resultado de la consulta anterior si no estuviera el cut en
el primer predicado g(X) de la base de datos.
9) Definir el predicado \==(X,Y) usando: el predicado == y la combinación cut-fail.
10) Definir el predicado nonvar(X) usando: el predicado var(X) y la combinación cutfail.