gpt4 book ai didi

prolog - 获取子句的其余部分作为列表并创建列表列表

转载 作者:行者123 更新时间:2023-12-01 13:13:28 24 4
gpt4 key购买 nike

假设我有一些子句,其中两个如下:

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']]

最佳答案

每当您考虑 Prolog 编程问题时,您都需要阐明对您来说重要的方面。

  1. 考虑列表中两个元素的顺序。它们的顺序是因为它们按字母升序排列,还是只是运气?

  2. 您对 all_baskets('Nemo', L) 有什么期望?这应该失败,还是回答 L = []

  3. 您对 all_baskets(P, []) 有什么期望?

如果你说 1 个字母顺序,2 个失败,3 个失败,那么 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]].

关于prolog - 获取子句的其余部分作为列表并创建列表列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58261044/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com