Přeskočit na obsah

Zvire-0.03.el

Z Wikiverzity

Demonstrační program Zvire-0.03.el, tj. verse 0.03. Poslední verze viz Zvire.el


; Zvire
; =====
; Copyleft Kychot 1997
;
; Verse 0.03 - doplnovani 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

(defvar zverinec nil "Vsechna zvirata, ktere si pamatuju.")


(setq zverinec0 '("chlupaté" ("kočka" . "ryba"))

(setq zverinec1 '("chlupaté" ("domácí" "kočka" . "tygr") . "ryba"))

(setq zverinec2 '
("chlupaté" ("domácí" ("věrné" "pes" "víc chlupaté" "ovečka" "rohaté" ("více dojivé" "kravička" . "koza") . "kočka") "s velkýma ušima" "medvěd" . "tygr") "slizské" ("dlouhé" "had" "červené" "beruška" . "žába") "pernaté" "slepice" . "ryba")
)


(defun hadej (zvirata)
    "Hada podle seznamu (zvirata)."
    (let  ((vlastnost (car zvirata))
	   (takovi-onaci (cdr zvirata))
	   (vybrany)
	   (prvni-druha)
	   (nove-zvire)
	   (nova-vlastnost)
	  )
	(if (zeptej-se vlastnost)
		(setq prvni-druha 't vybrany (car takovi-onaci))
	    (setq prvni-druha nil vybrany (cdr takovi-onaci))
	)
	(if (consp vybrany)
		(hadej vybrany)
	    (if (odpovez vybrany)		; uhadnul jsem
		    (if (y-or-n-p "Děkuji za hru. Ještě jednou? ")
			    (hadej zverinec)
			(message "Příště nashledanou!")
		    )
		(progn				; neuhadnul
		    (setq nove-zvire (read-string
			"Jiné takové zvíře neznám. Jak se jmenuje? "))
		    (setq nova-vlastnost (read-string (format
			"A jaké je %s zvíře na rozdíl od zvířete zvaného %s? "
			nove-zvire vybrany)))
		    (if (y-or-n-p (format
		    "Mám si pamatovat, že %s je zvíře %s a %s není zvíře %s? "
			nove-zvire nova-vlastnost vybrany nova-vlastnost))
			(if prvni-druha
			    (setcar takovi-onaci
			    (cons nova-vlastnost (cons nove-zvire vybrany)))
			  (setcdr takovi-onaci
			  (cons nova-vlastnost (cons nove-zvire vybrany)))
			)
		    )
		    (if (y-or-n-p "Děkuji za poučení. Mám zase hádat? ")
			    (hadej zverinec)
		        (message "Bylo mi potěšením, nashledanou příště!")
		    )
		)
	    )
	)
    )
)
; (hadej zverinec)

; (zeptej-se 'šedivé)
(defun zeptej-se (vlastnost)
	"Zepta se na vlastnost zvirete."
	(y-or-n-p (format "Je to zvíře %s? " vlastnost)))

; (odpovez 'myš)
(defun odpovez (zvire)
	"Odpovi uhadnute zvire."
	(y-or-n-p (format "Je to %s! Že mám pravdu? " zvire)))

(defun a-or-n-p (otazka)
	"Jako y-or-n-p ale cesky a/n"
	(let ((odpoved))
	(setq odpoved (read-string (format "%s(a/n)" otazka)))
	(if (eq odpoved 'a) 't
		(if (eq odpoved 'n) nil
			(a-or-n-p otazka)))))
; (a-or-n-p 'zkouška)


;--------------------------------------------------------
;  Vypsání seznamu
;--------------------------------------------------------

(setq out (get-buffer "zvire"))
(print zverinec out)
(insert "ahoj")ahoj
(insert zverinec2)
(print zverinec 't)


(progn 1 2 3 't nil 'cau "ahoj")