开发者

Prolog permutations with repetition

I'm having a hard time wrapping my head around the concept of logic programming. I'm trying to get all permutations with repetition into a give list.

I can put what I have, but I don't know what I'm doing!

perms_R(List,[]).
perms_R([X|Xt],[Y|Yt],Out) :- perms_R([Y|Xt],Yt),perms_R(Xt,[Y|Yt])

.

The idea was to go through each element in the second list and put it in my first list. I'm trying to figure this out, but I'm stuck.

I need to call perms_R([a,b,c,d],[1,2,3,4]). and get:

1,1,1,1
1,1,1,2
1,1,1,3
1,1,1,4
1,1,2,1
etc....

I understand the first list seems useless and I could just do it with a list length, but I actually need it for the remainder of my code, so I'm trying to model this after what I need. Once I get past this part, I will be putting extra logic in that will limit the letters th开发者_高级运维at can be replaced in the first list, but don't worry about that part!


What you are looking for is not a permutation. You want to create a list of a given size using items from a given set.

You may do it with this snippet:

perms_R([], _).
perms_R([Item|NList], List):-
  member(Item, List),
  perms_R(NList, List).

You would need to pass a semi instantiated list and the source items:

perms_R([A,B,C,D],[1,2,3,4]).
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜