У меня есть список, который содержит списки.Я хочу создать список перестановок.
Пример:
generate_perm([[3],[1,2,3,4],[1,2]], P).
P = [[3,1,1], [3,2,1], [3,3,1], [3,4,1], [3,1,2], [3,2,2], [3,3,2], [3,4,2]];
no
Таким образом, выходные списки: n-й элемент является элементом n-го списка из входных списков.То, что я уже пробовал: использовать член, и найти все, но я застрял.Так как я новичок в прологе, я всегда думаю императивно.
Мой код пока дает 1 решение:
generate_perm([],_).
generate_perm([H|Tl], Perm):- member(M, H), append(Perm, [M], Perm2),
generate_perm(Tl, Perm2).
Отладка этого:
| ?- generate_perm([[3],[1,2,3,4],[1,2]], P).
# 1 1 Call: member(_4961,[3]) ?
# 1 1 Exit: member(3,[3]) ?
# 2 1 Call: generate_perm([[1,2,3,4],[1,2]],[3]) ?
# 3 2 Call: member(_56173,[1,2,3,4]) ?
?# 3 2 Exit: member(1,[1,2,3,4]) ?
# 4 2 Call: generate_perm([[1,2]],[3,1]) ?
# 5 3 Call: member(_138349,[1,2]) ?
?# 5 3 Exit: member(1,[1,2]) ?
# 6 3 Call: generate_perm([],[3,1,1]) ?
# 6 3 Exit: generate_perm([],[3,1,1]) ?
?# 4 2 Exit: generate_perm([[1,2]],[3,1]) ?
?# 2 1 Exit: generate_perm([[1,2,3,4],[1,2]],[3]) ?
P = [] ?
Итакответ есть (Call: generate_perm ([], [3,1,1]), здесь ответ [3,1,1]), но он дает мне пустой список, и я не могу понять, почему,И еще один шаг, где мне нужна помощь, я не знаю, как получить все решения в 1 списке.