Scheme 魔幻8球?计划中

Scheme 魔幻8球?计划中,scheme,racket,Scheme,Racket,就像魔幻8球游戏一样,我正在尝试建立一个模型,可以按照以下顺序回答不同的问题: “这是肯定的” “前景良好” “稍后再问” “前景不太好” 如果问题为空,则生成“您没有提出问题,请重试”,表示为(无答案) 我写下了这个问题的代码,但是空的案例不起作用 也就是说,(magic-8-ball”“)应该产生“您没有问问题,请再试一次” 以下是我的测试用例: (check-expect (and (equal? (magic-8-ball "Do you love me?")

就像魔幻8球游戏一样,我正在尝试建立一个模型,可以按照以下顺序回答不同的问题:

  • “这是肯定的”
  • “前景良好”
  • “稍后再问”
  • “前景不太好”
如果问题为空,则生成“您没有提出问题,请重试”,表示为(无答案)

我写下了这个问题的代码,但是空的案例不起作用

也就是说,
(magic-8-ball”“)
应该产生“您没有问问题,请再试一次”

以下是我的测试用例:

(check-expect (and (equal? (magic-8-ball "Do you love me?")
                       "It is certain")
               (equal? (magic-8-ball "How is your life?")
                       "Outlook good")
               (equal? (magic-8-ball "") 
                       "you did not ask a question, try again")
               (equal? (magic-8-ball "2nd0A-wmQ232.asdA?") 
                       "Ask again later")
               (equal? (magic-8-ball "No questions here")
                       "Outlook not so good")
               (equal? (magic-8-ball "Now do you hate me?")
                       "It is certain"))
               true))
考试应该通过,但我的没有通过。当字符串为空时会出现问题

谁能告诉我是什么问题吗?
谢谢

很好,你把空头支票修好了。现在我可以运行代码:)

空头支票不是你唯一的问题。请看下面的代码块,并告诉我您的期望:

(begin
  (cond [(equal? s "") no-answer]
        [else (set! 8-ball-answers (append (rest 8-ball-answers)
                                           (list next-answer)))])
  next-answer)
我期待下一个答案,与条件结果无关。我想您可能希望您的
else
条件在循环答案后返回
下一个答案
。问题是您的
开始
。测试一个条件,然后返回下一个答案。也许你想要的是:

(cond [(equal? s "") no-answer]
      [else (begin (set! 8-ball-answers (append (rest 8-ball-answers)
                                                (list next-answer)))
                   next-answer)])

如果字符串为空,则返回
无应答
,否则返回循环的
下一个应答
。虽然可能是正确的,但我认为这段代码相当难看。考虑重构循环并返回下一个答案位。结构很糟糕。

可能吧,但首先:你能告诉我们你想做什么吗?我想你会想这样开始:“我正在做一个家庭作业,我们试图模拟一个魔法8球。作业要求(等等),我已经写了这个测试用例,但它产生了这个,当我期望它产生这个的时候。”回应John的评论并补充道:我建议将测试分为六个独立的测试,每个测试可以通过或失败,而不是一个巨大的测试,如果其中任何一个条件失败,它不会告诉你太多。请解决你的问题。到目前为止,
无应答
尚未定义。另外,
(empty?”)
不会返回
#t
,因此您可能需要使用
字符串empty?
,如果它不存在,可以使用
字符串长度
写入。我的猜测是,空测试是您问题的症结所在,但我无法确定书面信息。包括合同和目的将帮助我们了解所需的行为。
(cond [(equal? s "") no-answer]
      [else (begin (set! 8-ball-answers (append (rest 8-ball-answers)
                                                (list next-answer)))
                   next-answer)])