如果预定义列表,则Prolog列表搜索返回false

时间:2014-11-18 02:09:27

标签: list prolog

我正在尝试编写一个prolog程序来演示如何使用切割来提高效率。我正在使用以下成员声明来搜索列表。

member(Element, [Element | _]).
member(Element, [_ | List]) :- member(Element, List).

该功能似乎正常工作:

 ?- member(1,[3,1,4]).
true 

我遇到的问题是我需要能够使用具有预先声明列表的成员。像这样:

someList([3,1,4]).

 ?- somelist(X).
X = [3, 1, 4].

3 ?- member(1,somelist).
false.

即使somelist被定义为[3,1,4],它在第一次测试中起作用,但在调用时返回false。我只需要知道?- member(1,somelist).返回false时我做错了什么。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

someList是不存在的命题的名称,而不是列表,所以它总是产生false / no。 Prolog接受查询并产生答案。你似乎要求的是命令式语言中变量的概念,这里不存在。 例如,您可以向Prolog询问所有列有member(1, X)成员的列表,或特定列表member(1, [3,1,4]),但您无法存储列表并在其中询问这样。

Prolog与知识库合作,通过它所知道的规则/谓词,事实和命题来推断真实性。你需要问问你想知道什么。