Prolog 获取子句的其余部分作为列表并创建列表列表
假设我有一些条款,其中两条如下:Prolog 获取子句的其余部分作为列表并创建列表列表,prolog,Prolog,假设我有一些条款,其中两条如下: has_basket('Sarah', 'bigBasket','apple','grape'). has_basket('Sarah', 'bigBasket','orange','berry'). 如何编写名为 all_baskets(S,L). 哪一个会给我一张S所拥有的所有篮子的清单,格式如下? 比如说 all_baskets('Sarah',L). 将给我们: L=[['bigBasket','apple','grape], ['bigBaske
has_basket('Sarah', 'bigBasket','apple','grape').
has_basket('Sarah', 'bigBasket','orange','berry').
如何编写名为
all_baskets(S,L).
哪一个会给我一张S所拥有的所有篮子的清单,格式如下?
比如说
all_baskets('Sarah',L).
将给我们:
L=[['bigBasket','apple','grape], ['bigBasket','orange','berry']]
我们可以利用:
所有_篮(S,L):-
findall([A,B,C])有一个篮子(S,A,B,C,L)。
<代码> >代码> [a,b,c] < /c>是列表中的项目的“模板”,<代码> HasyB篮(s,a,b,c)< /c>需要填充的“目标”,和<代码> L>代码>结果列表。 每当考虑Prolog编程问题时,你需要阐明对你很重要的方面。
所有的篮子('Nemo',L)
有什么期望?如果失败,或者更确切地说是回答L=[]
所有的篮子(p,[])有什么期望
setof/3
就是正确的选择
has_basket('Sarah', bigBasket, apple, grape).
has_basket('Sarah', bigBasket, orange, berry).
has_basket('Bernie', bigBasket, orange, apple). % another fact
all_baskets(P, L) :-
setof([A, B, C], has_basket(P, A, B, C), L).
?- all_baskets(P, []).
false.
?- all_baskets('Nemo', L).
false.
?- all_baskets(P, L).
P = 'Bernie',
L = [[bigBasket, orange, apple]]
;
P = 'Sarah',
L = [[bigBasket, apple, grape], [bigBasket, orange, berry]].
has_basket('Sarah', bigBasket, apple, grape).
has_basket('Sarah', bigBasket, orange, berry).
has_basket('Bernie', bigBasket, orange, apple). % another fact
all_baskets(P, L) :-
setof([A, B, C], has_basket(P, A, B, C), L).
?- all_baskets(P, []).
false.
?- all_baskets('Nemo', L).
false.
?- all_baskets(P, L).
P = 'Bernie',
L = [[bigBasket, orange, apple]]
;
P = 'Sarah',
L = [[bigBasket, apple, grape], [bigBasket, orange, berry]].