【发布时间】:2018-10-13 19:23:10
【问题描述】:
我有以下问题。
我得到了一个 listOfLists,一个值 (row,col),我需要获取包含该特定值的列表中的列表,直到该列表中我的值的索引。
例如
?- find_list([[(1,2),(1,3),(1,4)], [(2,2),(2,3),(2,4)]], (1,3), List2).
List2 = [(1,2),(1,3)].
我的问题是,如果我使用 member/2,我只会在我的值是否在 listOfList 中时得到真或假,而不是我需要使用的列表。
如何获得包含我价值的列表?
【问题讨论】:
-
您
[(1,2),(1,3)]的示例结果不是您的列表列表的成员,所以我不明白。至于您的问题的答案,您需要编写一个递归谓词,使用member/2检查列表列表的每个成员。这是 Prolog 列表递归的一个非常基本的示例。例如,如果Element是给定列表中第一个列表的成员,则find_list([List|Lists], Element, List) :- member(Element, List).成功。您应该尝试完成其余的逻辑。 -
这可能与以下内容重复:Does an element exists in a list of lists
-
@lurker 如果我要查找的 (row,column) 在列表列表中,我需要“打印”包含 (row,column) 的列表,直到我的 ( row,column),因此,例如,如果列表仅包含整数,并且我有一个包含 [1,9,2,3,4,10,6] 的列表并且我必须检查的值为 3,我需要我的 List2 = [1,9,2,3]。我现在说清楚了吗?而不是整数,我有一个 (value1,value2) 类型来寻找
-
@lurker plus,我不想返回 True 或 False,当我在任何 listOfLists 列表中找到我的值时,我想返回 L2,L2 是包含我的值的列表,来自它的开始直到包含我的价值的索引
-
“返回”真或假基本上是 Prolog 谓词的工作方式。这不是返回 true、false 或其他内容的选择。谓词寻求解决方案,如果找到,则成功(在控制台上显示“true”),如果找不到,则失败(在控制台上显示“false”)。它们实际上不会“返回”真/假值。他们成功或失败。您希望它在您的解决方案中取得成功。
标签: list multidimensional-array prolog