2015-05-23 3 views
1

Как я могу получить условные перестановки в Haskell?Получить перестановки с определенным первым элементом

Это мой код:

perm :: [Int] -> [[Int]] 
perm [] = [[]] 
perm xs = [ x:ps | x <- xs , ps <- perm (xs\\[x]) ] 

Но я хочу, чтобы получить все перестановки, которые начинаются с 1. Когда я выполняю:

perm [1,2,3] 

Я хочу, чтобы получить только это:

[[1,2,3],[1,3,2]] 

Я хочу поставить какое-то условие в функцию «perm», что позволяет мне это делать, пока он делает перестановки, я не хотите сделать фильтр, потому что я не хочу вычислять все перестановки.

ответ

3

Перестановки [1, 2, 3], которые начинаются с 1 лишь перестановки [2, 3] с 1 добавил на фронт, который можно вычислить с помощью

map (1:) . perm $ [2, 3] 
Смежные вопросы