Zvire-0.02.el
Demonstrační program Zvire-0.02.el, tj. verse 0.02. Poslední verze viz Zvire.el
; Zvire
; =====
; Copyleft Kychot 1997
; Verse 0.02 - bodka namísto seznamu
;
; Pocitac hada zvire
; napr:
; Je to zvire chlupate?
; - ano
; Je to zvire domaci?
; - ne
; Tak je to tygr!
; chlupate: ano: -----------> domaci: ano: ----> kocka
; ne: ---> ryba ne: ----> tygr
; (car '(zaba zluva))
; (cdr '(zaba zluva))
; (cdr '(zluva))
(defvar zverinec nil "Vsechny zvirata, ktere si pamatuju.")
(defvar zvirata nil "Zvirata, ktera pripadaji v uvahu.")
; puvodni zpusob zapisu pomoci seznamu:
; (setq zverinec '(chlupate (domaci kocka tygr) ryba))
; novy zpusob zapisu pomoci bodka-dvojic (cons cells):
(setq zvirata '(chlupate (domaci kocka . tygr) . ryba))
; (hadej zvirata)
; (hadej '(chlupate (domaci kocka . tygr) . ryba))
(defun hadej (zvirata)
"Pokusi se uhodnout zvire."
(if (hadej-porad zvirata)
(if (y-or-n-p "Děkuji za hru. Ještě jednou? ") (hadej zvirata))
(message "To mě mrzí.")))
; (hadej-porad zvirata)
; (hadej-porad '(chlupate (domaci kocka . tygr) . ryba))
(defun hadej-porad (zvirata)
"Rekurse: Podle seznamu 'zvirata' se porad pta na vlastnost
a nakonec rekne zvire. Neni-li to ono, vrati nil."
(if (consp zvirata)
(hadej-porad (hadej-jednou zvirata))
(odpovez zvirata)))
(defun hadej-jednou (zvirata)
"Podle seznamu 'zvirata' se zapta na vlastnost
a vrati podseznam."
(let ((vlastnost-zvire (car zvirata))
(takovi-onaci (cdr zvirata)))
(if (zeptej-se vlastnost-zvire)
(car takovi-onaci)
(cdr takovi-onaci))))
; (zeptej-se 'šedivé)
(defun zeptej-se (vlastnost)
"Zepta se na vlastnost zvirete."
(y-or-n-p (format "Je to zvire %s? " vlastnost)))
; (odpovez 'myš)
(defun odpovez (zvire)
"Odpovi uhadnute zvire."
(y-or-n-p (format "Je to %s! Ze mam pravdu? " zvire)))
(setq zvirata zverinec)
(setq zvirata (hadej-jednou zvirata))