2016-11-25 15 views
-4

我想写一个函数获取两个列表,并将它们融合到一个列表,但以相反的顺序,因此[1,2,3]和[4,5,6]变成[4,5,6 ,1,2,3]和幸福,我有种停留在类型声明...谁能告诉我如何将列表作为Haskell函数的参数? (类型声明)

+0

另外,stackoverflow告诉我不要发表该评论,只是downvote代替。真的很好,所以。 – melpomene

+0

是啊谢谢,downvoting是解决方案... ***** – SilverA

+0

已经尝试[a] [a] - > [a]和其他一些不可能的东西 – SilverA

回答

2

让我们来告诉你我是如何看待Haskell的 因此,让我们想想类型第一。你有一个2列表,并返回这些东西的列表。在类型语言中,这看起来像这样:[a] -> [a] -> [a]

一旦你知道你可以问hoogle类型:应该给你你需要:)

0

让我们看到的一切...... https://www.haskell.org/hoogle/

你的函数有两个参数:list1list2。 你的函数的结果是一个相同类型的列表。这意味着你的函数正在处理三个列表。其中两个是参数,第三个是结果。

为了简单起见,我们假设您正在处理Integers的列表。该类型声明是这样的:

fuse :: [Int] -> -- The first list 
     [Int] -> -- The second list 
     [Int] -- The result fusion 

其中[Int]代表Integers列表。当然,该功能不一定是Integers的列表。它可以被应用于包含任何类型的元素列表:

fuse :: [a] -> -- The first list 
     [a] -> -- The second list 
     [a] -- The result of the fusion 

[a] -> [a] -> [a]Hoogle快速搜索会给你(++)功能上的结果:

(++) :: [a] -> [a] -> [a] 

该函数将两个列表。在你的情况,你可以使用的功能是这样的:

fuse :: [a] -> -- The first list 
     [a] -> -- The second list 
     [a] -- The result 
fuse list1 list2 = list2 ++ list1 

或者在自由点式:

fuse :: [Int] -> -- The first list 
     [Int] -> -- The second list 
     [Int] -- The result 
fuse = flip (++) 

的翻转功能反转参数。

相关问题