写a->的最好方法..-> [a] haskell中的递归函数

时间:2010-06-09 05:25:14

标签: haskell recursion

所以我一直有这个小问题,我有像

这样的东西
func :: a -> b -> [a]  -- # or basically any a-> ...-> [a] where ... is any types  ->
func x y = func' [x] y -- '# as long as they are used to generate a list of [a] from x

func' :: [a] -> b -> [a] 
func' = undefined -- # situation dependant generates a list from
                  -- # each element and returns it as one long list

我应该这样保留吗?

我应该使用func'隐藏在哪里?

我应该只使用[a] - > b - > [a]版本并承担将[变量]传递给被调用者的责任吗?

我可能需要编写这些函数,并且可能想要搞乱订单,所以我倾向于选项3.你怎么看?

2 个答案:

答案 0 :(得分:2)

看起来你正在尝试重新发明concatMap:

concatMap :: (a -> [b]) -> [a] -> [b]
concatMap f = concat . map f

因此“map”位将输入列表的每个元素应用于“f”。 “f”取一个“a”并返回“[b]”。然后将这些单独的列表连接成一个列表。

答案 1 :(得分:2)

作为Paul notedfunc'可以替换为concatMapfunc

func本身让我想起了unfoldr from Data.List

unfoldr :: (b -> Maybe (a, b)) -> b -> [a]

用于从a生成b的列表。

顺便说一下,funcfunc'是这些函数的不幸名称。