;applicazione funzioni presenti in OBJECT-extension.LISP
;caricare prima file in memoria
;estende1

(prog1
(print"")

(defobject foo)
(print(ask foo(have 'numero1 5)))
(defobject bar)
(print(ask bar(have 'numero1 4)))
(defobfun(somma bar)(n)(+ n n))
(defobfun(prodotto bar)(n)(* n n))
(defobfun(cubo bar)(n)(* n n n))
(defobfun(quarta bar)(n)(* n n n n))
(print(ask foo(ask-funcall bar somma numero1)))
(print(ask foo(ask-funcall bar prodotto numero1)))
(print(ask foo(ask-funcall bar cubo numero1)))
(print(ask foo(ask-funcall bar quarta numero1)))

)

;applicazione funzioni presenti in OBJECT-extension.LISP
;caricare prima file in memoria
;estende2
;stampa titolo finestra e suona beep 4 volte

(prog1
(print"")

(mapc-ask(windows)(print(window-title)(ed-beep))
(print(ed-beep)))
)

;applicazione funzioni presenti in OBJECT-extension.LISP
;caricare prima file in memoria
;estende3
;torna lista titoli finestre aperte

(prog1
(print"")

(print(mapcar-ask(windows)(window-title)))
)

;estende4
;precaricare da LIBRARY il file OBJECT-extension.lisp
;----------------------------------------------------
;funzione CLASS-OBJECTP

(prog1
(print"")

(print(class-objectp *window*));;;;;T
(defobject foo)
(print(class-objectp foo));;;;;;;;;;T
(print(ask foo(class-objectp)));;;;;T
(setq bar(kindof))
(print(class-objectp bar));;;;;;;;;;nil
)

;estende6
;precaricare da LIBRARY il file OBJECT-extension.lisp
;----------------------------------------------------
;funzione DEFinstancevars
;modifica con nomi in italiano se non parole chiave
;TITOLO invece di BAR

(prog1
(print"")

(defobject titolo)
(defclassvars titolo(a 1)(b 2))
(definstancevars titolo (ax 10)bx)
(setq sigla(oneof titolo))
(setq varia(oneof titolo))
(print(ask sigla a));;;;;;;;1
(print(ask varia a));;;;;;;;1
(print(ask sigla(setq a 2)))
(print(ask sigla ax));;;;;;;10
(print(ask varia ax));;;;;;;10
(print(ask sigla (setq ax 20)))
(print(ask varia ax));;;;;;;10
)
ritorna