带有重复的 Prolog 排列

发布于 2024-11-02 15:45:07 字数 501 浏览 1 评论 0原文

我很难理解逻辑编程的概念。我试图将所有重复的排列放入给定列表中。

我可以投入我所拥有的,但我不知道我在做什么!

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一个人练习一个人 2024-11-09 15:45:07

您正在寻找的不是排列。您想要使用给定集合中的项目创建给定大小的列表。

您可以使用以下代码片段来完成此操作:

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

您需要传递半实例化列表和源项目:

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

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]).
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文