Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Haskell中获取列表中单词的长度_Haskell - Fatal编程技术网

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

在Haskell中获取列表中单词的长度,haskell,Haskell,我开始编写一些函数,在这些函数中我可以计算句子中的特定单词等等,但现在我需要计算列表中单词的长度。所以我有一个列表,其中每个元素都是一个单词,我想计算这个单词的字符数。 我找不到任何解决方案,因为Haskell不使用循环。有什么方法可以做到这一点吗?如果您认为在Haskell中工作时需要一个循环,那么您可能正在寻找递归。我们希望递归遍历字符串列表,对每个字符串应用length函数。通过一个列表递归的一般模式,其中函数应用于每个值(通过Haskell,您将非常熟悉该值),大致如下所示: func

我开始编写一些函数,在这些函数中我可以计算句子中的特定单词等等,但现在我需要计算列表中单词的长度。所以我有一个列表,其中每个元素都是一个单词,我想计算这个单词的字符数。
我找不到任何解决方案,因为Haskell不使用循环。有什么方法可以做到这一点吗?

如果您认为在Haskell中工作时需要一个循环,那么您可能正在寻找递归。我们希望递归遍历字符串列表,对每个字符串应用
length
函数。通过一个列表递归的一般模式,其中函数应用于每个值(通过Haskell,您将非常熟悉该值),大致如下所示:

func f []     = []
func f (x:xs) = f x : func f xs
因此,我们可以这样解决问题(专门化函数,而不是将其作为参数):

然而,由于这种行为非常普遍,因此存在一个函数
map
,它为我们处理所有这些问题。它的类型签名是
(a->b)->[a]->[b]
,因此我们知道向它传递一个函数(
length
)和一个事物列表(我们的
字符串
)。如果我们将
length
函数映射到字符串列表中的每个值,我们将得到您想要的结果:

wordLengths :: [String] -> [Int]
wordLengths = map length
用法示例:

ghci>> wordLengths ["abc","defg"]
[3,4]

首先,谢谢你的解释!但是在尝试使用它时,我只得到了不在作用域中的error
变量:wordlength::[String]->[Int]
我假设您试图将其直接输入到
ghci
?我包含的函数定义是要放在Haskell源文件中的。您可以将它粘贴到扩展名为
.hs
的文件中,然后通过终端中的
ghci fileName.hs
加载它。我想我就是这么做的。我编写了一个*.hs文件并将其添加到这个文件中。所以我必须“修改”Haskell本身的一些源文件?我添加了整个HA.hs文件。啊,猜错了。你所做的应该是正确的;很难说到底是什么导致了这个问题。您已经使用了第二个定义(使用
map
,对吗?)。如果你能一字不差地粘贴你包含的内容,我会更有帮助:)是的,我做了。我把我的整个剧本都贴在了问题上。你可以在上面看到。通过显示你已经完成的代码,你可以使这个问题变得更好。同样在haskell问题中,包含您的愿望输出的类型签名也很有帮助。
ghci>> wordLengths ["abc","defg"]
[3,4]