我试图解决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做事的正确方法吗?这不是命令式编程吗?
编辑:另外,你如何在这里避免额外的功能?