【发布时间】:2018-03-01 20:55:48
【问题描述】:
我遇到了一个相当愚蠢的练习题,它被列为简单,所以我认为我可以做到。前提是医生必须听到病人说 aah 才能做出诊断,但病人的 aah 必须与医生要求的 aah 相匹配。如果医生问aaaaah,病人说ah,那么就不能给出诊断。 Haskell 程序应该按顺序读取一个医生和一个病人 aah 并返回一个 Bool 值以判断是否可以给出诊断。起初我认为它们需要相同,所以这是我的代码:
seeDoctor :: String -> String -> Bool
seeDoctor a b = if a == b then True
else False
但是,我意识到我并没有遵循问题的所有规则,而且事情并不是那么简单。患者说 aah 的时间可能比医生长,然后返回 True,因此“aah”“aaaah”返回 True,“”“aaah”和“h”“aah”也是如此,但“aaah”“ah”返回 False。但即使医生没有在他们的 aah 中包含“h”,患者也必须,所以“a”“a”返回 False,但我的代码将返回 True。因此,如果患者说什么,则必须是必要数量的“a”后跟一个“h”,并且没有其他字符。你看,一旦我开始尝试建议的测试用例,我就意识到我理解的太少了。我可以在每个字符串中保留“a”的计数吗?如何检查多余的字符?抱歉,这花了一些时间来阅读。感谢您到此为止。
这是确切的问题:
“当我们去看医生时,医生总是让我们说“啊啊”。 有时候,医生要我们说“啊啊啊”,但我们只能说 说“啊”。在这种情况下,医生无法诊断出我们的 疾病,因为我们的“aaah”中的“a”比他或她的少 要求。现在,写一个叫做seeDoctor的Haskell函数来判断 如果医生可以用我们的“啊”来诊断我们。的输入 函数由两个字符串组成。第一个字符串是“aaaah” 医生需要,第二个字符串是我们可以说的“啊”。 如果我们的“aah”符合医生的要求,则输出“True”,并且 否则输出“假”。只有在 使用小写的'a's和'h's,每个字符串包含一定的 'a' 的数量后跟一个 'h'。"
【问题讨论】:
-
您可以逐字发布请求吗?你描述的方式,不是很清楚。
-
所以如果我理解正确的话,两个字符串的格式都是
a*h*(这是一个正则表达式,*表示*前一个字符的任意数量),以及a' 的数量s 和hs 应该大于或等于请求的 aahh? -
seeDoctor "foo" "aaaaaaaah"的输出应该是什么? -
我认为在这种情况下应该是 False,@MarkSeemann。
-
你为什么不过滤
'a's和compare他们的长度..?
标签: string function haskell boolean compare