Sorting haskell中元组数组的索引排序
我编写了一个代码来对元组列表的索引进行排序,我试图使用Sorting haskell中元组数组的索引排序,sorting,haskell,Sorting,Haskell,我编写了一个代码来对元组列表的索引进行排序,我试图使用bubblesort() 要避免使用循环 bubblesort::(Ord t) => [t]->[t] bubblesort[x,y,z,xs]= if x<y then x : map bubblesort [y,z,xs] else y : map bubblesort [x,z,xs] bubblesort::(O
bubblesort()
要避免使用循环
bubblesort::(Ord t) => [t]->[t]
bubblesort[x,y,z,xs]=
if x<y then x : map bubblesort [y,z,xs]
else y : map bubblesort [x,z,xs]
bubblesort::(Ord t)=>[t]->[t]
气泡排序[x,y,z,xs]=
如果x我不知道这个问题的完整解决方案,但是bubblesort期望[t]
,但是bubblesort[x,z,xs]
将是[[t]->[t]]
的函数。因此,每次类型都会被另一个[]
此外,您不需要执行映射bubblesort
。试着准确地记住map
函数的作用,看看为什么它没有意义。Thanx alote etemalmat这是我为自己的问题而做的
bubbleSort::(Ord t) => [t]->[t]
bubbleSort[x,y,z,xs]=
if x<y then x : [y,z,xs]
else y : [x,z,xs]
superBubble::(Ord t) => [[t]]->[[t]]
superBubble a=map bubbleSort a
bubbleSort::(Ord t)=>[t]->[t]
气泡排序[x,y,z,xs]=
如果x[[t]]->[[t]]
superBubble a=贴图气泡排序a
我的问题是将map
与递归应用于所有元素的函数一起使用,因此我的解决方案是使它与一个元素一起工作,正如您在bubbleSort()
中所看到的,现在它修复了您遇到的主要问题是初学者一直在解决的问题。您使用的是列表,因此您决定必须使用方括号。您真正需要的是:
bubblesort (x:y:xs) =
if x < y
then x : bubblesort (y:xs)
else y : bubblesort (x:xs)
在一个正好有三个元素的列表上显式地进行模式匹配。如果你使用
foo (a:b:c:xs) = …
然后,在至少有三个元素的列表上显式匹配,其中第一个元素绑定到名称a,第二个元素绑定到名称b,第三个元素绑定到名称c,列表的其余部分(不管它有多长)称为xs
我希望这有助于澄清问题。这是一个非常常见的错误。你到底想做什么?只是对一个列表进行排序,或者对一个元组进行排序?很高兴我能在不透露太多信息的情况下提供帮助:)我认为这根本不能解决真正的问题。请参阅下面我的评论,了解我认为解决问题的方法。这只适用于四元素列表,这可能不是您想要的,但它越来越近了。你可能想在IRC频道上询问这一点,这样你就可以与某人来回交流,让它一步一步地做你想做的事情。Freenode上的#haskell IRC频道。有关这方面的更多信息,请参阅(以及其他一些Haskell参考资料)。这确实解决了他的部分问题,但您还需要bubblesort a:[]
和bubblesort[]
@eternalmatt对,我不想为他们做所有的家庭作业=)
foo [a,b,c] = …
foo (a:b:c:xs) = …