使用prolog将结果存储为列表

时间:2014-03-18 03:02:08

标签: list prolog

我希望将结果存储在列表中。

subject(english, 2).
subject(math,2).
subject(science,2).

get_subject(subject, level) :- subject(subject,level) .

当我有这个查询时:

?-get_subject(X,2).

它给了我输出:

X = english;
X = math;
X = science.

但我希望输出列表如下: [英语,数学,科学] 是不是可以在prolog中做到这一点?

1 个答案:

答案 0 :(得分:3)

是的,只需使用findall

?- findall(X, get_subject(X,2), Subjects).

此外,您的get_subject定义应使用大写字词表示变量:

get_subject(Subject, Level) :- subject(Subject, Level).

您使用什么Prolog系统,以便您的小型代码有效?

当然,您的get_subject没有做任何有用的事情,您可以删除其定义并直接使用subject

?- findall(X, subject(X,2), Subjects).
Subjects = [english, math, science].