如何在 lisp 中使用 do?
How to use do in lisp?
我想做的是编写一个函数,该函数将在结束后重新开始井字游戏。
应该发生的是玩家将被询问是否想玩另一场比赛。如果他们这样做,则他们单击是,并调用一个函数来重新开始游戏。如果他们选择否,则程序终止。
这是我到目前为止的...
(defun play-again ()
(do (y-or-n-p "Would you like to play again? ")
((play-one-game) nil)))
玩一个游戏是我想要 运行 如果用户从提示中单击 "yes" 的功能。否则游戏终止,因为没有其他函数被调用。顺便说一下,以防万一你需要知道,我正在使用 Allegro。
假设只有当用户按下 n 时你的 y-or-n-p
才为 nil 你可以将你的主循环写成
(defun main ()
(loop :while (y-or-n-p "Would you like to play again? ")
:do (play-one-game)))
或者在我将重命名为 play 的 play-one-game 结束时,提示用户,如果他想再次玩,只需再调用一次 play 即可。
(defun play-one-game ()
....
(when (y-or-n-p "Would you like to play again? ")
(play-one-game)))
如果您不理解 CL 中的表格,您应该阅读 CLHS (http://www.lispworks.com/documentation/lw60/CLHS/Body/m_do_do.htm)
这里是一个使用 do 的解决方案:
(defun 再玩一次 ()
(做 ((再次 t (y-or-n-p "Would you like to play again? ")))
((不再)无)
(玩一个游戏)))
(这个函数第一次调用play-one-game
没有问题)
我想做的是编写一个函数,该函数将在结束后重新开始井字游戏。 应该发生的是玩家将被询问是否想玩另一场比赛。如果他们这样做,则他们单击是,并调用一个函数来重新开始游戏。如果他们选择否,则程序终止。 这是我到目前为止的...
(defun play-again ()
(do (y-or-n-p "Would you like to play again? ")
((play-one-game) nil)))
玩一个游戏是我想要 运行 如果用户从提示中单击 "yes" 的功能。否则游戏终止,因为没有其他函数被调用。顺便说一下,以防万一你需要知道,我正在使用 Allegro。
假设只有当用户按下 n 时你的 y-or-n-p
才为 nil 你可以将你的主循环写成
(defun main ()
(loop :while (y-or-n-p "Would you like to play again? ")
:do (play-one-game)))
或者在我将重命名为 play 的 play-one-game 结束时,提示用户,如果他想再次玩,只需再调用一次 play 即可。
(defun play-one-game ()
....
(when (y-or-n-p "Would you like to play again? ")
(play-one-game)))
如果您不理解 CL 中的表格,您应该阅读 CLHS (http://www.lispworks.com/documentation/lw60/CLHS/Body/m_do_do.htm)
这里是一个使用 do 的解决方案: (defun 再玩一次 () (做 ((再次 t (y-or-n-p "Would you like to play again? "))) ((不再)无) (玩一个游戏)))
(这个函数第一次调用play-one-game
没有问题)