List 在不使用drop的情况下,如何获取并打印列表中的备用行(奇数或偶数)?

List 在不使用drop的情况下,如何获取并打印列表中的备用行(奇数或偶数)?,list,haskell,List,Haskell,我已经使用drop-here编写了一个工作版本: main = do cs <- getContents putStr $ unlines $ oddL $ lines cs oddL :: [a] -> [a] oddL [] = [] oddL (x:xs) = x : (oddL $ drop 1 xs) main=do cs[a] oddL[]=[] oddL(x:xs)=x:(oddL$drop 1xs) 但我想知道是否有一种方法可以做到不滴水?即

我已经使用drop-here编写了一个工作版本:

main = do cs <- getContents
          putStr $ unlines $ oddL $ lines cs

oddL :: [a] -> [a]
oddL [] = []
oddL (x:xs) = x : (oddL $ drop 1 xs)
main=do cs[a]
oddL[]=[]
oddL(x:xs)=x:(oddL$drop 1xs)

但我想知道是否有一种方法可以做到不滴水?即使没有那么有效。

提示:将
x:xs
模式替换为
[x]
模式和
x1:x2:xs
模式。

提示:将
x:xs
模式替换为
[x]
模式和
x1:x2:xs
模式。

您也可以为此重用代码,如中所示

oddL :: [a] -> [a]
oddL (x:_:xs) = x : oddL xs -- "forget" the even element
oddL [x]      = [x]
oddL  _       = [ ]
import Data.List.Split
oddL = map head . chunksOf 2
您还可以为此重用代码,如中所示

import Data.List.Split
oddL = map head . chunksOf 2

谢谢你!我已经想出了一个类似于泽塔的答案的方法,但我的方法没有达到最后一行。谢谢!我已经想出了一个类似于泽塔的答案的方法,但我的方法缺少最后一行。