[英]Getting length of words in list in Haskell
我开始编写一些函数,可以计算句子中的特定单词,依此类推,但是现在我需要计算列表中单词的长度。 因此,我有一个列表,其中每个元素都是一个单词,并希望计算该单词的字符。 我找不到任何解决方案,因为Haskell不使用循环。 反正有这样做吗?
如果您认为在Haskell中工作时需要循环,则可能正在寻找递归。 我们要遍历字符串列表,将length
函数应用于每个字符串。 通过列表进行递归的一般模式,其中将函数应用于每个值(在使用Haskell时会变得非常熟悉):
func f [] = []
func f (x:xs) = f x : func f xs
因此,我们可以通过这种方式解决问题(专门化功能,而不是将其作为参数接受):
wordLengths :: [String] -> [Int]
wordLengths [] = []
wordLengths (x:xs) = length x : wordLengths xs
但是,由于这种行为非常普遍,因此存在一个功能map
可以为我们解决所有这些问题。 它的类型签名是(a -> b) -> [a] -> [b]
,因此我们知道将一个函数( length
)和一个事物列表(我们的String
)传递给它。 如果将length
函数map
到您的字符串列表中的每个值,我们将获得您想要的结果:
wordLengths :: [String] -> [Int]
wordLengths = map length
用法示例:
ghci>> wordLengths ["abc","defg"]
[3,4]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.