将函数应用于haskell中递归函数定义内的递归构建列表



这不是一个很好的例子,但很容易理解我的问题。假设我想要递归地重新构建一个列表,然后在构建列表后对其应用排序函数。这里有一个实现得到了正确的答案,但不是我想要的方式。

import Data.List
rebuild_and_sort :: [Int] -> [Int]
rebuild_and_sort [] = []
rebuild_and_sort (b:bs) = sort (b:rebuild_and_sort bs)

问题是将对实参列表中的每个元素调用sort。有没有办法使排序只在列表完全重构后调用一次,而不改变所需的参数?

将递归委托给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

最新更新