gpt4 book ai didi

prolog - 检查序言中的项目和要求列表

转载 作者:行者123 更新时间:2023-12-01 12:38:45 26 4
gpt4 key购买 nike

我对 Prolog 有疑问。如果它是另一种具有命令式范式的语言,对我来说会更容易,但这不是重点。有几种元素,其中一些元素需要获得。例如,如果我有 b 项,则表示我已经有 a 项。

to_get(b):-
need(a).

to_get(a3):-
need(a2),
need(a1).

所以,我有一个包含项目的列表。我必须检查那里有哪些项目,然后检查每个项目的要求是否也在那里。如果它不存在,那么我必须创建一个新列表并将其添加到那里。并返回这个新列表。

L1 = [b, a1, a3]

b 需要 a,但 a 不在 L1 中,所以这意味着它在新列表 L2 中

L2 = [a, a2]

我希望这不是一个愚蠢的问题,我只是 prolog 的新手。谢谢

最佳答案

您可能假设存在描述项目之间依赖关系的关系。下面使用 closure0/3non_member/2 .

item_needs(b, a).
item_needs(a3, a2).
item_needs(a3, a1).

items_missing(Items, Needed) :-
member(Item, Items),
closure0(item_needs, Item, Needed),
non_member(Needed, Items).

?- items_missing([b,a1,a3],Missing).
Missing = a
; Missing = a2
; false.

要将其放入列表中,请使用 setof/3:

?- setof(M,items_missing([b,a1,a3],M),Ms).
Ms = [a, a2].

更一般地说:

items_missingitems(Items, Ms) :-
( ground(Items) -> true
; throw(error(instantiation_error,_)) ), % safety check
( length(Items,_) -> true
; throw(error(type_error(list,Items),_)) ), % one more
setof(M, items_missing(Items,M), Ms).

关于prolog - 检查序言中的项目和要求列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26942682/

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