Zvire-0.02.el

Z Wikiverzity

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))