【问题标题】:Going through lists Prolog浏览列表 Prolog
【发布时间】:2019-03-18 05:22:28
【问题描述】:
我正在尝试在 Prolog 中工作,但我无法理解如何解决我的问题。我想要做的是创建 3 个元素的元组,每个元素都来自不同的列表。我需要做的是为三个列表中的每个可能的组合制作一个三元组。我的计划是获取两个列表中的第一个元素,然后遍历第三个列表中的每个元素,为每个元素创建一个元组。然后取第一个列表中的第一个元素和第二个列表中的第二个元素,然后再次遍历第三个列表中的每个元素。我知道这可能很难理解。我的总体目标是为三个列表中的每个可能组合创建一堆元组。元组中的第一个元素来自第一个列表,第二个元素来自第二个列表,第三个元素来自第三个列表。
我是 prolog 的初学者,所以我对我需要走的方向以及如何用代码编写我的想法有点困惑。因此,我们将不胜感激。
谢谢
【问题讨论】:
标签:
list
prolog
cartesian-product
【解决方案1】:
你能解决两个列表的问题吗?如果是这样,那么您可以解决任何个问题:
pairup_lists( [A, B | T] , X ):-
pairup_lists( [B | T] , Y),
pairup_two_lists( A, Y, X).
您需要在此处添加一些极端情况,并实现 pairup_two_lists/3 谓词。
提前知道它们只有三个,你可以内联递归并将所有内容融合到一个谓词pairup_three_lists/4。
那么,如何解决pairup_two_lists/3 问题?
如果第一个列表是单例列表,那么问题是否就等同于另一个更简单的pair_up_an_element_and_a_list/3 问题?
如果第一个列表中有更多元素,那么它可以分为头和尾,同样的逻辑是否适用于处理尾列表,逐个元素,直到没有更多元素处理?