例如: 我在Haskell中的列表列表是:
[[1,2,3],[7,6,8],[0,3,4]]
我需要列表中所有第一个错误列表元素。
如何在没有" map"的情况下获得输出[1,7,4]? 我需要一个模式匹配的解决方案,而不是这个: list x = map head x
答案 0 :(得分:2)
查看map
和head
函数的定义。然后只需复制实现,将两个功能合二为一。为方便起见,您只需复制map
,替换函数,使用map
传递给head
,然后使用您自己的head
。您可以使用case <expr> of ...
表达式不将您自己的头部作为单独的函数实现。完成所有这些工作后,您可以重构您的功能,使其更加优雅。
答案 1 :(得分:1)
我是Haskell的新手,但这是我在这里创建的。
我使用了列表理解和模式匹配。
--Type definition. Not mandatory but recommended.
firstItemOfEveryList :: [[a]] -> [a]
--First pattern. If the list is empty return a empty list.
firstItemOfEveryList [] = []
--Catch all pattern. Receive a list of lists (xxs). For every inner list (xs <- xxs) call the head method (head xs), but only when the inner list is not null or empty (not(null xs).
firstItemOfEveryList xxs = [head xs | xs <- xxs, not(null xs)]
空列表模式有点不必要,因为它只给出了与最后一次捕获相同的结果。希望它有所帮助。
答案 2 :(得分:1)
.map
答案 3 :(得分:1)
使用嵌套模式匹配的另一个答案:
firsts :: [[a]] -> [a]
firsts [] = []
firsts ([]:xss) = error "sublist is empty"
firsts ((x:xs):xss) = x:firsts xss