Ejercicios tipo parcial 2
-
Dado el siguiente razonamiento:
∀X. ∀Y. (rivales(X, Y) ∩ ¬gana(X) ⊃ se_alegra(Y))
gana(trump) ⊃ ¬gana(biden)
rivales(trump, lula)
gana(biden)
―――――――――――――――――――――――
𐬽 se_alegra(lula)Pruébelo mediante demostración no natural por refutación, siguiendo una estrategia similar a la de Prolog.
-
Dado:
or = λx. λy. ((x true) y) true = λx.λy.x false = λx.λy.y
Probar que:
or false true = true
-
Escribir una base de datos que represente el siguiente conjunto de bloques:
La base de datos debe incluir los nombres
a
,b
,c
,d
ymesa
y el predicadoapoyado/2
, que representa la relación de que un objeto está apoyado sobre otro.Dado el predicado
encima/2
, ¿Qué consulta haría para encontrar todos los bloques que están encima del bloquec
? Mostrar los resultados que daría el intérprete en el orden correcto. Justificar.encima(X, Y) :- apoyado(X, Y). encima(X, Y) :- apoyado(X, Z), encima(Z, Y).
-
Dada la definición de la siguiente clase en un lenguaje multiparadigma imaginario (que soporta al menos los paradigmas de objetos y funcional):
class Resultado<T> { // invariante: o bien valor != null, o excepcion != null (exclusivo) T valor; Exception excepcion; constructor(T v) { this.valor = v } constructor(Exception e) { this.excepcion = e } public Resultado<R> bind(...) { ... } }
Si la clase representa una mónada y los constructores corresponden a la operación monádica
return
, indicar qué debería recibir el métodobind
y cuál sería su cuerpo. -
Mostrar el resultado de evaluar las siguientes expresiones en Clojure. Justificar.
-
user=> (defn f [x] (reduce * (range 1 (inc x)))) user=> (f 5)
-
user=> (map #(% 0) [inc dec zero?])
-
user=> (defn palitos [n] (apply str (concat (repeat (quot n 5) "卌") (repeat (mod n 5) "|")))) user=> (palitos 8)
-