【发布时间】:2021-05-14 10:57:28
【问题描述】:
我很难理解为什么 findall/3 在我的程序中会这样。基本上我已经写了我的谓词,
那应该是一个 list ,并返回每个可能的索引,例如,如果我的 list 长度为 3,
pairs([1,2,3],L) 将返回
[1/2, 1/3, 2/3] 这是我预期的列表。(在我的对谓词中,我使用 findall 生成此列表 L)
但是我写了另一个谓词,它应该返回一个列表,其中包含一个列表的所有子列表,并且该谓词也使用 findall,但结果不是我所期望的。
/*calculate a list CASES with all the sublists from LIST .*/
test(LIST, CASES):-
pairs(LIST, L),
member(X/Y, L),
findall(SUBLIST, sublist(LIST, X, Y, SUBLIST), CASES).
结果是这样的(我必须按; 才能生成所有结果)。
[[1, 2]]
[[1, 2, 3]]
[[2, 3]]
为什么 findall 的结果没有附带列表?
【问题讨论】:
-
member(X/Y, L)在您的情况下提供三种解决方案... -
我明白你的意思,我写的每个成员 findall .. 但是每个成员(几个索引)只有一个子列表。
-
有没有办法将所有子列表放在带有内置谓词的 LIST 中,或者我应该使用某种形式的追加?
标签: prolog