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教程 提出的一个问题是使用以下方法编写函数: count :: Eq a => [a] -> a -> Int 它可以获取一个数字列表&一个值,并告诉您指定的值在列表中出现了多少次 它说,看看你是否可以写它使用列表理解,并再次使用显式递归 而且,使用它不仅可以计算数字的出现次数,还可以计算字母的出现次数,例如,“s”在“她卖贝壳”中出现了多少次 所以我得到: countListComp :: Eq a => [a] -> a ->

所以仍然在学习Haskell教程

提出的一个问题是使用以下方法编写函数:

count :: Eq a => [a] -> a -> Int
它可以获取一个数字列表&一个值,并告诉您指定的值在列表中出现了多少次

它说,看看你是否可以写它使用列表理解,并再次使用显式递归

而且,使用它不仅可以计算数字的出现次数,还可以计算字母的出现次数,例如,“s”在“她卖贝壳”中出现了多少次

所以我得到:

countListComp :: Eq a => [a] -> a -> Int 
countListComp [] find = 0
countListComp ys find = length xs
    where xs = [xs | xs <- ys, xs == find]
因此,它可以很好地计算列表中数字的出现次数,如下所示:

ghci > countListComp [1,3,2,3,4,3] 3
3

ghci > countRecursion [6,9,7,9,8,9] 9
3
但当我寻找一封特定的信时,它是这样做的:

ghci > countListComp ["she sells sea shells"] "s"
0

ghci > countRecursion ["she sells sea shells"] "s"
0
它还说,尝试计算其他“可数”的东西,比如有多少个列表。。。所以我试着:

ghci > countListComp [[1,2,3],[3,2,1],[4,5,6]] []
0
我的代码是否有问题,或者我没有正确指定要查找的内容?我想是后者。。。因为以下工作:

例如,查找“她卖贝壳”中出现了多少次“s”。。。我真的要把每个字母都用逗号引起来吗??比如:

ghci > countRecursion ['s','h','e',' ','s','e','l','l','s',' ','s','e','a',' ','s','h','e','l','l','s'] 's'
6

我需要找一份具体的清单吗?或者有没有办法只查找包含任何内容的列表?

countListComp[“她卖贝壳”]“s”的问题是您有字符串列表

你的意思可能是“她卖贝壳”

Sting只是角色列表的别名

使用
countListComp[[1,2,3],[3,2,1],[4,5,6]][]
是不同的问题。它不计算你有多少个列表。它计算您拥有的列表数量等于
[]


如果你尝试
countListComp[[1,2,3],[4,5,6][/code>或
countListComp[[1,2,3],[3,2,1],[4,5,6]][3,2,1],[code>你会得到
1
试着看看
“她卖贝壳”
中的第一项是什么:

ghci> head "she sells sea shells"
=> 's'

“s”是字符,而“s”是单个项[Char]。

在我看来,这里有两个错误

首先,当你把
[“她卖贝壳”]
传递给你的函数时,你实际上是在给你的函数传递一个字符列表。所以函数调用应该如下所示

countListComp "she sells sea shells" <second_parameter>

“foo”
[“foo”]
是完全不同的值。双引号字符串只是列表的语法糖,即,
“foo”
['f','o','o']
是完全相同的东西。(至少在标准Haskell中,
OverloadedStrings
扩展,如果您选择使用它,将
“…”
从type
String
推广到type
IsString p=>p
)这是一个附带练习:假设您不使用
countListComp
的基本情况(也就是说,假设您删除了行
countListComp[]find=0
)。您预测会出现什么错误?ghc是否同意您的预测?
countListComp "she sells sea shells" <second_parameter>
countListComp "she sells sea shells" 's'