“我想到的是什么数字”在Scheme中猜测游戏

时间:2011-11-03 21:01:07

标签: lisp scheme racket

这是我的问题:

  • 我需要在Scheme中创建一个程序来播放“我在想什么号码”游戏
  • 参数是下限和上限
  • 每次猜测时,都会将其与答案进行比较
    • 如果猜测较少,则应该说 - 更高
    • 如果更多的话,应该说--go lower
    • 如果相等,打印出“Winnner!”。

这是我目前的代码:

(define (game low high)
   (let ((guess (average low high)))
       (cond ((islow? guess) (game (+ guess 1) high))
             ((ishigh? guess) (game low (- guess 1)))
              (else '(Winner!)))))

如何实施islowishigh

2 个答案:

答案 0 :(得分:1)

您可以执行二进制搜索等操作。

while (true){
    response = guess(number);
    if(response == true) return "Found it!";
    if(response == 'higher'){
        number = number+maximum/2;
    }
    else if(response == 'lower'){
        number = number+minimum/2;
    }
}

答案 1 :(得分:0)

我可能会误解你的作业 - 如果是的话,请告诉我。

您的功能实际上并不知道正确答案是什么!这可能就是您对islow?ishigh? ...

感到困惑的原因

所以我认为你的功能需要做的第一件事就是提出正确的答案,这个答案将是lowhigh之间的数字。您可以使用(random k)函数执行此操作,该函数选择0到k-1之间的随机数。第一个问题是弄清楚如何使用它来获得lowhigh之间的数字。

获得answer后,islow?ishigh?很简单,我认为您不需要为它们制作单独的功能;只需使用><

您还需要让用户反复输入一个猜测,对吧?这可能是最容易的,如果现在,你只是说你要创建一个函数get-guess,它会要求用户输入,然后再计算出来。