Рекурсивная функция перестановки всегда возвращает пустой список

Я изучаю Haskell, и одной из моих практических функций была простая рекурсивная перестановка . Я адаптировал решение, описанное здесь , и первоначально получил следующее:

selections [] = []
selections (x:xs) = (x, xs) : [ (y, x:ys) | (y,ys) <- selections xs ]

permute xs = [y:ps | (y,ys) <- selections xs, ps <- permute ys]

(Да, это могло быть короче, но я стремился к ясности и ясности.)

Однако эта версия меняет всегда возвращал пустой список! Немного поработав, я заставил его работать, изменив permute на:

permute [] = [[]]
permute xs = [y:ps | (y,ys) <- selections xs, ps <- permute ys]

Тем не менее, я все еще озадачен , почему исходная версия всегда возвращает пустой список .

6
задан JSBձոգչ 21 July 2011 в 17:53
поделиться