Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;;; -*- coding: utf-8 -*-
- (defvar *knowledge* '())
- (defun initialize-knowledge ()
- (setf *knowledge* <<初期知識の木表現>>))
- (defun input-yes-no (prompt)
- (loop
- (format *standard-output* "~a (Y/N) " prompt)
- (finish-output *standard-output*)
- (let ((answer (string-downcase (string-trim '(#\Newline) (read-line *standard-input*)))))
- (if (string= "y" answer)
- (return-from input-yes-no t))
- (if (string= "n" answer)
- (return-from input-yes-no nil)))))
- (defun line-input (prompt)
- (format *standard-output* "~a : " prompt)
- (finish-output *standard-output*)
- (string-trim '(#\Newline) (read-line *standard-input*)))
- (defun create-new-knowledge-node (animal-name)
- (let* ((new-animal-name
- (line-input "あなたの考えていた動物の名前はなんでしたか?"))
- (difference
- (line-input (format nil "「~a」が「~a」と違う点を教えて下さい" new-animal-name animal-name))))
- (format t "教えてくれてありがとう!~%")
- ;;; <<新しい知識ノードを作成して返す>>
- ))
- (defun walk-knowledge-tree (current-node)
- ;; ユーザに対して質問しながら知識の木をたどる
- ;; 末端に到達したら、探索結果をユーザに尋ねる
- ;; 結果が間違っていた場合は create-new-knowledge-node を使って
- ;; 新しいノードを作成し、知識の木に追加する
- )
- (defun show-title-bannar ()
- (format *standard-output* "~%~%動物当てゲーム (Common Lisp Version)~%~%")
- (finish-output *standard-output*))
- (defun main ()
- (initialize-knowledge)
- (show-title-bannar)
- (loop
- (if (input-yes-no "なにか1つの動物を考えてください。準備はいいですか?")
- (walk-knowledge-tree *knowledge*)
- (return)))
- (format *standard-output* "Good bye!~%"))
- (eval-when (:execute)
- (main)
- (quit))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement