我使用成功列表获得了以下解决方案,用于在Hugs 98中使用的更新/交替排列问题:
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的非拟合解决方案。现在我想知道如何获得相同的结果,但是使用显式回溯(在累积参数中构建一个部分解决方案;在递归中还有一个解决方案)。我只需要朝正确的方向微调。 谢谢!