Advertisement
Guest User

A toy animal game

a guest
Feb 2nd, 2011
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 1.96 KB | None | 0 0
  1. ;;; -*- coding: utf-8 -*-
  2.  
  3. (defvar *knowledge* '())
  4.  
  5. (defun initialize-knowledge ()
  6.   (setf *knowledge* <<初期知識の木表現>>))
  7.  
  8. (defun input-yes-no (prompt)
  9.   (loop
  10.      (format *standard-output* "~a (Y/N) " prompt)
  11.      (finish-output *standard-output*)
  12.      (let ((answer (string-downcase (string-trim '(#\Newline) (read-line *standard-input*)))))
  13.        (if (string= "y" answer)
  14.            (return-from input-yes-no t))
  15.        (if (string= "n" answer)
  16.            (return-from input-yes-no nil)))))
  17.  
  18.  
  19. (defun line-input (prompt)
  20.   (format *standard-output* "~a : " prompt)
  21.   (finish-output *standard-output*)
  22.   (string-trim '(#\Newline) (read-line *standard-input*)))
  23.  
  24.  
  25. (defun create-new-knowledge-node (animal-name)
  26.   (let* ((new-animal-name
  27.           (line-input "あなたの考えていた動物の名前はなんでしたか?"))
  28.          (difference
  29.           (line-input (format nil "「~a」が「~a」と違う点を教えて下さい" new-animal-name animal-name))))
  30.  
  31.     (format t "教えてくれてありがとう!~%")
  32.  
  33.     ;;; <<新しい知識ノードを作成して返す>>
  34.  
  35.   ))
  36.  
  37.    
  38.  
  39. (defun walk-knowledge-tree (current-node)
  40.   ;; ユーザに対して質問しながら知識の木をたどる
  41.   ;; 末端に到達したら、探索結果をユーザに尋ねる
  42.   ;; 結果が間違っていた場合は create-new-knowledge-node を使って
  43.   ;;   新しいノードを作成し、知識の木に追加する
  44. )
  45.  
  46. (defun show-title-bannar ()
  47.   (format *standard-output* "~%~%動物当てゲーム (Common Lisp Version)~%~%")
  48.   (finish-output *standard-output*))
  49.  
  50.                
  51. (defun main ()
  52.   (initialize-knowledge)
  53.   (show-title-bannar)
  54.   (loop
  55.      (if (input-yes-no "なにか1つの動物を考えてください。準備はいいですか?")
  56.          (walk-knowledge-tree *knowledge*)
  57.          (return)))
  58.  
  59.   (format *standard-output* "Good bye!~%"))
  60.  
  61. (eval-when (:execute)
  62.     (main)
  63.     (quit))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement