You are on page 1of 54

PARADIGMAS DE

PROGRAMACIN
GUA DE EJERCICIOS
PRCTICOS
2012
Ing. Jos Oscar Mugetti Mare

Paradigmas de Programacin

Jos Oscar Mugetti Mare

PARADIGMA FUNCIONAL
TRABAJO PRCTICO 1:
Teniendo en cuenta la estructura de los lenguajes funcionales y sabiendo especificar los
algoritmos funcionales se pide que realice una primera introduccin a las tcnicas de
diseo de los lenguajes funcionales:
1) Utilizando funciones auxiliares (que suponemos estn definidas previamente) deber
escribir una funcin que calcule el mximo comn divisor de dos nmeros naturales
dados.
2) Usando selectores y funciones auxiliares (que no se definirn), escribir una funcin
que sume todos los elementos de un rbol binario.
3) Escribir la definicin de una funcin que aplicada a una lista de enteros, devuelva un
rbol binario ordenado.
4) Escribir definiciones de funciones que, aplicadas a un rbol binario, devuelva la lista
de sus elementos en:
a) De mayor a menor.
b) De menor a mayor.
5) Utilizando las funciones definidas en 3 y 4, escribir la definicin de una funcin que
ordene una lista dada.
6) Escribir la definicin de una funcin de orden superior con el significado de
"reduce" pero aplicable a rboles binarios.
7) Utilizando 6, escribir funciones que calculen la suma y el producto de un rbol
binario.
8) Escribir funciones que decida si algunos de los elementos de una lista de valores
"booleanos" es verdadero.
9) Escribir una funcin que calcule el largo de una lista.
10) Escribir una funcin que concatene dos listas.
11) Escribir una funcin filtro que, aplicada a una lista, devuelva otra que contenga
solamente los elementos de la original que cumplan con la condicin dada.

Pgina 2 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

TRABAJO PRCTICO 2:
1) A continuacin debers evaluar en el interprete
expresiones:
x1
(define x1 7)
x1
'x1
(define x2 'x1)
x2
(define total (+ (* 3 x1) 2))
total

(Scheme) las siguientes

2) Calcular, usando el interprete, el valor de las siguientes expresiones:


3+4
;;;[1a]
15 / 7
;;;[1b]
(3 + a1) * a1
;;;[1c] (donde a1 vale 7)
3 * (5 + 12 / 6) / (4 + (3 * a1))
;;;[1d] (donde a1 vale como
antes)
5 + ((b1 / 2) * (a1 / 2)) + 3 * (4 + 5)
;;;[1e] (donde a1 vale como
antes y b1 vale 57*46)
3) Define las siguientes funciones:
a) Funcin suma = que realice la suma de dos nmeros enteros
b) Funcin Cuadrado = que realice el cuadrado de un nmero
c) Funcin Cubo = que realice el cubo de un nmero, pero utilizando la funcin
"cuadrado"
d) Realizar las siguientes operaciones utilizando siempre las funciones previamente
definidas:
i) (X + Y) / 2
ii) ((X - Y) + Z) / Z2
iii) (X3 + Y2) / 2Y
e) Definir la funcin que calcule el factorial de un nmero
4) Evaluar, razonando la respuesta, las siguientes expresiones:
(cons 1 ())
(cons 2 (cons 1 ()))
(define a2 'juan)
(define b2 (cons 2 (cons 1 ())))
(cons a2 b2)
(juan 2 1)
(define c2 (cons a2 b2))
(cons c2 b2)
5) Construir expresiones que, formadas Solo por cons, quotes ('), nmeros smbolos y
parntesis, tengan como valor:
(1 2 pepe)
((1 2) pepe)
((1 2) (pepe))
(((1)))
Pgina 3 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

6) Usar el smbolo de quote para asignar a los smbolos las listas


(agua papel dinero tierra)
;;;[4a]
((agua papel) dinero (tierra))
;;;[4b]
7) Usar la funcin list para asignar a los smbolos l3 y l4 respectivamente las listas:
((agua papel) (dinero tierra))
;;;[4c]
(agua (papel (dinero)) tierra)
;;;[4d]
8) Obtener el car y el cdr de 4a y 4b, razonando la respuesta. Obtener, con funciones
del tipo c..a..d..r cada uno de los elementos de primer nivel de 4c y (dinero) de 4d.
9) En cada caso, sustituir el carcter "$" por una expresin de manera que cada una de
las siguientes expresiones tenga el valor #t y el valor #f:
a) (number? $)
;;;[5a]
b) (symbol? $)
;;;[5b]
c) (boolean? $)
;;;[5c]
d) (list? $)
;;;[5d]
e) (null? $)
;;;[5e]
10) Evaluar, razonadamente:
a) (= 2 3)
b) (= 3 3)
c) (equal? 'pepe 'pepe)
d) (define pepe 'jose)
e) (equal? 'pepe pepe)
f) (equal? '(a b) (cons 'a (cons 'b ())))
g) (equal? '(1 (2 3) 4) '(1 2 3 4))
h) (equal? '(1 (2 3) 4) (cons 1 '((2 3) 4)))
11) Evaluar, razonadamente:
a) (define x '(2 3))
b) (if (null? x) 0 (car x))
c) (+ 3 (if (null? x) 0 (car x)))
d) (define x ())
e) (+ 3 (if (null? x) 0 (car x)))

Pgina 4 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

TRABAJO PRCTICO 3:
1) Evala, razonando la respuesta, las siguientes expresiones, suponiendo que a, b y c
tienen como valor #t, mientras que d y e tienen como valor #f. Utiliza el interprete
para comprobar tus resultados.
a) (or a (and b e))
b) (not (and b c (or a e)))
c) (not (or (not a) (not b)))
d) (and (or (symbol? e) (not (symbol? a))) (not e))
2) Intenta predecir el valor de las siguientes expresiones condicionales y utiliza luego
el interprete para comprobar la validez de cada prediccin.
a) (if (null? (car '())) 'vaco 'no-vacio)
b) (if (null? (cdr '(2 3))) 'vaco 'no-vacio)
c) (cond
i) ((symbol? (cadr '(a (b)))) 'smbolo)
((number? (caar '((a) 5))) 'numero)
((pair? (cddr '(a (b)))) 'par)
(else 'nada-de-lo-anterior))
d) (+ (if (null? #f) (+ 4 8) (* (+ 3 2) 2))
(cond
((equal? 0 (caadr '(2 ((0))))) 9)
(else 12)))
3) Evala las siguientes expresiones e intenta comprender los resultados obtenidos.
a) ((lambda (x) (+ x (* x x) 1)) 3)
b) ((lambda (x y) (if (number? x) x y)) 'a 'b)
c) ((lambda (l1 l2) (list (car l1) (car l2))) '(1 2 3) '(a b))
4) Evala la siguiente expresin en el interprete de Scheme:
a) (define borra-el-segundo
(lambda (l)
(cons (car l) (cddr l))))
Intenta entender qu ocurre cuando el procedimiento definido recibe una lista de
menos de 2 elementos. Evala las expresiones:
a) (borra-el-segundo '())
b) (borra-el-segundo '(2))
c) (borra-el-segundo '(a b))
d) (borra-el-segundo '(1 3 4 2))
5) Define un procedimiento pega2 que tome como argumentos dos listas de dos
elementos y devuelva las lista resultante de unir ambas. Por ejemplo,
a) (pega2 '(a b) '(c d)) ==> (a b c d)
6) Define una funcin que concatene dos listas y evala su realizacin
7) Define una funcin que concatene tres listas y evala su realizacin
8) Define una funcin que realice el reverso de un lista y evala su realizacin
Pgina 5 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

TRABAJO PRCTICO 4:
1) Definir una funcin cuad-list que reciba una lista de nmeros como argumento y
devuelva la lista de los cuadrados de los elementos de la lista de entrada. Por
ejemplo:
a) (cuad-list '(1 2 3 4)) ==> (1 4 9 16)
b) (cuad-list '(5 3)) ==> (25 9)
c) (cuad-list '()) ==> ()
2) Define una funcin sum-cuad que reciba como argumento una lista de nmeros y
devuelva la suma de los cuadrados de los elementos de la lista.Por ejemplo:
a) (sum-cuad '(1 2 3)) ==> 14
b) (sum-cuad '(3 0 3)) ==> 18
c) (sum-cuad '()) ==> 0
3) Define un procedimiento sparimp que reciba como entrada una lista numrica y
devuelva como salida una lista de dos nmeros: el primero, la suma de los pares de
la lista de entrada y el segundo la suma de los impares de la lista de entrada. Por
ejemplo: (investiga y utiliza la funcin "even")
a) (sparimp '(1 2 3 4 5 6)) ==> (12 9)
b) (sparimp '(2 4 6)) ==> (12 0)
c) (sparimp '()) ==> (0 0)
4) Definir una funcin lista-simb que reciba una lista como argumento y devuelva la
lista de los smbolos de la lista de entrada. Por ejemplo: (investiga y utiliza la
funcin "even")
a) (lista-simb '(1 iacs hse ccia 2)) ==> (iacs hse ccia)
b) (lista-simb '(cordoba 2 beti 1)) ==> (cordoba beti)
c) (lista-simb '(1 2 3)) ==> ()
5) Define un procedimiento llamado quita-ultimo-profundo que recibe una lista como
argumento y devuelve la lista obtenida quitando el ltimo elemento, cualquiera que
sea su nivel. Por ejemplo:
a) (quita-ultimo-profundo '(a (b c) (d (e (f))))) ==> (a (b c) (d (e ())))
b) (quita-ultimo-profundo '()) ==> ()
c) (quita-ultimo-profundo '(a (((b))) (()))) ==> '(a (((b))) ())
d) (quita-ultimo-profundo '((((b))))) ==> (((())))
6) Define un procedimiento acumula-profundo que recibe como entrada una lista y
devuelve la suma de sus elementos que sean nmeros, sea cual sea su nivel. Por
ejemplo:
a) (acumula-profundo '(1 (4 (a #t () (3 b)) 5 juan) (((a))) ((3)))) ==> 16
b) (acumula-profundo '(a (b c ()) d)) ==> 0
c) (acumula-profundo '()) ==> 0
d) (acumula-profundo '(1 (uno (2 (dos (3 (tres (4 (cuatro))))))))) ==> 10

Pgina 6 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

TRABAJO PRCTICO 5: Manipulacin simblica de polinomios.


(algunos de estos ejercicios son de realizacin opcional)
1) En esta prctica trabajaremos con polinomios con coeficientes reales como un tipo
abstracto de dato. Representaremos los polinomios como una lista en la que estn
los coeficientes del polinomio ordenados desde el coeficiente lder al trmino
independiente.
Realiza las definiciones de los selectores y constructores, teniendo en cuenta lo
definido en Trabajo prctico 5 auxiliar (prac7.s)que contiene las funciones
pertinentes.
Realiza las siguientes operaciones, interpretando los resultados:
a) (grado '(3 0 1 3))
b) (coef-lider '(4 5 1 2 3 5))
c) (rest-de-poly '(1 0 0 3 4))
d) (poly-cons 6 2 '(1 2 5))
e) (zero-poly? el-zero-poly)
f) (haz-term 5 6)
g) (term-lider '(3 4 5 6))
h) (p+ '(1 3 0 5) '(2 3 1))
i) (p* '(1 0 1) '(1 0 1))
j) (neg-poly '(2 3 4 4 -3 4))
k) (p- '(1 2 3 4) '(2 3 4 5 6))
l) (valor-poly '(1 -2 1) 1)
2) Define un procedimiento cociente-poly que, dados dos polinomios poly1 y poly2,
devuelva el cociente de dividir poly1 entre poly2. A continuacin define otro
procedimiento resto-poly que dados poly1 y poly2 nos devuelva el resto de la
divisin.
La siguiente definicin de t* en el procedimiento p* no es muy buena: cada vez que
hacemos una llamada recursiva a t*, se evalan tanto (grado term) como (coef-lider
term), a pesar de estos no cambian. Adems la variable term no necesita pasar por t*, ya
que su valor no cambia. Modifica la definicin de p* para que sea ms eficiente.
(define p*
(letrec
((t* (lambda (term poly)
(if (zero-poly? poly)
el-zero-poly
(poly-cons
(+ (grado term) (grado poly))
(* (coef-lider term) (coef-lider poly))
(t* term (rest-de-poly poly)))))))
(lambda (poly1 poly2)
(letrec
((p*-aux (lambda (p1)
(if (zero-poly? p1)
el-zero-poly
(p+ (t* (term-lider p1) poly2)
(p*-aux (rest-de-poly p1)))))))
(p*-aux poly1)))))
Pgina 7 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

3) En la siguiente definicin de poly-cons, tanto lista-de-ceros como append hacen


recursin sobre una lista de ceros. Reescribe poly-cons para que sea ms eficiente.
(Usa iteracin).
(define poly-cons
(lambda (gra coef poly)
(let ((gra-p (grado poly)))
(cond
((and (zero? gra) (equal? poly el-zero-poly)) (list coef))
((< gra-p gra)
(if (zero? coef)
poly
(cons coef
(append (lista-de-ceros (- (- gra gra-p) 1))
poly))))
(else (error "poly-cons: Grado demasiado alto en:" poly))))))
(define lista-de-ceros
(lambda (n)
(if (zero? n)
'()
(cons 0 (lista-de-ceros (- n 1))))))
4) Considerando a los polinomios como simples tiras de trminos. Cada trmino ser
un par, donde el primer componente es el coeficiente y el segundo el exponente,
deber definir las funciones que:
a) Construya un trmino del polinomio
b) Identifique el coeficiente del trmino
c) Identifique el exponente del trmino
d) Construya una funcin que derive un trmino simple
e) Obtener un polinomio derivado a partir de la derivacin de cada uno de sus
trminos (utilice la funcin "map")

Trabajo prctico 5 auxiliar


;;;;;;;;;;;;;;;;;;;;;;;;;;;; prac7.s;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Manipulacin simblica de polinomios. Desarrollo de un lgebra
; simblica de polinomios.
;;; UNA DEFINICIN DEL TIPO ABSTRACTO DE DATO POLINOMIO.
;;; ******************************************************
;;; NOTA: Este fichero deber ser cargado al principio de la
;;; prctica 5 (ver ejercicio 1)
;;; I) OPERACIONES CON POLINOMIOS.
;;; Procedimientos que definimos para realizar las operaciones con
;;; polinomios.
;;; Es el polinomio cero ?
(define zero-poly?
(lambda (poly)
(and (zero? (grado poly)) (zero? (coef-lider poly)))))
Pgina 8 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

;;; Construye el monomio con el grado y coeficiente dados.


(define haz-term
(lambda (gra coef)
(poly-cons gra coef el-zero-poly)))
;;; Devuelve el monomio de mayor grado del polinomio.
(define term-lider
(lambda (poly)
(haz-term (grado poly) (coef-lider poly))))
;;; Suma de polinomios.
(define p+
(lambda (poly1 poly2)
(cond
((zero-poly? poly1) poly2)
((zero-poly? poly2) poly1)
(else (let ((n1 (grado poly1))
(n2 (grado poly2))
(a1 (coef-lider poly1))
(a2 (coef-lider poly2))
(rest1 (rest-de-poly poly1))
(rest2 (rest-de-poly poly2)))
(cond
((> n1 n2) (poly-cons n1 a1 (p+ rest1 poly2)))
((< n1 n2) (poly-cons n2 a2 (p+ poly1 rest2)))
(else
(poly-cons n1 (+ a1 a2) (p+ rest1 rest2)))))))))

;;; Producto de polinomios.


(define p*
(letrec
((t* (lambda (term poly)
(if (zero-poly? poly)
el-zero-poly
(poly-cons
(+ (grado term) (grado poly))
(* (coef-lider term) (coef-lider poly))
(t* term (rest-de-poly poly)))))))
(lambda (poly1 poly2)
(letrec
((p*-aux (lambda (p1)
(if (zero-poly? p1)
el-zero-poly
(p+ (t* (term-lider p1) poly2)
(p*-aux (rest-de-poly p1)))))))
(p*-aux poly1)))))

;;; Opuesto de un polinomio.


Pgina 9 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

(define neg-poly
(lambda (poly)
(let ((poly-neg-uno (haz-term 0 -1)))
(p* poly-neg-uno poly))))
;;; Resta de polinomios.
(define p(lambda (poly1 poly2)
(p+ poly1 (neg-poly poly2))))
;;; Valor de un polinomio (visto como funcin) en un nmero.
(define valor-poly
(lambda (poly num)
(letrec
((pvalor (lambda (p)
(let ((n (grado p)))
(if (zero? n)
(coef-lider p)
(let ((rest (rest-de-poly p)))
(if (< (grado rest) (- n 1))
(pvalor (poly-cons
(- n 1)
(* num (coef-lider p))
rest))
(pvalor (poly-cons
(- n 1)
(+ (* num (coef-lider p))
(coef-lider rest))
(rest-de-poly rest))))))))))
(pvalor poly))))
;;; II) CONSTRUCTORES Y SELECTORES (1a. forma).
;;; Representamos los polinomios por una lista en la que estn los
;;; coeficientes del polinomio, ordenados desde el coeficiente de la
;;; mxima potencia (coef-lider) al trmino independiente.
;;; Necesitamos (ver operaciones anteriores):
;;; * el polinomio cero
;;; * tener acceso al grado, al coef-lder y al resto del polinomio
;;; * construir un polinomio, a partir de su grado, su coef-lider, y
;;; el resto del polinomio (un pol. de grado menor).
;;; El polinomio cero.
(define el-zero-poly '(0))
;;; Grado de un polinomio.
(define grado
(lambda (poly)
(- (length poly) 1)))
;;; Coeficiente del monomio de mayor grado.
Pgina 10 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

(define coef-lider
(lambda (poly)
(car poly)))
;;; Polinomio obtenido quitando el monomio de mayor grado.
(define rest-de-poly
(lambda (poly)
(cond
((zero? (grado poly)) el-zero-poly)
((zero? (coef-lider (cdr poly)))
(rest-de-poly (cdr poly)))
(else (cdr poly)))))
;;; Polinomio obtenido aadiendo un termino de mayor grado (gra) con
;;; coeficiente (coef) al polinomio (poly)
(define poly-cons
(lambda (gra coef poly)
(let ((gra-p (grado poly)))
(cond
((and (zero? gra) (equal? poly el-zero-poly)) (list coef))
((< gra-p gra)
(if (zero? coef)
poly
(cons coef
(append (lista-de-ceros (- (- gra gra-p) 1))
poly))))
(else (error "poly-cons: Grado demasiado alto en:" poly))))))
;;; Lista de n ceros.
(define lista-de-ceros
(lambda (n)
(if (zero? n)
'()
(cons 0 (lista-de-ceros (- n 1))))))

Pgina 11 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

TRABAJO PRCTICO 6:
1) Evala las siguientes expresiones, razonando el resultado:
a) (map (lambda (x) (* x x)) '(1 2 3 4 5 6))
b) (map pair? '((a.b) (1 2 3) 1 2 3))
c) (let ((imprime (lambda (x) (display x) (newline) (string-length x))))
(for-each imprime '("Lista" "de" "strings")))
d) (let ((imprime (lambda (x) (display x) (newline) (string-length x))))
(map imprime '("Lista" "de" "strings")))
e) (define aplica-a-dos
(lambda (f) (f 2)))
f) (aplica-a-dos sqrt)
g) (aplica-a-dos (lambda (x) (* x x)))
h) (aplica-a-dos even?)
i) (map aplica-a-dos (list sin (lambda (x) (expt x 3)) odd?))
j) (define tonta
(lambda (f)
(lambda (x) (f x))))
a) ((tonta sqrt) 2)
b) (apply + '(1 2))
c) (apply (lambda (x y z) (list z y x)) '(a b c))
2) Definir una funcin que contenga "map", utilizarla y evaluar sus resultados
3) Definir una funcin que contenga "set!", utilizarla y evaluar sus resultados
4) Definir una funcin que contenga "set-car!", utilizarla y evaluar sus resultados
5) Definir una funcin que contenga "set-cdr!", utilizarla y evaluar sus resultados
6) Definir una funcin que contenga "putprop", utilizarla y evaluar sus resultados
7) Definir una funcin que contenga "getprop", utilizarla y evaluar sus resultados
8) Definir una funcin que contenga "member", utilizarla y evaluar sus resultados
9) Definir una funcin que contenga "list-ref", utilizarla y evaluar sus resultados
10) Evala las siguientes expresiones, razonando el resultado:
a) (define v1 (vector 1 45 67 8))
b) (define v2 (make-vector 5 'hola))
c) (vector-ref v1 0)
d) (vector-ref v1 2)
e) (vector-set! v2 4 'adis)
f) (vector-ref v2 4)
11) Observa cual es el valor de x despus de evaluar cada expresin:
a) (define x 100)
b) (set! x 200)
Pgina 12 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

c) (set! x (+ x 3))
d) (define lista-vect1
(let ((v (make-vector 3 0)))
(list v v)))
e) (vector-set! (car lista-vect1) 1 45)
lista-vect1
f) (define lista-vect2
(list (make-vector 3 0) (make-vector 3 0)))
(vector-set! (car lista-vect2) 1 45)
lista-vect2
12) Define un procedimiento producto-escalar que tome como entrada dos vectores
numricos y devuelva el producto escalar de ambos, si son de la misma dimensin, y
un mensaje de error en caso contrario.
(producto-escalar #(1 3 2) #(3 5 7)) ==> 32
(producto-escalar #(1 3 2) #(3 5))
==> ERROR: producto-escalar: dimensiones errneas
13) Define un procedimiento vector-sust de tres argumentos de modo que (vector-sust x
y v) devuelve como valor un vector igual que v, salvo en aquellas componentes
iguales a x, que habrn sido sustituidas por y.
(vector-sust 2 'dos #(c 2 45 8 2 #t)) ==> #(c dos 45 8 dos #t)
(vector-sust 'par 'impar #(3 par "oh" par 8)) ==> #(3 impar "oh" impar 8)
(vector-sust 'par 'impar #(1 3 4 5 6)) ==> #(1 3 4 5 6)
(vector-sust 'par 'impar #()) ==> #()
14) Define un procedimiento filtra-vector que tome como entrada un predicado, p, y
evuelva como valor un procedimiento que reciba como entrada un vector, v, y
devuelva como valor un vector formado por los elementos de v que verifican p.
((filtra-vector even?) #(2 3 6 8 9)) ==> #(2 6 8)
((filtra-vector symbol?) #(a b 3 "hola" #t 6 fin)) ==> #(a b fin)
((filtra-vector symbol?) #(1 2 3)) ==> #()

Pgina 13 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

TRABAJO PRCTICO 7:
1) Definir un grafo que contenga la siguiente estructura:
a) (define Grafo1 '((A1 () ) (A2 () ) (A3 (A1 A2) ) (A4 (A2 A3) ) ) )
comprueba su comportamiento y analiza si puedes transformar lo definido en un grafo
dirigido
2) Definir los siguientes grafos dirigidos con la siguiente estructura (hijo (padres) )
a) m1 -- m3
m2 -- m3
m2 -- m4
m3 -- m4
b) m1 -- m2
m2 -- m3
m2 -- m4
m3 -- m5
m3 -- m6
m4 -- m5
m5 -- m6
c) m1 -- m2
m2 -- m3
m2 -- m4
m3 -- m5
m4 -- m3
m4 -- m5
m5 -- m6
3) Definir una funcin que muestre un hijo a partir de su posicin
4) Definir una funcin que muestre un padre a partir de su posicin
5) Definir una funcin que muestre todos los hijos y a todos los padres
6) Armar una lista con todos los hijos de un grafo
7) Armar una lista con todos los padres de un grafo
8) Borrar un nodo determinado de un grafo
9) Agregar un nodo al comienzo y al final del grafo
10) Un rbol binario numrico (ABN de aqu en adelante) es una estructura de datos
recursiva que consta de un nmero entero no negativo (llamado raz del rbol) y de
dos ABN llamados hijo izquierdo e hijo derecho. Existe un ABN muy particular que
no tiene raz ni hijos que llamaremos el rbol vaco. En nuestra implementacin,
usaremos la siguiente representacin de los ABN:
- El rbol vaco lo representaremos por la lista vaca ().
Pgina 14 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

- Un rbol binario con raz n, hijo izquierdo HI e hijo derecho HD lo representaremos


por la lista de tres elementos (HI n HD) donde HI, HD son la representacin del hijo
izquierdo e hijo derecho respectivamente.
a) Evala las siguientes definiciones de constructores y selectores que define el
tipo abstracto de dato ABN:
;;; es rbol vaco?
(define vaco? null?)
;;; El rbol vaco
(define el-vacio ())
;;; raz de un rbol
(define raz
(lambda (a)
(if (vaco? a)
(error "raz: es un rbol vaco")
(cadr a))))
;;; hijo izquierdo
(define hi
(lambda (a)
(if (vaco? a)
(error "hi: es un rbol vaco")
(car a))))

;;; hijo derecho


(define hd
(lambda (a)
(if (vaco? a)
(error "hd: es un rbol vaco")
(caddr a))))
;;; construye un rbol
(define haz-arbol
(lambda (raz hi hd)
(list hi raz hd)))
b) Evala la siguiente definicin de recursion-abn y explica su comportamiento
general.
;;; Patrn de recursin sobre arboles binarios.
(define recursion-abn
(lambda (germen proc)
(letrec
((aux
(lambda (a)
(if (vaco? a)
germen
(proc (raz a) (aux (hi a)) (aux (hd a)))))))
aux)))
Pgina 15 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

c) Usando el anterior patrn de recursin, define:


* Una funcin suma1 que recibiendo como entrada un ABN A devuelve el ABN
A' obtenido a partir de A sumando 1 a cada nodo
* Una funcin aplicaf que recibiendo como entrada una funcin f (con
argumento numrico y valor numrico) y un ABN A, devuelve el ABN A'
obtenido de A aplicando a cada nodo la funcin f
* Una funcin elimina-si-no-p que recibiendo como entrada un predicado p (con
argumento numrico) y un ABN A, devuelve el ABN A' en el que se han
"podado" aquellos subrboles cuya raz no verifica p.

Pgina 16 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

TRABAJO PRCTICO 8: Clculo Lambda


1) Utilice la definicin dirigida por sintaxis para sustitucin a fin de verificar las
siguientes igualdades:
a) {u/x} (u.x) = (z. u)
b) {u/x} (u.u) = (z. z)
c) {u/x} (y.x) = (y. u)
d) {u/x} (y.u) = (y. u)
2) Indicar cuales de los siguientes son trminos bien formados del clculo lambda:
a) (x. z. ((x z) (y t)) (w x. (x x)))
b) (xy. (x (x y)) x. y. (x (x y)))
c) (x (x. (t u) (s. (s s. S))))
3) Para los anteriores, indicar el conjunto de variables libres.
4) Evaluar las siguientes sustituciones
a) [y. ( x y) /x] y. (x x. x)
b) [y. (v y) /x] (y v. (x v))
c) [(x y) /x] xy. X
5) Reducir aplicando Beta:
a) (xy. x (x y))
b) ((x. z. (z x) z) v)
c) (v. (x y) (x. (x (x y)) x. (x (x y)))
6) Verifique las siguientes igualdades:
a) SIII= I donde S es igual a xyz. (x z) (y z) e I es igual a x. x
b) doble(doble) f x = f (f (f (f x ))), donde doble es igual a fx. f (f x))
7) Construya trminos del clculo lambda, aadiendo tipos a cada uno de los siguientes
trminos puros:
a) x. x
b) xy. x
c) xyz. (x z) (y z)
d) (x. x) (x. x)
e) (xyz. (x z) (y z)) (x. x) (x. x)
8) Definir en el clculo lambda extendido la constante >= de modo que represente la
relacin orden usual ("mayor o igual") sobre los nmeros naturales.
9) Definir max de modo que represente la funcin que determina el mximo de dos
naturales dados.

Pgina 17 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

PARADIGMA ORIENTADO A
OBJETOS
TRABAJO PRCTICO 1:
1) En la figura siguiente Mueble es una clase. Mesa y Sillas son subclases (hijos) y as
sucesivamente. Como representara la jerarqua por medio de textos sangrados.
Mueble

Mesa

Silla

Silla-1
Mesa-2

Mesa-1

2) En una jerarqua de herencia orientada a objetos, tal como la que se muestra en el


grfico precedente en que cada nivel es una forma ms especializada del anterior.
D tres ejemplos mas de una jerarqua encontrada en la vida diaria que tenga la
misma propiedad.
3) Tome un problema del mundo real, como la accin de enviar flores a la abuela, vista
en clase, y describa la solucin al problema en trminos de objetos y
responsabilidades.
4) Describa las responsabilidades de una organizacin que comprenda al menos seis
tipos de individuos. (Por ejs. En una escuela: estudiantes, profesores, director,
conserje - en un negocio: secretaria, gerente, trabajadores...) para cada de
individuos, describa responsabilidades y colaboradores.
5) Para cada uno de los pares siguientes, diga si la relacin es es-un o tiene-un:
a) casa - techo
b) conserje - empleado
c) ratn digital - dispositivo de entrada
d) men - ventana
e) conjunto - coleccin
f) Describa luego 5 (cinco) pares ms de cada una de las relaciones
Pgina 18 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

6) Entre dos objetos puede existir todo tipo de relaciones semnticas, que dependen de
la aplicacin concreta en la que participan dichos objetos. Veamos un ejemplo:
Supongamos que vamos a construir un diccionario on-line, un diccionario
informatizado que permita al usuario obtener sobre la pantalla la definicin de una
palabra cualquiera. Supongamos que, en dicho diccionario, las palabras sn objetos

y que la organizacin jerrquica es la que procede de forma natural de la estructura


de nuestros conocimientos sobre el mundo. Estableciendo una relacin Trabajo
(trazo discontinuo) Cules sern las preguntas que se podrn responder con las
relacin
7) Veamos el caso de una jerarqua compleja, como la de la siguiente figura y los
objetos heredan cierta propiedad o cierto mtodo. Paro ello tendremos que analizar
si lo poseen algunos de sus padres, y si no lo tienen a los padres de estos y as
sucesivamente , o bien si lo poseen dos de sus antecesores, deber analizar y
explicar las siguientes consideraciones:
a) Que predomine en primer antepasado en el que aparezca en mtodo.
b) Que predomine el antepasado cuyo parentesco con el objeto considerado sea
ms prximo.
c) Que no predomine ninguno de los dos, sino que el objeto herede ambas
propiedades simultneamente considerando lo siguiente:
i) Que el objeto herede la disyuncin de los dos valores.
Pgina 19 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

ii) Que el objeto herede la conjuncin de los dos valores.


iii) Que el objeto herede un valor predominante, pero no en funcin del
antepasado sino en funcin del valor mismo.
A

Cuntos atributos tiene la clase Cirujano?: ___


Cuntos atributos tiene la clase MedicoDeCabecera?: ___
Pgina 20 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

Cuntos mtodos tiene la clase Doctor?: ____


Cuntos mtodos tiene la clase Cirujano?: ____
Cuntos mtodos tiene la clase MedicoDeCabecera?: ____
Puede un MedicoDeCabecera tratar pacientes?: ____
Puede un MedicoDeCabecera hacer incisiones?: ____

Pgina 21 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

TRABAJO PRCTICO 2:
1)
Con un editor de texto cualquiera editar un
fichero llamado: HolaMundo.java
// La clase HolaMundo simplemente muestra
// el mensaje Hola mundo por pantalla
class HolaMundo {
public static void main (String[] args) {
System.out.println(Hola mundo!);
}
}

Compilacin
C:\> dir
HolaMundo.java
C:\> javac HolaMundo.java
C:\> dir
HolaMundo.class
HolaMundo.java

Ejecucin
C:\> dir
HolaMundo.class
HolaMundo.java
C:\> java HolaMundo
Hola mundo!

2)
Ejemplo
public MiClase
{
int i;
public MiClase()
{ i = 10; }
public void sumaAi( int j
{ i = i + j; }
}

Pgina 22 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

3)
AWT - Ejemplos

// Circunferencia.java = dibuja 2 circunferencias


import java.awt.*;
import java.awt.event.*;
class Circunferencia extends Frame {
public j007() {
setTitle("Dos circunferencias");
}
public static void main(String [] args) {
Frame f=new Circunferencia();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
f.setSize(300,200);
f.setVisible(true);
}
public void paint(Graphics g){
g.setColor(Color.red);
g.drawOval(10,30,30,30);
g.setColor(Color.blue);
g.drawOval(35,30,30,30);
g.drawString("Dos circunferencias",40,100);
}
}

Pgina 23 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

// Elipses.java = dibuja 2 elipses


import java.awt.*;
import java.awt.event.*;
class j008 extends Frame {
public Elipses() {
setTitle("Dos Elipses");
}
public static void main(String [] args) {
Frame f=new Elipses();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
f.setSize(300,200);
f.setVisible(true);
}
public void paint(Graphics g){
g.setColor(Color.green);
g.drawOval(10,30,250,150);
g.setColor(Color.yellow);
g.drawOval(40,55,200,125);
g.setColor(Color.black);
g.drawString("Dos Elipses",100,100);
}
}

4)
Ejemplo (Promedio.java)
class Promedio
{
public static void main(String[] args)
{ int i = 11, j = 20;
double a = (i + j) / 2.0;
System.out.println(El valor de i es: + i + y el de j es: + j);
Pgina 24 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

System.out.println(El promedio es de: + a);


}
}

5)
Control de Flujo (Bucles)
Public class Bucles
{
public static void main(String[] args)
{
int cont1 = 0;
while(cont1 <3)
{
System.out.println(cont1);
Cont1++;
}
int cont2 = 0;
do
{
System.out.println(cont2);
Cont2++;
}
while(cont2 < 2);
for(int cont3 = 0; cont3 < 3; cont3++)
{
System.out.println(cont3);
}
}
}

6)
Desarrollar un programa que muestre por pantalla los nmeros primos del 1 al
1000 y todos los aos bisiestos entre el ao 2000 y el ao 3000.
Public class Practica
{
public static void main(String[] args)
{
//Mostrar los nmeros primos del 1 al 1000.
bolean sw;
int contador = 0;
System.out.println(Los nmeros primos del 1 al 1000 son:);
for(int i=1; i<1001; i++)
{
sw = true;
for(int j=i; j>0; j--)
{
Pgina 25 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

if(i%j == 0 && j != i && j ! = 1)


{
sw = false;
break;
}
}
}
if(sw)
{
System.out.println(i + ,);
Contador++;
}
}
System.out.println();
System.out.println(Hay: + contador + nmeros primos entre el 1 y el
1000.);

//Mostrar los aos bisiestos del 2000 al 3000.


Contador = 0;
System.out.println(Los aos bisiestos del 2000 al 3000 son:);
for(int i=2000; i<3001; i++)
{
if((i%4 == 0 && i%100 != 0) || i%400 == 0)
{
System.ut.println(i + ,);
Contador++;
}
}
System.out.prinln();
System.out.printl(Hay: + contador + aos bisiestos entre el 2000 y el 3000.);
}
}

Pgina 26 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

TRABAJO PRCTICO 3:
HERENCIA
1)
Ejemplo Figuras geomtricas
Clase Abstracta
(No posee objetos ni
contructor)

Figura
area (): double
perimetro (): double

Rectangulo
Constructor

ancho: double
alto: double
Rectangulo (double anchura,
double altura)
area (): double
perimetro (): double
getAncho (): double
getAlto (): double

Mtodo que
devuelve el valor del
Atributo ancho

Relacin de Herencia

Elipse
semiMayor: double
Atributos/Variables semiMenor: double
de la clase
Elipse (double a, double
b)
Mtodos/Funciones area (): double
u Operaciones de la perimetro (): double
clase
getMayor (): double
getMenor (): double

Cuadrado

Circulo

Cuadrado (double lado)


getLado (): double

Circulo (double radio)


getRadio(): double

// fichero Figura.java
/** Orientacin a objetos */
public abstract class Figura {
public abstract double area ();
public abstract double perimetro ();
}

// fichero Rectangulo.java
/** Orientacin a objetos */
public class Rectangulo extends Figura {
// Variables de la clase
private double ancho;
private double alto;
// Mtodos de la clase
// Mtodo constructor
public Rectangulo (double anchura, double altura) {
ancho = anchura;
alto = altura;
Pgina 27 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

}
public double area () {
return alto*ancho;
}
public double perimetro () {
return 2*(alto+alto);
}
public double getAncho () {
return ancho;
}
public double getAlto () {
return alto;
}
}

// fichero Cuadrado.java
/** Orientacin a objetos */
public class Cuadrado extends Rectangulo {
// Mtodos de la clase
// Mtodo constructor
public Cuadrado (double lado) {
ancho = lado; // equivalente a: super (lado, lado);
alto = lado;
}
// Mtodo que retorna el valor del Atributo o miembro ancho
public double getLado () {
return ancho;
}
}

// fichero Elipse.java
/** Orientacin a objetos */
public class Elipse extends Figura {
// Variables de la clase
protected double semiMayor;
protected double semiMenor;
// Mtodos de la clase
// Mtodo constructor
public Elipse (double a, double b) {
if (a >= b) {
semiMayor = a;
Pgina 28 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

semiMenor = b;
} else {
semiMayor = b;
semiMenor = a;
}
}
public double area () {
return Math.PI*semiMayor*semiMenor;
}
public double perimetro () {
return Math.PI*(semiMayor+semiMenor);
}
public double getMayor () {
return semiMayor;
}
public double getMenor () {
return semiMenor;
}
}

// fichero Circulo.java
/** Orientacin a objetos */
public class Circulo extends Elipse {
// Mtodos de la clase
// Mtodo constructor
public Circulo (double radio) {
super (radio, radio);
}
public double getRadio () {
return semiMayor;
}
}

La palabra clave this hace referencia al objeto o instancia actual


public class MiClase {
int i;
public MiClase()
{ this.i = 10; }
}
Pgina 29 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

La palabra clave super hace referencia a la superclase de la clase que se


emplea
public class MiNuevaClase extends MiClase {
public void sumaAi( int j ) {
i = i + ( j/2 );
super.sumaAi( j );
}
}

2)

Ejemplo Animales
Clase 1
Animal
miVelocidad: int
miNombre: String
Animal(int vel, String nom)
saluda (): void
class Animal {
int miVelocidad;
String miNombre;
public Animal (int vel, String nom) {
miNombre= nom;
miVelocidad= vel;
};
public void saluda () {
System.out.println("Hola, soy "+miNombre);
}
}
class OOP1 {
public static void main (String arg []) {
Animal
laLiebre;
Animal
laTortuga;
laLiebre= new Animal (5,"L");
laLiebre.saluda();
laTortuga= new Animal (1,"T");
laTortuga.saluda();
}
}
Pgina 30 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

Clase 2
Animal
miVelocidad: int
miNombre: String
Animales: static int
Animal(int velocidad, String
nombre)
saluda (): void
cuantosAnimales(): void
class Animal {
int
miVelocidad;
String miNombre;
static int animales=0;
public Animal (int velocidad, String nombre) {
animales++;
miNombre= nombre;
miVelocidad= velocidad;
}
public void saluda () {
System.out.println ("Hola, soy "+miNombre);
}
public static void cuantosAnimales () {
System.out.println ("Hay "+animales+" animales");
}
}

class OOP2_static {
public static void main (String arg []) {
Animal
laLiebre;
Animal
laTortuga;
laLiebre= new Animal (5,"L");
Animal.cuantosAnimales();
laLiebre.saluda();
laTortuga= new Animal (1,"T");
Animal.cuantosAnimales();
laTortuga.saluda();
}
}
Pgina 31 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

Clase 3
Animal
miVelocidad: int
miNombre: String
Animal(int velocidad, String
nombre)
saluda (): void

Acuatico
marino: boolean
Acuatico(int vel, String nom, boolean mar)
saluda (): void

class Animal {
int miVelocidad;
String miNombre;
public Animal (int velocidad, String nombre) {
miNombre= nombre;
miVelocidad= velocidad;
};
public void saluda () {
System.out.println ("Hola, soy "+miNombre);
}
}
class Acuatico extends Animal {
boolean marino;
public Acuatico (int vel, String nom, boolean mar){
super(vel, nom);
marino=mar;
// los animales Acuaticos llevan prefijo "A_"
miNombre="A_"+miNombre;
}
public void saluda() {
super.saluda();
System.out.println("y soy acutico.");
}
Pgina 32 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

}
class OOP3_subclases {
public static void main (String arg []) {
Animal
laLiebre;
Acuatico laTortuga1;
Animal
laTortuga2;
laLiebre= new Animal (5,"L");
laLiebre.saluda();
laTortuga1= new Acuatico (1,"T1",true);
laTortuga2= new Animal (1,"T2");
laTortuga1.saluda();
laTortuga2.saluda();
}
}

Clase 4
Animal
miVelocidad: int
miNombre: String
Animal(int velocidad, String
nombre)
saluda (): void
corre (long distancia): void

Tortuga
deTierra: boolean
Tortuga(int velocidad, String nombre,
boolean tierra)
saluda (): void
class Animal {
int miVelocidad;
String miNombre;
public Animal (int velocidad, String nombre) {
miNombre= nombre;
miVelocidad= velocidad;
Pgina 33 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

}
public void saluda () {
System.out.println("\nHola, soy "+miNombre+" y mi velocidad es
"+miVelocidad);
}
public void corre (long distancia) {
for (long i=0; i<distancia;i++){
for (long j=0; j<100000000; j+=miVelocidad){;}
System.out.print (" "+miNombre);
}
System.out.println ("\n"+miNombre+" ha llegado !!!");
}
}

class Tortuga extends Animal {


boolean deTierra;
public Tortuga(int velocidad, String nombre, boolean tierra){
super(velocidad, nombre);
deTierra=tierra;
// las tortugas de tierra son el doble de veloces
if (deTierra) miVelocidad*=2;
}
public void saluda() {
super.saluda();
if (deTierra)
System.out.print ("y soy una tortuga de tierra\n");
else
System.out.print ("y soy una tortuga de mar\n");
}
}

class OOP4_corre {
public static void main (String arg []) {
Animal
laLiebre;
Tortuga laTortuga1;
Animal
laTortuga2;
laLiebre= new Animal (5,"L");
laLiebre.saluda();
laTortuga1= new Tortuga (1,"T1",false);
laTortuga2= new Tortuga (1,"T2",true);
Pgina 34 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

laTortuga1.saluda();
laTortuga2.saluda();
System.out.println("\nComienza la carrera:\n");
laLiebre.corre(10);
laTortuga1.corre(10);
laTortuga2.corre(10);
}
}

3)
Ejemplo Turno de mdico

Turno
int numeroOrden
String fecha
String hora
int dniPaciente
int matriculaMedico
String estado
int: getNumeroOrden()
String: getFecha()
String: getHora()
int: getDniPaciente()
String: getMatriculaMedico()
String: getEstado()
void: actualizarEstadoTurno(String
nuevoEstado)

Medico
int matricula
String nombre
String especialidad
int: getMatricula()
String: getNombre()
String: getEspecialidad()
Paciente
int dni
String nombre
String direccion
String telefono
int: getDni()
String: getNombre()
String: getDireccion()
String: getTelefono()

1- Segn el diagrama UML anterior, definir las clases Paciente, Medico y Turno.
2- Crear una clase llamada ReservaTurnos que:
a) Instancie dos pacientes,
b) Instancie dos medicos;
c) Instancie un turno para el paciente 1 del medico 2 a las 16 hrs,
d) Instancie un turno para el paciente 2 del medico 1 a las 18 hrs,
e) Suspenda el turno anterior, colocando su estado en Desocupado.
Nota: se deber mostrar los datos principales de los objetos a medida que sean creados,
ejemplo: El paciente Maria reservo el turno el dia 05/11/2003 a las 16:00 hrs. para el
Dr. Pirulo.
Pgina 35 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

4)
Ejemplo Reserva de un video club

Socio

Pelicula

int dni
String nombre
String direccion
String telefono

String codigo
String nombre
String estado
String categoria

int: getDni()
String: getNombre()
String: getDireccion()
String: getTelefono()

String: getCodigo()
String: getNombre()
String: getEstado()
void: actualizarEstadoPelicula(String
nuevoestado)

Reserva
int numero
String fecha
int dniSocio
String codigo
int: getNumero()
String: getFecha()
int: getDniSocio()
String: getCodigo()

Cd
String codigo
String nombre
String estado
String tipo
String: getCodigo()
String: getNombre()
String: getEstado()
void: actualizarEstadoCd(String
nuevoestado)

1- Segn el diagrama UML anterior, y teniendo en cuenta las clases reserva y socio
(ver que pueden haber sido creadas para otro ejemplo y se pueden utilizar) definir
las clases Pelcula y Cd.
2- Crear una clase llamada Biblioteca que:
f) Instacie dos socios,
g) Instancie una pelcula cuyo estado sea No Disponible,
h) Actualice el estado de la pelcula anterior a Disponible,
i) Instancie un CD cuyo estado sea No Disponible,
j) Actualice el estado del CD anterior a Disponible,
k) Instancie una reserva para el socio 1 de la pelcula del apartado b),
l) Instancie una reserva para el socio 2 del CD del apartado d),
Nota: se deber mostrar los datos principales de los objetos a medida que sean creados.
5)
Ejemplo Cuentas de Banco y operaciones bancarias
Desarrollar una clase llamada CuentaCorriente que:
Tenga dos atributos private de tipo Titular (Nombre String, Apellidos String
y Edad - int), de tipo String (el nmero de la cuenta) y el tipo double (el saldo).
Pgina 36 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

Tenga un constructor con parmetros de tipo Titular, String y double.


Tenga un constructor con parmetros de tipo Titular y String. El saldo se
inicializar en 150,30.
Tenga un getter para cada uno de los atributos.
Tenga un setter solo para el saldo.
Tenga un mtodo ingresar que incremente el saldo en una cantidad.
Tenga un mtodo reintegro que decremente el saldo en una cantidad.
Tenga un mtodo para que al imprimir la cuenta salga por pantalla el nmero de
cuenta y su saldo.
Tenga un mtodo para comparar cuentas, sabiendo que dos cuentas sern iguales
si sus nmeros de cuenta son iguales.
o Nota: para comparar dos String utilizar el mtodo compareTo(String)
que devuelve 0 si son iguales.

Desarrollar una clase llamada CuentaAhorro que:


Es una especializacin de CuentaCorriente.
Tiene un atributo ms de tipo double (el inters).
Tiene un constructor con parmetros de tipo Titular, String, double y double.
Tiene un constructor con parmetros de tipo Titular, String y double. El saldo se
inicializar en 150,30.
Tiene un constructor con parmetros de tipo Titular y String. El saldo se
inicializar en 150,30 y el inters a 2,5.
Tiene un getter para cada uno de los atributos.
Tiene un mtodo calcularInteres que incremente el saldo segn el inters.
CuentaCorriente
titular: Titular
num: String
saldo: double
CuentaCorriente(Titular, String, double)
CuentaCorriente(Titular, String)
getTitular(): Titular
getNum(): String
getSaldo(): double
setSaldo(double)
ingreso(double)
reintegro(double)
toString(): String
equals(Object): boolean

Titular
nombre: String
apellido: String
edad: int
Titular(String, String, int)
toString(): String

CuentaAhorro
interes: double
CuentaAhorro(Titular, String, double,
double)
CuentaAhorro(Titular, String, double)
CuentaAhorro(Titular, String)
getInteres(): double
l l
()

6)
Sistema de garaje
Pgina 37 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

Desarrollar un sistema de garaje siguiendo estas especificaciones:


En el garaje se cambian las ruedas tanto de coches como de motos. El precio del cambio
de una rueda se fija al abrir el garaje, al igual que la capacidad mxima de vehculos, ya
sean motos o coches. Si no hubiese lugar para registrar un vehculo nuevo, habr que
tener contemplado un sistema de aviso para quien est dejando su vehculo.
El sistema de gestin de garaje requiere un mecanismo para ingresar y retirar los
vehculos, conocer el nmero total de vehculos recibidos en ese momento, el precio que
supondra cambiar todas las ruedas de todos los vehculos, y el kilometraje medio de
todos ellos.
La informacin que manejaremos de los coches, entre otras cosas es la marca y el
nmero de puertas. Mientras que de las motos ser la marca y la cilindrada.
En el mtodo main, se crear el garaje, una serie de vehculos que se irn recibiendo en
el garaje y por ltimo se imprimir por pantalla toda la informacin general del garaje
as como la informacin de cada vehculo.

7)
Taller mecnico
Desarrollar un sistema de gestin de partes de un taller mecnico.
La informacin de las partes es: cdigo, descripcin e importe. Una parte ir
asociada a la matrcula de un coche de manera que podamos aadir, mostrar y
eliminar una parte a partir de la matrcula de coche al que est asociado.
El mtodo main mostrar por pantalla un men de opciones:
1- Crear
2- Listas
3- Mostrar
4- Eliminar partes.
5- Salir
Se usar una clase que nos permita obtener las entradas por teclado.

Pgina 38 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

8)
EJEMPLO: CLASES
El ejercicio consiste en que se empieza una ficticia guerra entre dos naves, una de
marcianos y otra de terrcolas, cada uno de los cuales va disparando, generando
nmeros aleatorios, y si acierta con el nmero asignado a algn componente de la otra
nave lo mata. Ganar aquella tripulacin en que queden guerreros vivos.
SerVivo

vivo: protected boolean


isVivo(): boolean

Guerrero

soy: private final String


blanco: protected int
Guerrero(String soy)
dispara( ): int
getBlanco( ): int
generaBlanco( ): int

Marciano

Terricola

total: private static int


soy: private String

total: private static int


soy: private String

Marciano(String soy)
recibeDisparo(int i)
getTotal( ): static int

Terricola(String soy)
recibeDisparo(int i)
getTotal( ): static int

Nave

Guerra

tripulacion: Guerrero[ ]
somos: String

nave1 : private Nave


nave2 : private Nave

Nave(String somos)
recibeDisparo(int i)
generaDisparo(int i): int
cuantosQuedan( ): int

Guerra( )
empiezaGuerra( )
main(String[ ] args)

Pgina 39 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

PARADIGMA LGICO
TRABAJO PRCTICO 1:
1) Evala las siguientes expresiones y clasifcalas en tomos, variables, smbolos
predicativos negados y no negados y conectivos:
a) raquel
b) 3200
c)
d) a, b, c,
e) A, B, C,
f) come (jos, pan)
g)
h) san francisco
i) ,
j) ~juega(carlos, ftbol)
2) Para el clculo de predicados deben considerarse equivalencias consideradas
bsicas, deber determinarlas:
Expresin
Equivalencias
~(~X1)
X1 X2
~(X1 X2)
~(X1 X2)
X1 X2
X1 X2
X1 (X2 X3)
X1 (X2 X3)
X1 (X2 X3)
X1 (X2 X3)
X1 X2
3) Dados los siguientes predicados:
padre (X, Y)
X es el padre de Y
madre (X, Y)
X en la madre de Y
femenino (X)
X es femenino
masculino (X)
X es masculino
Defina las relaciones para:
a) hermanos
b) hermanas
c) nieto
d) primo
e) descendiente
4) A partir de los siguientes predicados:
padre (padre, hijo)
Pgina 40 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

madre (madre, hijo)


casados (hombre, mujer)
lindo (X)
y considerando los siguientes hechos:
juan es padre de marcelo y mara
miriam es la madre de ricardo
raul es el padre de sergio
marcelo es el padre de raul y rita
rita es la madre de victor y vernica
miriam y rita son lindas
se desea extrar las siguientes respuestas:
a) Quin es el abuelo de vctor
b) Quin es el nieto de ral
c) Quin es la hermana de vctor
d) Quin es la hermana de vernica
e) De quin es hija vernica
f) Quin est casado con alguien linda
g) Qu relacin familiar tienen las personas lindas
h) Quines son tos y cuales son sus sobrinos
Se debe escribir un programa capaz de responder a las interrogaciones anteriores
5) Plantear el siguiente problema en clusulas de Horn:
Un dragn es feliz si todas sus cras pueden volar
Los dragones verdes pueden volar
Un dragn es verde si al menos uno de sus progenitores es verde, en cualquier otro caso
es rosa.
Demostrar a travs de inferencias:
a) Que los dragones verdes son felices
b) Que debera ser un dragn rosa para ser feliz

Pgina 41 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

TRABAJO PRCTICO 2:
1) Considerando los siguientes predicados:
Persona (nombre, edad, sexo)
Mayor_edad (nombre, nombre)
Y sabiendo que:
Juan tiene 20 aos
Pedro tiene 30 aos
Luis tiene 28 aos
Ana tiene 10 aos
Alejandra tiene 43 aos
Jorge tiene 60 aos
... ingresar 10 ms
a) escribir un programa que permita identificar a las personas mayores de edad,
identificndolas como hombres y mujeres (recordar la mayora a los 21 aos)
b) escribir un programa que permita identificar a las personas de mayor edad en
cada uno de los sexos.
2) A partir de los siguientes predicados:
Persona (nombre, sexo)
Amistad (nombre, nombre)
Sospechoso (nombre)
Y considerando:
Brbara es amiga de Juan
Brbara es amiga de Roberto
Brbara es amiga de Mara
Susana es amiga de Juan
Susana es amiga de Pedro
Se debe escribir un programa en turbo prolog que permita individualizar a los
sospechosos del asesinato de susana. Para ello debemos considerar como sospechoso a:
Los hombres que tuvieron amistad con Susana
Las mujeres que tuvieron relacin con hombres que Susana conoca
Los amigos de mujeres que tuvieron relacin con hombres que Susana conoca.
3) Dado la siguiente situacin, un jurado debe determinar el orden de llegada de los
corredores de una carrera, pero por una extraa razn los corredores manifiestan lo
siguiente:
Antonio: Yo no he llegado ltimo
Bernardo: Carlos ha llegado tercero
Carlos: Antonio ha llegado inmediatamente despus de Ernesto
Daniel: Ernesto ha llegado en segundo lugar
Ernesto: Daniel no gan la carrera
Carlos: Lleg despus de Antonio
Se logrado determinar que los dos primeros mienten y los otros no. Podremos ayudar
al jurado a determinar el orden de llegada de los corredores?.
4) En base a las siguientes afirmaciones:
Todo hongo es una seta o un champignon.
Pgina 42 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

Todo boletus es un hongo.


Todas las setas son venenosas.
Ningn boletus es un champignon.
Se pide realizar un programa en Turbo-prolog que determine cuales son los hongo
posibles de ser comidos.
5) Resuelva a travs de Turbo-Prolog el siguiente problema:
Antonio y Miguel son socios del Club Alpino.
Todo socio del Club Alpino que no es un esquiador es un escalador de montaas.
A los escaladores de montaas no les gusta la lluvia.
Si a alguien no le gusta la nieve no es un esquiador.
A Miguel le disgusta todo lo que a Antonio le gusta, y le gusta todo lo que a Antonio le
disgusta.
A Antonio le gusta la lluvia y la nieve.
Plantear el siguiente objetivo: Existe algn socio del Club Alpino que sea escalador de
montaas pero no esquiador, Quien?.
6) Deber realizar un programa en turbo-prolog que determine identificar arcos:
Ejemplo: Objetivo identificar arcos: Arco: sucesin de bloques que forman un dintel
y dos columnas.
Dictaminar si hay algn arco formado por estos bloques:
Y= dintel
X= pilar
Z= pilar

Y
X

(este es un arco)

Ejercicios:
a)
d
a

b)
b
d
a

e
c

Pgina 43 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

TRABAJO PRCTICO 3:
1) Dado un mapa como el siguiente, en el cual se indican las ciudades, las distancias
entre ellas y cuantos kilmetros son de camino de tierra (la cantidad entre
parntesis). Se le solicita que construya un programa PROLOG, cuyo predicado
permita indicar de cuantos caminos alternativos se
A

5 (2)
3 (1)

2 (0)

B
6 (3)
6 (1)

E
10 (4)

1(0)

2 (2)

4 (1)
D

C
2 (2)

disponen para realizar el recorrido entre dos ciudades y cuales son sus distancias
indicando cuantos de stos kilmetros son de tierra para cada recorrido.
2) El objetivo del presente es poder llegar al tesoro de manera segura, para ello deber
definir la ruta desde la entrada al tesoro, sabiendo que los predicados pueden ser
definidos de la siguiente manera:
GALERIA(caverna,caverna)
VECINAS(caverna,caverna) (unidas por una galera)
PELIGRO(caverna) (Los peligros son las cavernas de: Alarma, Ladrones y Monstruos
RUTA(caverna,caverna)
Estos son solamente ejemplos, Ud. puede utilizar los mismos o bien definir unos
nuevos.
El formato aproximado del laberinto sera el siguiente:
CAVERNA
ALARMAS
LADRONES
ENTRADA

GALERA

GALERA

FUENTE

GALERA

COMIDA

GALERA

MONSTRUOS

TESORO

CAVERNA

Pgina 44 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

TRABAJO PRCTICO 4: Listas


1) Ingresando un nmero real y su factorial, deber responder verdadero si
corresponde, caso contrario falso.
2) Hallar el factorial de un nmero real.
3) Hacer una notacin para separar a cabeza de la cola de la lista: a travs del smbolo
"|". As, la lista [a,b,c] es [a|[b,c]].
4) Hallar los elementos que corresponde a la interseccin de dos listas ingresadas
5) Encontrar el mximo elemento de una lista
6) Hallar la longitud de una lista
7) Sumar los elementos de una lista
8) Determinar si un elemento es miembro de una lista
9) Eliminar un elemento de una lista
10) Ordenar los elementos de una lista de enteros
11) Concatenar dos listas
12) Hallar el n-esimo elemento de una lista
13) Invertir una lista
14) Recorrer un rbol, formando una lista con los nodos que se visitan
15) Determinar si un elemento aparece en un rbol
16) Dada una lista y un elemento, obtener una lista que no contenga dicho elemento

Pgina 45 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

TRABAJO PRCTICO 5: Programacin avanzada (opcional)


1) Definir un predicado Hanoi (N, A, B, C, Movin) que resuelva el problema de la
torre de Hanoi, con N discos, pasndolos de A a B usando C como auxiliar y siendo
Movim la secuencia de movimientos realizados.
2) Escribir un programa lgico para resolver el problema de las "ocho reinas". Esto es
determinar las formas en que pueden colocarse ocho reinas en un tablero de ajedrez
de modo que no se amenacen mutuamente.
3) Escribir un programa de lgica para resolver el siguiente problema:
Tres misioneros y tres canbales estn en la orilla izquierda de un ro. Hay un bote
para cruzar el ro, con capacidad a lo sumo para dos personas. Todos deben cruzar el
ro. Si en algn momento en una de las orillas quedan ms misioneros que
canbales, stos sern convertidos por aquellos. Encontrar modos de transportar los
misioneros y canbales a travs del ro sin exponer ningn canbal al peligro de la
conversin.
4) Escribir un programa de lgica para resolver el siguiente problema:
Hay tres hombres: Juan, Pedro y Jos, cada uno de los cuales tiene dos profesiones.
Sus ocupaciones son las siguientes: chfer, contrabandista de licores, msico, pintor,
jardinero y barbero.
En base a los siguientes hechos determnese el par de profesiones que corresponde a
cada hombre:
El chfer ofendi al msico rindose de su cabello largo.
El msico y el jardinero solan ir a pescar con Juan.
El pintor compr al contrabandista un litro de ginebra.
El chfer cortejaba a la hermana del pintor.
Pedro deba $ 5 al jardinero.
Jos venci a Pedro y al pintor jugando al tejo.

Pgina 46 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

TUTORIAL DE TURBO-PROLOG
F U N C T I O N K E Y S

F1

F2

Pop-Up
Goto to Line
Help

F3

F4

Search
Replace

Srch Again R. Again

F5

F6

Copy
Move Text

Copy Again

F7

F8

Delete Text Aux Edit

F9

F10

Extern copy End editor


View wind Resize wind

SPECIAL COMBINATIONS

Ctrl <- Move to previous word

Ctrl -> Move to next word

CtrlPgUp Goto to start of the text

CtrlPgDn Goto the end of the text

CtrlHome Goto start of page

CtrlEnd Goto end of page

CtrlBKS Delete actual line

Ctrl V Insert/Overwrite

Del Delete

Ins Insert/Overwrite

The second function of the function-keys is activated when SHIFT is


used
SPECIEL KEYS
============
Ctrl F10
Alt T

Toggle the size of edit window


Toggle trace mode

WORDSTAR COMPATIBLE COMMANDS


============================
WORDSTAR
PC
CURSOR MOVEMENTS:
COMMAND
KEY

Character left
Ctrl-S
Character right
Ctrl-D
Word left
Ctrl-A
Ctrl
Word right
Ctrl-F
Ctrl

Line up
Ctrl-E

Line down
Ctrl-X
Page up
Ctrl-R
PgUp
Page down
Ctrl-C
PgDn
To left on line
Ctrl-Q-S
Home
To right on line
Ctrl-Q-D
To top of page
Ctrl-Q-R
Ctrl
To bottom of page
Ctrl-Q-X
To top of file
Ctrl-Q-R
Ctrl
To end of file
Ctrl-Q-C
Ctrl
To beginning of block
Ctrl-Q-B
To end of block
Ctrl-Q-K
To last cursor position
Ctrl-Q-P
INSERT &
Insert
Insert
Delete
Delete
Delete

DELETE
COMMAND
KEY
mode on/off
Ctrl-V
line
Ctrl-N
line
Ctrl-Y
to end of line
Ctrl-Q-Y
right word
Ctrl-T

- 
-

End
- Home
Ctrl - End
- PgUp
- PgDn

Ins

Pgina 47 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

Delete char under cursor


Delete left character
BLOCK COMMANDS
Mark block begin
Mark block end
Hide/display block
Copy block
Move block
Delete block
Read block from disk
Write block to disk
Print block

Ctrl-G
Ctrl-H

COMMAND
KEY
Ctrl-K-B
Ctrl-K-K
F8
Ctrl-K-H
Ctrl-K-C
Ctrl-K-V
Ctrl-K-Y
Ctrl-K-R
Ctrl-K-W
Ctrl-K-P

Del


F7

MISC. COMMANDS
COMMAND
KEY
Tab
Ctrl-I
Repeat last find/replace
Ctrl-L
Find
Ctrl-Q-F
Find & replace
Ctrl-Q-A
Auto tab on/off
Ctrl-Q-I

C O L O R S

HOW TO CALCULATE SCREEN ATTRIBUTES.

1. Choose ONE foreground color and ONE background color.

2. Add the corresponding integer values below.

3. Add 128 if you want blinking.

BACKGROUND-COLORS (Screen)
FOREGROUND-COLORS (Characters)
------------------------+---------+----------------+-----------Black
0
Black
0
Blue
16
Blue
1
Green
32
Green
2
Cyan
48
Cyan
3
Red
64
Red
4
Magenta
80
Magenta
5
Brown
96
Brown
6
White
112
White
7
Grey
8
Light Blue
24
Light Green
40
Light Red
72
Light Magenta
88
Yellow
104
White (High Intensity) 120

STANDARD PREDICATES

Pgina 48 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

INPUT
=====
file_str(DosFileName,StringVariable)
File <---> String
(string,string) -- (inp,outp) (inp,inp)
inkey(CharVariable)
(Char) -- (outp)
keypressed
readchar(CharVariable)
(char) -- (outp)
readint(IntgVariable)
(integer) -- (outp)
readln(StringVariable)
(string) -- (outp)
readreal(RealVariable)
(real) -- (outp)

FILESYSTEM
==========
closefile(SymbolicFileName)
(file) -- (inp)
deletefile(DosFileName)
(string) -- (inp)
disk(DosPath)
(string) -- (inp) (outp)
eof(SymbolicFileName)
(file) -- (inp)
existfile(DosFileName)
(string) -- (inp)
filemode(SymbolicFileName,TextOrBinaryMode)
(file,integer) -- (inp,inp)
filepos(SymbolicFileName,FilePosition,Mode)
(file,real,integer) -- (inp,inp,inp) (inp,outp,inp)
Mode specifies: 0:Start 1:Relative 2:End
(When using mode 2, negative filepositions points inside the
file)
flush(SymbolicFileName)
(file) -- (inp)
openappend(SymbolicFileName,DosFileName)
(file,string) -- (inp,inp)
openmodify(SymbolicFileName,DosFileName)
(file,string) -- (inp,inp)
openread(SymbolicFileName,DosFileName)
(file,string) -- (inp,inp)

Pgina 49 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

openwrite(SymbolicFileName,DosFileName)
(file,string) -- (inp,inp)
readdevice(SymbolicFileName)
(file) -- (inp) (outp)
renamefile(OldDosFileName,NewDosFileName)
(string,string) -- (inp,inp)
writedevice(SymbolicFileName)
(file) -- (inp) (outp)

SCREEN HANDLING
===============
attribute(Attr)
(integer) -- (inp) (outp)
cursor(Row,Column)
(integer,integer) -- (inp,inp) (outp,outp)
cursorform(Startline,Endline) 0<Startline<14, 0<Endline<14
(integer,integer) -- (inp,inp)
field_str(Row,Column,Length,String)
(integer,integer,integer,string) -- (inp,inp,inp,inp)
(inp,inp,inp,outp)
field_attr(Row,Column,Length,Attr)
(integer,integer,integer,integer)
-- (inp,inp,inp,inp) (inp,inp,inp,outp)
scr_char(Row,Column,Char)
(integer,integer,char) -- (inp,inp,inp) (inp,inp,outp)
scr_attr(Row,Column,Attr)
(integer,integer,integer) -- (inp,inp,inp) (inp,inp,outp)

WINDOW SYSTEM
=============
clearwindow()
gotowindow(WindowNo)
(integer) -- (inp)
makewindow(WindowNo,ScrAtt,FrameAtt,Framestr,Row,Column,Height,Width)
(integer,integer,integer,string,integer,integer,integer,integer)
-- (inp,inp,inp,inp,inp,inp,inp,inp)
(outp,outp,outp,outp,outp,outp,outp,outp)
removewindow()
scroll(RowsToScroll,ColsToScroll)
(integer,integer) -- (inp,inp)
shiftwindow(WindowNo)
(integer) -- (inp) (outp)
window_str(ScreenString)
(string) -- (inp) (outp)
Pgina 50 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

window_attr(Attr)
(integer) -- (inp)

STRING HANDLING
===============
concat(String1,String2,String3) String3 = String1 + String2
(string,string,string) -- (inp,inp,outp) (inp,outp,inp)
(outp,inp,inp) (inp,inp,inp)
frontchar(String,FrontChar,RestString)
(string,char,string) -- (inp,outp,outp) (inp,inp,outp)
(inp,outp,inp) (inp,inp,inp) (outp,inp,inp)
frontstr(Lenght,Inpstring,StartString,RestString)
(integer,string,string,string) -- (inp,inp,outp,outp)
fronttoken(String,Token,RestString)
(string,string,string) -- (inp,outp,outp) (inp,inp,outp)
(inp,outp,inp) (inp,inp,inp) (outp,inp,inp)
isname(StringParam)
(string) -- (inp)
str_len(String,Length)
(string,integer) -- (inp,inp) (inp,outp)

CONVERSIONS
===========
char_int(CharParam,IntgParam)
(char,integer) -- (inp,outp) (outp,inp) (inp,inp)
str_int(StringParam,IntgParam)
(string,integer) -- (inp,outp) (outp,inp) (inp,inp)
str_char(StringParam,CharParam)
(string,char) -- (inp,outp) (outp,inp) (inp,inp)
str_real(StringParam,RealParam)
(string,real) -- (inp,outp) (outp,inp) (inp,inp)
upper_lower(StringInUpperCase,StringInLowerCase)
(string,string) -- (inp,inp) (inp,outp) (outp,inp)

GRAPHICS
========
dot(Row,Column,Colour)
(integer,integer,integer) -- (inp,inp,inp) (inp,inp,outp)
graphics(ModeParam,Palette,Background)
(integer,integer,integer) -- (inp,inp,inp)
line(Row1,Col1,Row2,Col2,Colour)
(integer,integer,integer,integer,integer)
-- (inp,inp,inp,inp,inp)
text()

Pgina 51 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

TURTLE GRAPHICS
===============
back(Step)
(integer) -- (inp)
forward(Step)
(integer) -- (inp)
left(Angle)
(integer) -- (inp)
pencolor(Color)
(integer) -- (inp)
pendown
penpos(RowCoordinate,ColumnCoordinate,Angle)
(Integer,Integer,Integer) -- (inp,inp,inp) (outp,outp,outp)
penup
right(Angle)
(integer) -- (inp)

MISCELLANEOUS
=============
beep A short sound
bios(Interruptno,reg(AXi,BXi,CXi,DXi,SIi,DIi,DSi,ESi),
reg(AXo,BXo,CXo,DXo,SIo,DIo,DSo,ESo))
Activate a system interrupt
(integer,REG,REG) -- (inp,inp,outp) (inp,inp,reg(outp,outp ... )
bitand(X,Y,Z) : Z=X and Y
(integer,integer,integer) -- (inp,inp,outp)
bitleft(X,Y,Z) : Z=X shiftet Y places to the left
(integer,integer,integer) -- (inp,inp,outp)
bitnot(X,Y) : Y= not X
(integer,integer) -- (inp,outp)
bitor(X,Y,Z) : Z=X or Y
(integer,integer,integer) -- (inp,inp,outp)
bitright(X,Y,Z) : Z=X shiftet Y places to the left
(integer,integer,integer) -- (inp,inp,outp)
bitxor(X,Y,Z) : Z=X exor Y
(integer,integer,integer) -- (inp,inp,outp)
comline(LineBuffer)
(String) -- (inp)
consult(DosFileName) Load a database from file
(string) -- (inp)
date(Year,Month,Day)
Pgina 52 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

(integer,integer,integer) -- (outp,outp,outp) (inp,inp,inp)


/* Show a picture of the directory and return a filename */
dir(Path,Filespec,Filename)
(string,string,string) -- (inp,inp,outp)
display(String)
(string) -- (inp)
edit(InputString,OutputString)
(string,string) -- (inp,outp)
editmsg(InputString,OutputString,Headstr,Headstr2,Msg,Pos,Helpfileenam
e,RetStatus)
(string,string,string,string,string,integer,string,integer)
-- (inp,outp,inp,inp,inp,inp,inp,outp)
exit

Return to menu system

fail

is always false and force backtracking

membyte(Segment,Offset,Byte)
(integer,integer,integer) -- (inp,inp,inp)

(inp,inp,outp)

memword(Segment,Offset,Word)
(integer,integer,integer) -- (inp,inp,inp)

(inp,inp,outp)

nl

New line

port_byte(PortNo,Value)
(integer,integer) -- (inp,inp) (inp,outp)
ptr_dword(8086Ptr,Segment,Offset)
(string,integer,integer) -- (inp,otp,outp) (outp,inp,inp)
random(RealVariable)
(real) -- (outp)
save(DosFileName) Save the database on file
(string) -- (inp)
sound(Duration,Frequency)
(integer,integer) -- (inp,inp)
storage(StackSize,HeapSize,TrailSize)
(real,real,real) -- (outp,outp,outp)
system(DosCommandString)
(string) -- (inp)

Call the dos system shell

time(Hours,Minutes,Seconds,Hundredths)
(integer,integer,integer,integer) -(outp,outp,outp,outp)
(inp,inp,inp,inp)

SPECIAL - PREDICATES
====================
asserta( Term )
assertz( Term )
bound( Variable )
findall( Variable, Atom, ListVariable )
Pgina 53 de 54

Paradigmas de Programacin

Jos Oscar Mugetti Mare

free( Variable )
not( Atom )
readterm( Domain, Variable )
retract( Term )
write( Variable|Constant * )
writef( FormatString, Variable|Constant * )

OPTIONS

trace

traces all predicates.

trace p1,p2,..

trace predicates p1,p2,... only.

shorttrace
p11.4.9)

tracing without disturbing system optimizing. (Ref.

nowarnings

Suppress warnings from variable used only once

nobreak

Predicates should not scan the keyboard to see


if CTRL-BREAK has been pressed.

check_determ
This directive instructs the compiler to give a
warning
about the presence of a nondeterministic clause.
In combination with this directive, the programmer has
the option to explicitly describe which state of
determinism any predicate is supposed to have - by
prefixing the predicate-declaration with either of the
two keywords: determ or nondeterm.
check_cmpio Check for use of compound flowpatterns.
diagnostics Print compiler diagnostics
config "ConfigFileName"
Configuration file loaded by EXE-module.
include "filename"
Include a PROLOG file during compilation.

Adjustment of compiler tables:


******************************
code=nnn
Size of the code array in paragraphs (default 1000).
trail=nnn
Size of the trail in paragraphs (default 10).


Pgina 54 de 54

You might also like