2015-11-08 52 views
-1

嘗試自己去學習一些Haskell的,我知道的功能分區使用遞歸

partition :: (a -> Bool) -> [a] -> ([a], [a]) 

我將能夠使用這個遞歸,而不是使用功能。例如:內徑有我自己定義的函數

partition':: (a -> Bool) -> [a] -> ([a], [a]) 

這將使用遞歸

+3

什麼是你的問題?你真的嘗試過一種方法嗎? – sdx23

+0

即時嘗試實現類似的功能分區,但使用遞歸。問題是根據命令行解析的函數來分割兩個列表,例如分區'even [1,2,3,4,5]將返回([2,4],[1,3,5]) – user3311562

+0

遞歸不是一切的關鍵,只有2個過濾操作的分區更容易理解 – Netwave

回答

3

這裏是一個遞歸定義:

partition':: (a -> Bool) -> [a] -> ([a], [a]) 
partition' _ [] = ([],[]) 
partition' f (x:xs) | f x = (x:matched,notMatched) 
        | otherwise = (matched,x:notMatched) 
        where (matched,notMatched) = partition' f xs