Está en la página 1de 31

AO DEL BUEN SERVICIO AL CIUDADANO

UNIVERSIDAD NACIONAL SAN LUIS GONZAGA DE ICA


FACULTAD DE INGENIERIA DE SISTEMAS

DOCENTE: ING. CHAVEZ GUILLEN, ROLANDO

ALUMNO: VALENZUELA RAMOS, YORGHINIO ALDAIR

CURSO: SISTEMAS EXPERTOS

CICLO: IX

ICA PERU
2017
EJERCICIOS DE LISPWORKS
LABORATORIO N 1
Hacer 20 ejercicios usando los comandos SETQ y SET

COMANDOS DESCRIPCION
(setq respuesta (+ 5 7)) Le asigno a la variable respuesta
el valor de 5+7
setq x 24 Le asigno a la variable x el valor 24

setq answer x Le asigno a la variable answer el


resultado de x
(setq resultado (+ 21 answer)) Le asigno a la variable resultado
la suma de 21 + el resultado de
answer
(setq respuesta (/ 100 10)) Le asigno a la variable respuesta
el valor de 100 entre 10

setq probando respuesta Le asigno a la variable probando


el valor de respuesta
(setq probando1 (/ probando 10)) Le asigno a la variable probando1
el valor de probando entre 10

setq myanswer 120 Le asigno a la variable myanswer


el valor de 120
setq result myanswer Le asigno a la variable result el valor
de myanswer
set 'resul1 result Le asigno a la variable result1 el
valor de result
set 'a 20 Le asigno a la variable a el valor de
20
set 'b a Le asigno a la variable b el valor
de a
(set 'x (+ 20 b)) Le asigno a la variable x el valor de
20 + b
(set 'h (- 20 5)) Le asigno a la variable h el valor
de 20-5
(set 'r (- h 5)) Le asigno a la variable r el valor de
h -5
set 'l 56 Le asigno a la variable l el valor de
56
(set 'o (+ 20 45)) Le asigno a la variable o el
valor de 20 + 45
(set 'e h) Le asigno a la variable e el valor de
h
(set 'h (+ 20 20)) Le asigno a la variable h el valor
de 20 +20
set 'e h Le asigno a la variable e el valor de
h.
Hacer 20 ejercicios usando los comandos CAR, QUOTE, ATOM, CDR,
CONS, LIST, FIRST, REST, PRINT, SETQ.

COMANDOS DESCRIPCION
CAR '(A B C) Muestra el primer elemento que es
A
SETQ X 20 Le asigno a la variable X el valor
20
CAR '(X B C) Muestra el primer elemento que es
X
quote(hola mundo) Muestra el valor hola mundo
QUOTE((ESTAMOS) Muestra dos elementos
IMPROVISANDO) (ESTAMOS) e IMPROVISANDO
(CAR(QUOTE((HOLA)QUE Muestra el primer elemento que es
HACE))) (HOLA)
(FIRST '( AB CV DF)) Muestra el primer elemento que es
AB
(REST '(A B C)) Muestra todos los elementos
restantes menos el primero
ATOM 436436 Muestra el resultado T ya que
se mantiene en regla
ATOM(QUOTE(FFREFREF)) Muestra el resultado de Nil ya
que es una lista
ATOM(QUOTE TRHT) Muestra el resultado de T a que se
mantiene en regla
(PRINT (* 4 6)) Muestra el valor de 6 *4
ATOM(QUOTE Y65) Muestra el valor de T ya que se
mantiene en regla
(CDR '(A B C)) Muestra todos menos el primer
valor
CDR '(RF R D) Muestra el valor R, D menos el
primer valor
CONS 'A 'B Muestra el valor A B dentro de una
lista
CONS 'A '(BCD) Muestra el valor de (A BCD)
dentro de una lista
(CONS 'A '(CONS 'B '(CONS 'C Muestra el valor de (A B C D E)
'(CONS 'D 'E)))) dentro de una lista
(CONS 'A (CONS 'B 'C)) Muestra el valor de (A BC)
(let((x 1) (a 2))(* x a)) Muestra el valor de x * a con su
valor de x=1 y a=2
Hacer 25 ejercicios de FUNCIONES PRIMITIVAS donde incluye
las operaciones +, -, *, /, Max, mix

COMANDOS DESCRIPCION
(- (+ 2 5) ( + 2 3)) Muestra la resta de ambas sumas.

( / (+ 10 5) ( - 10 7)) Muestra la divisin de la suma


entre la resta
(* (+ 2 4) ( + 5 3)) Muestra la multiplicacin de
ambas sumas.
(+( * ( + 1 4) ( + 2 5)) 5) Muestra la suma de la
40 multiplicacin ms 5.
( + ( + 4 3) (+ 2 4) ( + 1 1)) Muestra la suma de las sumas.
( / 100 100) Muestra la divisin
quote( +2 3) Muestra lo que se ha ingresado.
setq x 20 Muestra el valor de x.
(+ 5 x) Muestra la suma de x+5.
(* (+ 5 x) (+ x x)) Operaciones con la variable x.
set 'y 35 Muestra el valor de y
(+ x y) Sumamos x, y.
setq z 22 Muestra el valor de z.
(+ x y z) Sumamos x, y, z.
(+ (+ x x) (+ y y) (+ z z)) Operaciones con x, y, z.
( / (+ x x) 2) Operaciones con x.
( * ( + x y z) 4) Operaciones con x, y, z.
( / (* ( + 8 2) 5) 2) Operaciones con nmeros
ingresados.
(CONS 'A (CONS 'B 'C)) Unimos los datos que se han ingresado.

(let((x 1) (a 2))(* x a)) Muestra resultado de datos


ingresados.
setq a 20, setq b 30, setq c 40 Muestra los valores de a, b,
c.
( /(+ ( + a a) (+ b b) (+ c c)) 3) Operaciones con a, b, c.
(+(- c a )b) Operaciones con a, b, c.
(+ a b c) Operaciones con a, b, c.
(*(- c b) (+ a b c)) Operaciones con a, b, c.
LABORATORIO N 2
Hacer 25 ejercicios usando los comandos SQRT, SETF, EXPT,
MAX, MIN, SETQ
COMANDOS DESCRIPCION
sqrt 20 Muestra el valor de 4.472136.
sqrt 25 Muestra el valor de 5.
setf x 20 Muestra que la variable x
tiene el valor de 20.
(setf a (+ x 5)) Muestra que la variable a
tiene el valor de x+5.
sqrt a Muestra el valor de a que es 5.
expt 5 3 Muestra el valor de 125.
(expt 25 0.5) Muestra el valor de 5.
(expt 121 (/ 1 2)) Muestra el valor de 11.
max 4 5 6 Muestra el mximo valor que
es 6.
max 4 7 8 4 3 26 Muestra el mximo valor que
es 26.
min 25 4 67 4 3 Muestra el mnimo valor que
es 3.
setq x (/ 1 2) Muestra que la variable x
tiene el valor de 1 / 2.
expt 25 x Muestra el valor de 5.
(expt 36 (+ 0 0.5)) Muestra el valor de 6.
setq a 100 Muestra que la variable a
tiene
el valor de 100.
sqrt a Muestra el valor de a que es 10.
(setq x (max 2 4 5)) Muestra el valor de x que es el
mximo valor que es 5.
min 12 34 24 56 x Muestra el mnimo valor que
es x =5.
expt (* 6 6) ( / 1 2) Muestra el valor de 6*6 que
es 6.
( setf h ( + 2 4 5)) Muestra el valor de h que
es 2+4+5.
(expt (expt 2 3) (/ 1 Muestra la potencia de las
(min 3 8 10))) operaciones dadas.
2.0(expt 16 0.5)
(expt 16 0.5) Muestra la raz cuadrada
de 16.
(expt 11025 0.5) Muestra la raz cuadrada
de 11025.
(+ 5 (expt 2 4)) Muestra la suma del 5 y la
potencia dada.
(+ 15 (expt 15 2)) Muestra la suma del 15 y
la potencia dada.
Hacer 25 ejercicios usando los comandos FIRST, ENDP, EQ,
SETQ, REVERSE, PRINT
COMANDOS DESCRIPCION
first '( d a f) Muestra el primer valor que
es d
first(rest '(a b c)) Muestra el primer valor
del resultado de rest
first(rest (rest '(a bc d a))) Muestra
que es b el primer valor del
resultado de dos veces rest
que es d
(setf a (+ x 5)) Muestra el valor que d a
que es x +5
(endp '(34 43 6)) Muestra el valor de Nil ya que
no es una lista vaca
(endp '()) Muestra el valor de T ya que
es una lista vaca
(endp '(124)) Muestra el valor NIL ya que
no es una lista vaca
(endp(rest '(4))) Muestra el valor T ya que no
es una lista vaca
(rest (rest '(a bc d e))) Muestra el valor de D
(eq 'a 'a) Muestra el valor de T ya que
son iguales
(eq 'a 'b) Muestra el valor de NIL ya
que no son iguales
(setq x 'ola) Muestra el valor de la variable
x que es ola
(eq 'hola 'x) Muestra el valor NIL ya que
no son iguales
(eq 'ola 'x) Muestra el valor T ya que el
valor de x es igual a ola
(setq x 'abc) Muestra el valor de x que es
abc
(setq str "abc") Muestra el valor de str que
es abc
(reverse str) Muestra al revs el
resultado que es dcba
(setq x "abcd") Muestra el valor de x que es
abcd
(reverse x) Muestra el valor al revs de x
(reverse Muestra el valor al revs que
afvgb) es bgvfa
(eq (cons 'a 'b) (cons 'a 'b)) Evala si los datos ingresados
son iguales.
(setq A "Anita lava la Muestra el valor de A.
tina")
(reverse A) Muestra el valor al revs de
A.
(setq B "YORGHINIO") Muestra el valor de B.

(reverse B) Muestra el valor al revs de


B.
Hacer 25 ejercicios usando los comandos LIST, APPEND,
CONS
COMANDOS DESCRIPCIN
(cons 5 nil) Construye una lista a raz de
los datos ingresados (5).
(cons 6(cons 3 nil)) Construye una lista a raz de
los datos ingresados (6 3).
(cons 5 (cons 2(cons nil 4))) Construye una lista a raz de
los datos ingresados (5 2 4).
(cons 4( cons 2( cons 2 nil))) Construye una lista a raz de
los datos ingresados (4 2 2).
(cons 'a nil) Construye una lista a raz de
los datos ingresados (A).
(cons 'a (cons 'b ( cons 'c nil))) Construye una lista a raz de
los datos ingresados (A B C).
(cons 'x (cons 'y (cons nil 'z))) Construye una lista a raz de los
datos ingresados (X Y Z).
(cons 'a '(g gtf )) Construye una lista a raz de los
datos ingresados (A G GTF).
(cons 'a(cons 'b '(fg r g r))) Construye una lista a raz de los
datos ingresados (A B FG R G R).
(append 'a) Retorna el valor de A.
(append '(a) '(b) '(c)) Retorna el valor de (A B C).
(append '(a b c d)) Retorna el valor de (A B C D).
(list '(a b c d)) Retorna el valor de (A B C D).
(quote (append 'a)) Muestra el valor de (A).
(cons 2 ( cons 'a nil)) Construye una lista a raz de
los datos ingresados (2 A).
(cons 'h (cons 0 (cons 'l (cons Construye una lista a raz de los
'a nil)))) datos ingresados (H 0 I A).
(cons 2 (cons 0 (cons 3 (cons Construye una lista a raz de los
'- (cons nil 'a))))) datos ingresados (2 0 3 - A).
(append '(h o l a)) Retorna el valor de (h o l a).
(list (append '(h) '(o l a))) Retorna el valor de ((h o l a)).
(append '(h o l a)) Retorna el valor de (h o l a).
(cons 'v '(a l e n z u e l a)) Construye una lista a raz de los datos
ingresados (V A L E N Z U E L A).
(list 'y 'o 'r 'g 'h 'i 'n 'i 'o) Construye una lista a raz de los datos
ingresados (Y O R G H I N I O).

(append '(a) '(l) '(d) '(a) '(i) '(r)) Retorna el valor de (A L D A I R).
(append '(h) '(o l a)) Retorna el valor de (H O L A).
(list 'm '(u n d o)) Retorna el valor de (M (U N D O).
Hacer 25 ejercicios usando los comandos LENGTH, LISTTP,
LIST, FIRST, LAST, SQRT

COMANDOS DESCRIPCION
(last '(1 2 3 4 5 6 7)) Devuelve el ltimo
elemento de la lista 7.
(first '(1 2 3 4 5 6 7)) Devuelve el primer
elemento de la lista 7.
(last (rest '(1 2 3 4 5 6 7))) Devuelve el ltimo elemento de la lista
7.
pero a partir del segundo elemento
(list 'a 'b 'v 2 34) Genera una lista (A B V 34).
(list 'a 'b 'c 'd 'e) Genera una lista (A B C D E).
(list 'a '(b) '(c)) Genera una lista (A (B) (C).
(list 'h 'o 'l 'a (sqrt 4) (/ (expt Genera una lista a raz de algunas
5 2) 5)) operaciones (H O L A 4 5).
(list '(a b) '(a b c d) 'f 'g 'h) Genera una lista a raz de algunas
operaciones (( A B) (A B C D) F G H).

(setq mostrar li) Asigna a mostrar el valor de li.


(setq x mostrar) Asigna a x el valor de
(print x) mostrar.el valor de
Muestra x
(length '( f g tr h)) Cuenta los elementos que tiene la lista
ingresada.

(length '( r (jJjjk f) g)) Cuenta los elementos que tiene la lista
ingresada.

(setq str "abcd") Asigna un valor a str.


(length str) Cuenta los elementos que tiene str.
(listp '(mn)) Devuelve T porque es una lista.
(listp nil) Devuelve NIL porque no es una lista.
(listp'()) Devuelve T porque es una lista.
(listp 'a) Devuelve NIL porque no es una lista.
(listp '(abcd)) Devuelve T porque es una lista.
(setq str "yorghinio") Asigna un valor a str.
(length str) Cuenta los elementos que tiene str.
(listp '(m n)) Devuelve T porque es una lista.
(listp 'a) Devuelve NIL porque no es una lista.
(listp '(a)) Devuelve T porque es una lista.
RESOLVER EJERCICIOS DEFINIENDO
FUNCIONES
1) Se quiere plantear una funcin llamada donde-es cuando
se ingrese Madrid, debe decir Espaa, cuando se ingrese
Roma debe decir Italia, cuando se ingrese Paris debe decir
Francia, caso contrario Pas desconocido. Utilice defund y
cond.
(defun donde-esta (estado) ( case estado
(madrid 'espaa)
(roma 'italia)
(paris 'francia)
(t 'desconocido)
)
)

2) Se quiere plantear una funcin llamada media que calcule


la media de dos nmeros. Utilice defun.
(defun media ( a b)
( / (+ a b) 2)
)
3) Se quiere plantear una funcin llamada suma que calcule
la suma de dos nmeros. Utilice defun.
(defun suma (a b)
(+ a b)
)

4) Se quiere plantear una funcin llamada suma que calcule


el cuadrado de cada uno de los elementos de una lista.
Utilice defun.

1 Paso:
(defun cuadrado (x)
(* x x)
)
2 Paso:
( defun sumaa ( a b)
(suma (cuadrado a) (cuadrado b))
)
La funcin suma llama a mi 3 ejercicio resuelto
anteriormente.
RECURSIVIDAD

1_ Obtenga la suma de los n primeros nmeros enteros positivos

1 Si x=1
sumapositivos(x)= x + sumapositivos (x-1) Otro caso

En Lisp:
CL-USER 15: 3 > (defun sumapositivos(x) (if (= x 1) 1 (+ x (sumapositivos (-
x 1)))))
SUMAPOSITIVOS
CL-USER 16 : 3 > sumapositivos 4
10

2_ Obtenga el exponente de u n nmero dado la base y el exponente a y b de


manera recursiva

1 exponente=0
power (a, b) = base*power (base, exponente-1) otro caso

En Lisp:
CL-USER 10: 3 > (defun power (base exponente) (if (eq exponente 0) 1 (*
base (power base (- exponente 1)))))
POWER
CL-USER 11: 3 > power 4 5
1024

3_ Obtener el producto de 2 enteros a y b de manera recursiva

producto (a, b) = a b=1


a+producto (a, b-1) otro caso

En lisp:
CL-USER 17: 3 > (defun producto (a b) (if (eq b 1) a (+ a (producto a (- b
1)))))
PRODUCTO
CL-USER 19: 3 > producto 80 50
4000

4_ Calcule el ensimo nmero Fibonacci mediante una funcin recursiva

0 si n=1
fibo(n)= 1 si n=2
fibo(n-1) +fibo(n-2)
En Lisp:
CL-USER 17 > (defun fibo(a) (if(eq a 1) 1 (if(eq a 2) 1 (+ (fibo(- a 1))
(fibo(- a 2))))))
FIBO
CL-USER 18 > fibo 5
5
5_ Calcule el factorial de un numero

En lisp:

CL-USER 1 > (defun facto(x) (if(eq x 0) 1 (* x (facto(- x 1)))))


FACTO
CL-USER 3 > facto 3
6

EJERCICIOS DADOS EN CLASES


1.- Tenemos 3 canbales y 3 misioneros que desean
cruzar de una orilla a otra por un ro, para ello
contamos con un bote que tiene capacidad para 2
personas, si el nmero de canbales es mayor al
nmero de misioneros se acaba el juego.
2.- Tenemos 2 jarras de 5lt. Y 3 lt. Totalmente
vacas, y solo con la medida que indica el tope ( no
existe medida de 1lt, 2lt, etc.), se desea que en la
jarra de 5lt. Est con 4 lt. De agua Exactamente.
LABORATORIO N 2.1
FUNCIONES RECURSIVAS
1) Algoritmo de Euclides ( M.C.D)
(defun c.m.d (a b)
(if (= b 0 ) a (c.m.d b (mod a b)))
)

2) Exponenciacin entera
(defun a ( a b )
( if (= b 0 ) 1 ( * a ( expt a (- b 1 ))))
)

3) Multiplication recursiva
(defun m (a b )
( if (= b 0 ) 0 (+ a (* a (- b 1 ))))
)

4) Fibonacci
CL-USER 17 > (defun fibo(a) (if (eq a 1) 1 (if (eq a 2) 1 (+ (fibo (- a 1))
(fibo (- a 2))))))
FIBO
CL-USER 18 > fibo 5
5

5) Contar todos los elementos de una lista


(defun li(lista)
(if (endp lista)
0
(if(atom(car lista))
(+ 1 (li(cdr lista)))
(+(li(car lista))(li(cdr lista)))
)))
LI
LABORATORIO N 3
CL-USER 1 > (defun buscarp(list m)
(cond
((null list) nil)
((not (listp (car list))) (if(eq (car list) m) (print "elemento
encountered") (buscarp (cdr
list) m)))
( t (buscarp(append (car list) (cdr list)) m))))
BUSCARP

CL-USER 2 > (defun buscar(list)


(cond
((null list) nil)
((not (listp (car list))) (print (car list)) (buscar (cdr list)))
( t (buscar (append (car list) (cdr list))))))
BUSCAR

CL-USER 3 > setq A '(1(2 4 5 8)(3 6 7))


(1 (2 4 5 8) (3 6 7))

CL-USER 4 > (defun buscarp (list m)


(cond
((null list) "elemento no
encontrado")
((not (listp (car list))) (if(eq
(car list) m) (print "elemento
encontrado") (buscarp (cdr
list) m)))
( t (buscarp (append (car list) (cdr list)) m))))
BUSCARP

CL-USER 5 > buscarp A 9


"elemento no encontrado"

CL-USER 6 > buscarp A 7

"elemento encontrado"
"elemento encontrado"
RBOL 1:

CL-USER 1 > setq B '(A (C (B) (D M (L H (F E G) (I J K))))))


(A (C (B) (D M (L H (F E G) (I J K))))))

CL-USER 2 > (defun buscarp (list m)


(cond
((null list) "elemento no encontrado")
((not (listp (car list))) (if(eq (car list) m) (print "elemento
encontrado") (buscarp (cdr
list) m)))
( t (buscarp (append (car list) (cdr list)) m))))
BUSCARP

CL-USER 3 > buscarp B 'Z


"elemento no encontrado"

CL-USER 4 > buscarp B 'K

"elemento encontrado"
"elemento encontrado"
RBOL AVL:

CL-USER 6 > setq C '(a (b d) (c (e g h) (f)))


(A (B D) (C (E G H) (F)))

REUTILIZAMOS:
CL-USER 2 > (defun buscarp (list m)
(cond
((null list) "elemento no encontrado")
((not (listp (car list))) (if(eq (car list) m) (print "elemento
encontrado") (buscarp (cdr
list) m)))
( t (buscarp (append (car list) (cdr list)) m))))
BUSCARP

CL-USER 7 > buscarp C 'a


"elemento encontrado"
"elemento encontrado"

CL-USER 8 > buscarp C 'f


"elemento encontrado"
"elemento encontrado"

CL-USER 9 > buscarp C 'j


"elemento no encontrado"
RBOL NO AVL:

CL-USER 10 > setq D '(j (k (m) (n (q) (r t))) (l (o) (p s)))


(J (K (M) (N (Q) (R T))) (L (O) (P S)))

REUTILIZAMOS:
CL-USER 2 > (defun buscarp (list m)
(cond
((null list) "elemento no encontrado")
((not (listp (car list))) (if(eq (car list) m) (print "elemento
encontrado") (buscarp (cdr
list) m)))
( t (buscarp (append (car list) (cdr list)) m))))
BUSCARP

CL-USER 11 > buscarp D 'q


"elemento encontrado"
"elemento encontrado"

CL-USER 12 > buscarp D 's


"elemento encontrado"
"elemento encontrado"

CL-USER 13 > buscarp D 'a


"elemento no encontrado"

CL-USER 14 > buscarp D 'w


"elemento no encontrado"
RBOL 2:

CL-USER 15 > setq E '(b (Ai (A) (B1)) (r (B2) (Ad (C) (D))))
(B (AI (A) (B1)) (R (B2) (AD (C) (D))))

REUTILIZAMOS:
CL-USER 2 > (defun buscarp (list m)
(cond
((null list) "elemento no encontrado")
((not (listp (car list))) (if(eq (car list) m) (print "elemento
encontrado") (buscarp (cdr
list) m)))
( t (buscarp (append (car list) (cdr list)) m))))
BUSCARP

CL-USER 16 > buscarp E 'b


"elemento encontrado"
"elemento encontrado"

CL-USER 17 > buscarp E 'Ad


"elemento encontrado"
"elemento encontrado"

CL-USER 18 > buscarp E 'B2


"elemento no encontrado"

CL-USER 19 > buscarp E 'B5


"elemento no encontrado"
PROBLEMAS CLIPS

PROBLEMA ALUMNO ANIMAL

CLIPS (Quicksilver Beta 3/26/08)


CLIPS> ;
;regla que-animal
;
(defrule que-animal
(initial-fact)
=>
(printout t "El animal es de sangre caliente? (si/no)? ")
(assert (tipo-sangre (read)))
)
CLIPS> ;
; regla como-sangre-caliente
;
(defrule como-sangre-caliente
(tipo-sangre si)
=>
(printout t "El animal ronronea (si/no)?")
(assert (animal-ronronea (read)))
)
CLIPS> ;
; regla como-sangre-nocaliente
;
(defrule como-sangre-nocaliente
(tipo-sangre no)
=>
(printout t "El animal es una serpiente" crlf)
)
CLIPS> ;
; regla como-animal-ronronea
;
(defrule como-animal-ronronea
(animal-ronronea si)
=>
(printout t "El animal es un gato" crlf)
)
CLIPS> ;
; regla como-animal-noronronea
;
(defrule como-animal-noronronea
(animal-ronronea no)
=>
(printout t "El animal es un perro" crlf)
)
o Caso 1:
CLIPS> (run);
El animal es de sangre caliente? (si/no)? si
El animal ronronea(si/no)?si
El animal es un gato
o Caso 2:
CLIPS> (run);
El animal es de sangre caliente? (si/no)? no
El animal es una serpiente
o Caso 3:
El animal es de sangre caliente? (si/no)? si
El animal ronronea(si/no)?no
El animal es un perro
PROBLEMA ALUMNO VINO

CLIPS (Quicksilver Beta 3/26/08)


CLIPS> ;
; regla que-carne
;
(defrule que-carne
(initial-fact)
=>
(printout t "El plato principal es carne roja? (si/no)? ")
(assert (tipo-carneroja (read)))
)
CLIPS> ;
; regla como-carne-roja
;
(defrule como-carne-roja
(tipo-carneroja si)
=>
(printout t "Entonces servir vino tinto" crlf)
)
CLIPS> ;
; regla como-carne-noroja
;
(defrule como-carne-noroja
(tipo-carneroja no)
=>
(printout t "El plato principal es ave? (si/no)?")
(assert (tipo-ave (read)))
)
CLIPS> ;
; regla como-plato-noave
;
(defrule como-plato-noave
(tipo-ave no)
=>
(printout t "El plato principal es pescado? (si/no)?")
(assert (tipo-pescado (read)))
)
CLIPS> ;
; regla como-plato-ave
;
(defrule como-plato-ave
(tipo-ave si)
=>
(printout t "El plato principal es pavo? (si/no)?")
(assert (tipo-pavo (read)))
)
CLIPS> ;
; regla como-plato-pavo
;
(defrule como-plato-pavo
(tipo-pavo si)
=>
(printout t "Entonces servir vino tinto"crlf)
)
CLIPS> ;
; regla como-plato-nopavo
;
(defrule como-plato-nopavo
(tipo-pavo no)
=>
(printout t "Entonces servir vino blanco"crlf)
)
CLIPS> ;
; regla como-plato-pescado
;
(defrule como-plato-pescado
(tipo-pescado si)
=>
(printout t "Entonces servir vino blanco"crlf)
)
CLIPS> ;
; regla como-plato-nopescado
;
(defrule como-plato-nopescado
(tipo-pescado no)
=>
(printout t "Entonces servir vino tinto"crlf)
)
o Caso 1:
CLIPS> (run);
El plato principal es carne roja? (si/no)? si
Entonces servir vino tinto
o Caso 2:
CLIPS> (run);
El plato principal es carne roja? (si/no)? no
El palto principal es ave? Si
El plato principal es pavo? Si
Entonces servir vino tinto
o Caso 3:
CLIPS> (run);
El plato principal es carne roja? (si/no)? no
El palto principal es ave? Si
El plato principal es pavo? no
Entonces servir vino blanco
o Caso 4:
CLIPS> (run);
El plato principal es carne roja? (si/no)? no
El palto principal es ave? no
El plato principal es pescado? si
Entonces servir vino blanco
o Caso 5:
CLIPS> (run);
El plato principal es carne roja? (si/no)? no
El palto principal es ave? no
El plato principal es pescado? no
Entonces servir vino tinto
EJERCICIO RELACIN PARENTEZCO
o DATOS:

% hechos
esposo(jose,blanca).
esposo(diana,milko).
hermano(erick,milko).
hijo(blanca,zoila).
hijo(milko,jose).
hijo(erick,jose).
hijo(sahomy,milko).
hijo(milko,blanca).
hijo(facundo,erick).

% regla
nieto(A,C):- hijo(A,B),hijo(B,C).
bisnieto(D,G):- hijo(D,E),hijo(E,F),hijo(F,G).
primo(H,K):- hijo(H,I),hermano(I,J),hijo(K,J).
tio(L,N):- hermano(L,M),hijo(N,M).
cuado(O,Q):- esposo(O,P),hermano(Q,P).
mama(T,R):- hijo(R,S),esposo(T,S).
nuera(U,W):- esposo(U,V),hijo(V,W).
suegro(Z,X):- esposo(X,Y),hijo(Y,Z).

% consultas
%?- nieto(A,C),write(A),write(" Es nieto de
"),write(C),write("\n").
%?- bisnieto(D,G),write(D),write(" Es bisnieto
de:"),write(G),write("\n").
%?- primo(H,K),write(" Primos:
"),write(H),write("y"),write(K), write("\n").
%?- tio(L,N),write(L),write(" Es tio de:
"),write(N),write("\n").
%?- cuado(O,Q),write(O),write(" Es cuado de:
"),write(Q),write("\n").
%?- mama(T,R),write(T),write(" Es mama de:
"),write(R),write("\n").
%?- nuera(U,W),write(U),write(" Es nuero de:
"),write(W),write("\n"),repeat().
?- suegro(Z,X),write(Z),write(" Es suegro de:
"),write(X),write("\n").
EJERCICIO StrawBerry Prolog

Ejemplo 2: Divisor alumno


Ejemplo 3: el General alumno
Ejemplo 4: Sofia alumno
%hechos
deportista(jose).
deportista(mario).
deportista(tomas).
fumador(tomas).
fumador(mario).
organizado(tomas).
organizado(jose).
organizado(antonio).
vegetariano(jose).
vegetariano(mario).
vegetariano(antonio).

%Regla
elegido(H):-
vegetariano(H),deportista(H),organizado(H),not(fumador(H)
).
no_elegido(I):-
fumador(I);vegetariano(I),organizado(I),not(deportista(I)
).

%Consulta
?-elegido(H),write("Sofa elegira a:
"),write("\n"),write(H),write("\n").
%?-no_elegido(I),write("Sofa no elegira a:
"),write("\n"),write(I),write("\n"),repeat().

También podría gustarte