【发布时间】:2013-12-11 08:21:21
【问题描述】:
我正在尝试解决 H99 中的一个问题: 将列表分成两部分;第一部分的长度已给出。
不要使用任何预定义的谓词。
例子:
> (split '(a b c d e f g h i k) 3)
( (A B C) (D E F G H I K))
我可以很快找到解决方案:
split'::[a]->Int->Int->[a]->[[a]]
split' [] _ _ _ = []
split' (x:xs) y z w = if y == z then [w,xs] else split' xs y (z+1) (w++[x])
split::[a]->Int->[[a]]
split x y = split' x y 0 []
我的问题是,我所做的只是以递归格式重写循环版本。这是你在 Haskell 中做事的正确方式吗?不就是和命令式编程一样吗?
编辑:另外,你通常如何避免这里的额外功能?
【问题讨论】:
标签: haskell recursion functional-programming