【发布时间】:2017-09-24 14:09:04
【问题描述】:
给定一个列表L,我想看看列表中是否出现一对P。如果找到该元素,则打印*Found*。
例如:
L = [3,1,2,5,4,7].
P = (2,5).
在这个例子中,我应该得到*Found*,因为2,5 出现在列表L 中的第二和第三位置。
这是我的方法,但我得到了一个错误的答案。
search_pair([_|[]],_).
search_pair([X|T],(F,L)) :-
first(Y, T),
write('searching: '),write(F),write(' '),write(L),nl,
write('trying: '),write(X),write(' '),write(Y),nl,
((F == L , L = Y) -> (write('Found'))
search_pair(T,(F,L),R).
【问题讨论】:
-
我正在寻找连续的一对,就是这个:/
-
第 6 行有语法错误,缺少右括号和逗号。此外,'first' 没有定义,我假设你的最后一行应该调用 search_pair/2 而不是 search_pair/3,这也是未定义的
-
这比你做的要容易得多。您可以将至少包含两个元素的列表描述为
[X, Y | T],其中T是列表的其余部分(可能为空[])。除第一个元素外,该列表的其余部分是[Y | T]。 -
不要将副作用与实际程序逻辑混为一谈。
标签: list if-statement search prolog