【发布时间】:2010-09-14 09:47:05
【问题描述】:
我不能使用高阶函数。我只是无法弄清楚如何做到这一点。我对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]) -
哦,是的,抱歉,元素在偶数和奇数位置。
-
@Tom 嘿,谢谢。没注意到。
标签: haskell