这不是一个很好的例子,但很容易理解我所问的问题。假设我想以递归方式重建列表,然后在构建列表后将sort函数应用于它。这是一个得到正确答案的实现,但不是我喜欢的方式。
import Data.List
rebuild_and_sort :: [Int] -> [Int]
rebuild_and_sort [] = []
rebuild_and_sort (b:bs) = sort (b:rebuild_and_sort bs)
问题是会为参数列表中的每个元素调用sort。是否有某种方法可以使它只在完全重建列表后调用一次而不更改所需的参数?
答案 0 :(得分:4)
将递归委托给worker函数并在顶层调用sort
import Data.List(sort)
rbsort :: [Int] -> [Int]
rbsort = sort . go
where go [] = []
go (x:xs) = x: go xs -- here you should be doing something useful