Mat*_*ins 3 string haskell boolean compare function
我遇到了一个相当愚蠢的练习问题,被列为简单,所以我想我能做到.前提是医生必须听到患者说aah才能做出诊断,但患者的aah必须符合医生要求的aah.如果医生要求aaaaah并且病人说啊,那么就不能给出诊断.Haskell程序应按照该顺序读取医生和患者aah,如果可以给出诊断,则返回Bool值.起初我认为他们需要完全相同所以这是我的代码:
seeDoctor :: String -> String -> Bool
seeDoctor a b = if a == b then True
else False
Run Code Online (Sandbox Code Playgroud)
但是,我意识到我没有遵循问题的所有规则而且并非如此简单.患者可能会说aah比医生更长并且返回True,因此"aah""aaaah"返回True,"aaah"和"h""aah"返回True,但"aaah""ah"返回False.但即使医生在他们的aah中没有包含'h',患者也必须,所以"a""a"返回False,但我的代码将返回True.因此,如果患者说了什么,那么它必须是'a后面跟一个'h'而不是其他字符的必要数字.你看,一旦我开始尝试建议的测试用例,我意识到我的理解有多少.我可以在每个字符串中保留'a'的计数吗?如何检查额外字符?对不起,这需要一段时间才能阅读.感谢你做到这一点.
这是确切的问题:
"当我们去看医生时,医生总是要求我们说"aaah".有时,医生需要我们说"aaaaaah",但我们只能说"aaah".在这种情况下,医生是无法诊断我们的疾病,因为'a'在我们的"aaah"中的数量少于他或她的要求.现在,编写一个名为seeDoctor的Haskell函数来判断医生是否可以用我们的"aah"来诊断我们.函数的输入由两个字符串组成.第一个字符串是医生需要的"aaaah",第二个字符串是我们能够说的"aah".如果我们的"aah"符合医生的要求,则输出"True",并输出"错误"否则.只有当使用小写'a'和'h'时,测试才会传递"True",并且每个字符串包含一定数量的'a'后跟一个'h'."
既然你正在尝试学习Haskell,我不打算给你一个解决方案,但我会尝试给你足够的提示,让你自己把一个功能放在一起.
字符串是列表,因此您可以使用常规列表函数Data.List.例如,isSubsequenceOf几乎可以满足您的需求:
Prelude Data.List> isSubsequenceOf "aah" "aaah"
True
Prelude Data.List> isSubsequenceOf "aaaah" "aah"
False
Run Code Online (Sandbox Code Playgroud)
如果我正确地解释这个问题的描述,你应该也只有检查a和h在输入的字符串,并且h是最后一个字符.
为了检查这h是最后一个字符,您可以使用以下last功能:
Prelude Data.List> last "aaaah"
'h'
Prelude Data.List> last "ah"
'h'
Prelude Data.List> last "foo"
'o'
Run Code Online (Sandbox Code Playgroud)
也许你还愿意要检查输入的流氓角色,并返回False如果两个字符串包含任何其它字符比a和h...
Prelude Data.List> all (\c -> c == 'a' || c == 'h') "aaah"
True
Prelude Data.List> all (\c -> c == 'a' || c == 'h') "aaah!"
False
Run Code Online (Sandbox Code Playgroud)
"aha"不过,对于字符串你会怎么做?我会把它留作练习:)
| 归档时间: |
|
| 查看次数: |
6871 次 |
| 最近记录: |