我不能使用高階函數。我看不出如何做到這一點。我對哈斯克爾很新。它也必須是遞歸的。Haskell:將偶數和奇數元素分解爲元組
split :: [Int] -> ([Int],[Int])
split xs =
我給了這個開始。我真的不知道從哪裏開始解決這個問題。
例子:
split []
([],[])
split [1]
([1],[])
split [1,2,3,4,5,6,7,8,9,10]
([1,3,5,7,9],[2,4,6,8,10])
任何幫助,將不勝感激。
編輯:它的偶數和奇數位置。
所以
分裂[3,6,8,9,10]將 ([3,8,10],[6,9])
行,所以我想出了這個。它不漂亮,但它似乎工作正常。
split :: [Int] -> ([Int],[Int])
split [] = ([],[])
split [xs] = ([xs],[])
split xs = (oddlist xs, evenlist xs)
oddlist :: [Int] -> ([Int])
oddlist xs | length xs <= 2 = [head(xs)]
| otherwise = [head(xs)] ++ oddlist(tail(tail(xs)))
evenlist :: [Int] -> ([Int])
evenlist xs | length xs <= 3 = [head(tail(xs))]
| otherwise = [head(tail(xs))] ++ evenlist(tail(tail(xs)))
你的例子是有點曖昧,你的意思是,即使在本身是偶數或奇數元素和奇數位或整數?一個更好的例子可能是:'split [1,3,2,5,8]''>([1,3,5],[2,8])' – 2010-09-14 09:53:47
哦,對不起,偶數和奇數位置的元素。 – Matt 2010-09-14 10:18:42
@Tom嘿謝謝。沒有注意到。 – Matt 2010-09-14 10:44:07