Zvire-0.03.el
Vzhled
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")