我使用适用于 Hugs 98 的 updown/alternating permutation 问题的成功列表得到以下解决方案:
updown :: (Ord a) => [a] -> [[a]]
updown [] = [[]]
updown list = smaller list
bigger :: (Ord a) => [a] -> [[a]]
bigger [] = [[]]
bigger [x] = [[x]]
bigger list = [n:p | n <- list,p <- smaller (filter (/=n) list),n < p!!0]
smaller :: (Ord a) => [a] -> [[a]]
smaller [] = [[]]
smaller [x] = [[x]]
smaller list = [n:p | n <- list,p <- bigger (filter (/=n) list),n > p!!0]
如您所见,该功能使用 LoS 过滤掉所有不合适的解决方案。现在我想知道如何获得相同的结果,但是通过使用显式回溯(在累积参数中构建一个部分解决方案;在递归中进一步会有一个解决方案)。我只需要在正确的方向上轻轻一点。谢谢!