繁体   English   中英

在Haskell中获取列表中单词的长度

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM