带有重复的 Prolog 排列
我很难理解逻辑编程的概念。我试图将所有重复的排列放入给定列表中。
我可以投入我所拥有的,但我不知道我在做什么!
perms_R(List,[]).
perms_R([X|Xt],[Y|Yt],Out) :- perms_R([Y|Xt],Yt),perms_R(Xt,[Y|Yt])
。
这个想法是遍历第二个列表中的每个元素并将其放入我的第一个列表中。我正在尝试解决这个问题,但我被困住了。
我需要调用 perms_R([a,b,c,d],[1,2,3,4])。并得到:
1,1,1,1
1,1,1,2
1,1,1,3
1,1,1,4
1,1,2,1
etc....
我知道第一个列表似乎没什么用,我可以用列表长度来完成它,但我实际上需要它来完成我的代码的其余部分,所以我试图根据我需要的内容对其进行建模。一旦我完成了这一部分,我将添加额外的逻辑,这将限制第一个列表中可以替换的字母,但不用担心那部分!
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 that can be replaced in the first list, but don't worry about that part!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您正在寻找的不是排列。您想要使用给定集合中的项目创建给定大小的列表。
您可以使用以下代码片段来完成此操作:
您需要传递半实例化列表和源项目:
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:
You would need to pass a semi instantiated list and the source items: