如何在 Prolog 中编写选择特定事实的规则
How to write rule(s) that selects specific facts in Prolog
我想了解如何在 prolog 中构造输出。假设我有如下一些事实
/* Facts */
course1(lunch, burrito).
side(lunch, chips).
side(lunch, pop).
course1(dinner, pizza).
side(dinner, breadsticks).
side(dinner, water).
我怎样才能写出类似 food(X, Y) 的规则,其中 X 是午餐或晚餐,然后分别吃 return“卷饼、薯条和汽水”或“披萨、面包棒和水” ?
这将帮助您完成所需的大部分工作 food/2。
谓词
文件:C:/Users/Groot/example.pl
lunch(X) :- course1(lunch,X).
lunch(X) :- side(lunch,X).
示例运行
Welcome to SWI-Prolog (threaded, 64 bits, version 8.5.0)
?- working_directory(_,'C:/Users/Groot').
true.
?- [example].
true.
?- lunch(X).
X = burrito ;
X = chips ;
X = pop.
如果您想要列表中的所有项目,请使用 findall/3。
?- findall(X,lunch(X),X).
X = [burrito, chips, pop].
food/2
食物(X,Y):- 课程 1(X,Y)。
食物(X,Y):- 边(X,Y)。
我想了解如何在 prolog 中构造输出。假设我有如下一些事实
/* Facts */
course1(lunch, burrito).
side(lunch, chips).
side(lunch, pop).
course1(dinner, pizza).
side(dinner, breadsticks).
side(dinner, water).
我怎样才能写出类似 food(X, Y) 的规则,其中 X 是午餐或晚餐,然后分别吃 return“卷饼、薯条和汽水”或“披萨、面包棒和水” ?
这将帮助您完成所需的大部分工作 food/2。
谓词
文件:C:/Users/Groot/example.pl
lunch(X) :- course1(lunch,X).
lunch(X) :- side(lunch,X).
示例运行
Welcome to SWI-Prolog (threaded, 64 bits, version 8.5.0)
?- working_directory(_,'C:/Users/Groot').
true.
?- [example].
true.
?- lunch(X).
X = burrito ;
X = chips ;
X = pop.
如果您想要列表中的所有项目,请使用 findall/3。
?- findall(X,lunch(X),X).
X = [burrito, chips, pop].
food/2
食物(X,Y):- 课程 1(X,Y)。
食物(X,Y):- 边(X,Y)。