Haskell-循环列表的每个第二个元素

Bol*_*boa 1 haskell list-comprehension list

我希望能够循环给定列表的每个第二个元素.我可以递归地这样做:

check validate (x:xs) = check (validate x) (tail xs)
Run Code Online (Sandbox Code Playgroud)

但问题是我需要一个接受列表作为参数的函数,然后返回一个列表,该列表仅包含列表中的每个第二个元素,从(并包括)列表的第一个元素开始,我不认为这是可能递归.

有人可以使用列表理解向我展示如何使用它吗?这可能是最好的方法.

小智 7

second (x:y:xs) = y : second xs;
second _ = []
Run Code Online (Sandbox Code Playgroud)

列表理解可能没有用.

  • @Abhay你不需要额外的模式`second [x] = x`吗? (2认同)

kar*_*kfa 6

您也可以尝试相互递归

first [] = []
first (x:xs) = x:second xs

second [] = []
second (x:xs) = first xs
Run Code Online (Sandbox Code Playgroud)

> first [1..10]
[1,3,5,7,9]

> second [1..10]
[2,4,6,8,10]
Run Code Online (Sandbox Code Playgroud)