gpt4 book ai didi

haskell - 在 haskell 函数的归纳步骤中检查字符串中的空格

转载 作者:行者123 更新时间:2023-12-04 02:27:10 26 4
gpt4 key购买 nike

我正在尝试计算不包括空格的字符串长度。我不能使用 length、filter 和 if-else。只有递归。我当前的代码是:

countLetters :: String -> Int
countLetters "" = 0
countLetters str = 1+ countLetters(tail str)

我尝试做的事情,

countLetters :: String -> Int
countLetters "" = 0
countLetters (" ",xs) = 0 + countLetters(xs)
countLetters str = 1+ countLetters(tail str)

但我得到的是:

Couldn't match type `([Char], String)' with `[Char]'
Expected type: String
Actual type: ([Char], String)
In the pattern: (" ", xs)
In an equation for `countLetters':
countLetters (" ", xs) = 0 + countLetters (xs)

我还尝试删除额外的归纳步骤并枚举条件,

fromEnum head str!=" "

因此,如果字符串的开头是空格,则该值将为 1,但 != 不是有效的运算符。即使 == 也会产生,

   head str == " "
<interactive>:22:13: error:
* Couldn't match expected type `Char' with actual type `[Char]'
* In the second argument of `(==)', namely `" "'
In the expression: head str == " "
In an equation for `it': it = head str == " "

所以请帮我找到另一种方法。

最佳答案

你在这里犯了两个错误。首先,列表的“缺点”使用 (:) 作为数据构造函数,因此您使用 ("":xs),而不是 ("",xs)

此外,StringChar列表,因此这意味着元素是 Char ,而不是 String,因此您应该使用 ' ',而不是 "":

countLetters :: String -> Int
countLetters "" = 0
countLetters <b>(' ':xs)</b> = countLetters xs
countLetters str = 1 + countLetters (tail str)

通常,使用模式匹配比使用 headtail 更好,因为 tail 会引发空的错误列表,通过使用模式匹配,我们知道列表不为空:

countLetters :: String -> Int
countLetters "" = 0
countLetters <b>(x:xs)</b>
| <b>x == ' '</b> = countLetters <b>xs</b>
| otherwise = 1 + countLetters <b>xs</b>

关于haskell - 在 haskell 函数的归纳步骤中检查字符串中的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66751810/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com