Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.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,如何删除与列表中的项目相邻的相同重复项目 flattlst "aaaasssaaabbbssaaa" --"asabsa" 我试图通过Data.List中的“nub”函数来实现 import Data.List flattlst = nub --flattlst"aaaasssaaabbbssaaa" "asb" -- !!! It is wrong!! "asabsa" -- !!The answer should be like this. 但这不是我需要的。“Nub”将删除所有相

如何删除与列表中的项目相邻的相同重复项目

flattlst "aaaasssaaabbbssaaa"
--"asabsa"
我试图通过Data.List中的“nub”函数来实现

 import Data.List
 flattlst = nub
 --flattlst"aaaasssaaabbbssaaa"
"asb" -- !!! It is wrong!!
"asabsa" -- !!The answer should be like this.

但这不是我需要的。“Nub”将删除所有相同的元素,但我只需要那些排成一行的元素。请帮助我解决此问题。

Nub
将只生成一个元素,如果它没有首先生成等效的元素。所以
nub
确实会发出
“asb”
,因为
'a'
s、
's'
s和
'b'
s之后已经发出了

你能用的是。这将为每个相等元素的子序列生成一个非空列表。例如:

Prelude Data.List.NonEmpty> group "aaaasssaaabbbssaaa"
['a' :| "aaa",'s' :| "ss",'a' :| "aa",'b' :| "bb",'s' :| "s",'a' :| "aa"]

您仍然需要对此进行后期处理,以便对于每个元素,都返回第一个元素。我把它留作练习。提示:您可以使用模式匹配来实现这一点。

这里有一个简单的方法,应该可以很好地工作。它使用from
数据。列表

flattlst = map head . group
大多数Haskell程序员,包括我在内,通常都会警告不要使用
head
,因为如果在空列表中使用,会导致程序崩溃。但是,
保证生成一个非空列表*,因此这应该是可以的


*至少如果输入为非空。我不确定在空列表上使用时,
会做什么-我怀疑这样或那样会爆炸,所以如果需要避免的话,请为空列表/字符串添加一个特殊情况

这看起来不像是“扁平化”。此外,
nub
表示“全局”统一性。您需要的是
group
并进行一些后处理。您可以使用
head
head group“aaaassaaabbbssaaa”
这样的“flattlst”函数应该可以处理任何列表,而不仅仅是那些列表。@Seliverstov:它可以,就像类型签名所说的,它适用于任何可折叠的
元素
a
所在的
Eq a
上,也适用于
Char
s列表、
NonEmpty
s的
Int
s、
Tree
s的
String
s、
可能
树Char
s等。使用
映射头。Data.List.NonEmpty.group
为了避免出现partialityCome,检查
group
对空列表的作用有多困难?答案是,它会返回一个空列表。。。这显然是正确的做法。所以,不,这不会爆炸,只有
使这个解决方案“不安全”,但实际上整个东西是一个完美的整体功能。抱歉@leftaroundabout,我本来会在GHCi登记的,但我在手机上,经常无法方便地加载我的笔记本电脑。我确实检查了文档,看不到明确的答案,但现在您指出了这一点,返回空列表确实看起来很明显。很明显,我甚至没有想到它!:-)