如何在lisp中使用?

时间:2015-03-11 20:10:53

标签: function lisp common-lisp

我试图做的是编写一个功能,该功能将在结束后重启tic-tac-toe游戏。 应该发生的是,玩家将被问到是否想要玩另一场比赛。如果他们这样做,那么他们点击是,并调用一个将开始游戏的功能。如果他们选择否,则程序终止。 这是我到目前为止所拥有的......

(defun play-again ()
  (do (y-or-n-p "Would you like to play again? ")
      ((play-one-game) nil)))

如果用户点击"是&#34>我想要运行的游戏一体机游戏。从提示。否则游戏终止,因为没有其他功能被调用。顺便说一句,万一你需要知道,我正在使用Allegro。

2 个答案:

答案 0 :(得分:1)

假设您的y-or-n-p仅在用户按下n时为零,您可以将主循环写为

(defun main ()
  (loop :while (y-or-n-p "Would you like to play again? ")
        :do (play-one-game)))

或者在游戏结束时,我会重命名游戏,提示用户,如果他想再玩一次,只需再打电话。

(defun play-one-game ()
  ....
  (when (y-or-n-p "Would you like to play again? ")
    (play-one-game)))

答案 1 :(得分:0)

如果你不理解CL中的表格,你应该阅读CLHS(http://www.lispworks.com/documentation/lw60/CLHS/Body/m_do_do.htm

这里有一个使用do的解决方案:     (defun play-again()       (做((再次t(y-or-n-p"你想再玩一次吗?")))           ((不是)nil)         (播放一个游戏)))

(此函数第一次调用play-one-game而没有问题)