Objetos.lsp



;---------------------------------------------------------------
;CORRER CON:
;PARA AREAS
;	(SETF CIRCULO (MAKE-CIRCULO :RADIO 5))
;	(AREA CIRCULO)
;	O
;	(SETF FIGURA (MAKE-RECTANGULO :ANCHO 5 :ALTURA 6))
;	(AREA FIGURA)
;PARA LOS ARTICULOS
;	(DOLIST (AMIGO AMIGOS) (DOLIST (ARTICULO ARTICULOS)
;		(IMPRIME-NOTIFICACION ARTICULO AMIGO)))
;_______________________________________________________________
(defstruct triangulo	(base 0) (altura 0) )
(defstruct rectangulo	(ancho 0) (altura 0) )
(defstruct circulo	(radio 0) )

(defmethod area ((figura triangulo))
	(* 1/2
		(triangulo-base figura)
		(triangulo-altura figura)
	)
)

(defmethod area ((figura rectangulo))
	(*
		(rectangulo-ancho figura)
		(rectangulo-altura figura)
	)
)

(defmethod area ((figura circulo))
	(* pi (expt (circulo-radio figura) 2))
)

(defclass articulo()
	((titulo :accessor articulo-titulo :initarg :titulo)
	 (autor :accessor articulo-autor :initarg :autor))
)

(defclass articulo-de-computacion (articulo) () )
(defclass articulo-de-finanzas (articulo) () )
(defclass articulo-de-politica (articulo) () )

(defclass amigo ()
	((nombre :accessor nombre-de-amigo :initarg :nombre)))

(defclass amigo-programador (amigo) () )
(defclass amigo-empresario (amigo) () )
(defclass amigo-filosofo (amigo) () )

(setf articulos
	(list (make-instance 'articulo-de-finanzas
			     :titulo "La memoria baja de precio")
	      (make-instance 'articulo-de-computacion
			     :titulo "La memoria es mas veloz")
	      (make-instance 'articulo-de-politica
			     :titulo "La memoria es impugnada")
	)
)

(setf amigos
	(list
		(make-instance 'amigo-programador :nombre "Daniel")
		(make-instance 'amigo-programador :nombre "German")
		(make-instance 'amigo-empresario :nombre "David")
		(make-instance 'amigo-filosofo :nombre "Victor")
	)
)


(defun imprime-notificacion (articulo amigo)
	(format t "~%Decir a ~a acerca de \"~a. \""
		(nombre-de-amigo amigo)
		(articulo-titulo articulo))
	t
)