gpt4 book ai didi

Prolog:考虑到项目可以恰好属于两个集合之一且集合大小已知的推论

转载 作者:行者123 更新时间:2023-12-02 02:20:40 25 4
gpt4 key购买 nike

我的房间里有 5 个人。我将编写规则来确定人们是快乐还是悲伤。然而,在我开始之前,我已经掌握了最重要的知识:在 5 个中,恰好 3 个是快乐的,2 个是悲伤的(并且没有一个可以两者兼而有之)。因此,应该可以据此进行推论:如果——无论如何——我知道三个快乐的人是谁,那么我就可以推断出两个悲伤的人,反之亦然。

到目前为止我得到的信息如下:

person(bob).
person(tim).
person(steve).
person(roy).
person(jack).

sad(bob).
sad(tim).

happy(X) :-
person(X),
\+ sad(X),
findall(Y, sad(Y), YS),
length(YS, 2).

当询问happy(X)时,Prolog会给我Roy、Steve和Jack,因为它已经知道这两个悲伤的人是谁。问题:由于与 happy/1 的相互递归,我无法以相同的方式定义 sad/1 规则。我希望能够添加规则,使上面示例中的结果保持不变,但以下初始化会将 Bob 和 Tim 列为悲伤:

person(bob).
person(tim).
person(steve).
person(roy).
person(jack).

happy(steve).
happy(roy).
happy(jack).

我应该有更好的方式来思考这个问题吗?重要的是,我以后能够继续为 sad/1happy/1 编写更多规则,除了可以进行推导之外还添加其他逻辑基于将 5 分为 3 个快乐和 2 个悲伤的知识。

最佳答案

使用 怎么样? ?

:- use_module(library(clpb)).

示例查询:

?- Hs = [Bob,Tim,Steve,Roy,Jack],   sat(card([3],Hs)),                               % exactly three are happy.   (       Who =   sad, sat(~H_bob * ~H_tim)             % specify the sad ones ...   ;  Who = happy, sat(H_jack * H_roy * H_steve)    %  ... OR the happy ones?   ),   labeling(Hs).   Who =   sad, Bob = 0, Tim = 0, Jack = 1, Roy = 1, Steve = 1, Hs = [0,0,1,1,1];  Who = happy, Bob = 0, Tim = 0, Jack = 1, Roy = 1, Steve = 1, Hs = [0,0,1,1,1].

关于Prolog:考虑到项目可以恰好属于两个集合之一且集合大小已知的推论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34028651/

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