我需要創建一個函式,它將接受一個整數串列并將它們分成 2 個串列,一個是奇數,另一個是偶數
split :: [a] -> ([a], [a])
split = undefined
上面是函式基線,下面是我目前的嘗試
split :: [a] -> ([a], [a])
split [] = ([],[])
split (x:xs) | x mod 2 == 0 = ([],[x:split xs])
| x mod 2 /= 0 = ([x:split xs],[])
| otherwise = ([],[])
uj5u.com熱心網友回復:
顯式遞回:
split :: Integral a => [a] -> ([a], [a])
split [] = ([], [])
split (x:xs)
| even x = (x:ys, zs)
| otherwise = (ys, x:zs)
where
(ys, zs) = split xs
隱式遞回:
splitf :: Integral a => [a] -> ([a], [a])
splitf xs = foldr (\x (ys, zs) -> if even x then (x:ys, zs) else (ys, x:zs))
([], []) xs
您可以將其簡化為無點樣式:
splitf2 :: Integral a => [a] -> ([a], [a])
splitf2 = foldr (\x (ys, zs) -> if even x then (x:ys, zs) else (ys, x:zs))
([], [])
我認為代碼是不言自明的。如果有什么我需要進一步解釋的,請告訴我。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/316872.html
