gpt4 book ai didi

prolog - 你如何在 Prolog 中表达事实的相互排斥?

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

假设您正在使用谱系数据库。有些记录缺失。您可能知道名为“John”的人是男性,名为“Mary”的人是女性,等等。

male(X)   :- first_name(X, "John").
female(X) :- first_name(X, "Mary").

对于具有异国情调或外国名字的人,他们的性别可能不清楚,但一定是两者之一。婚姻(本世纪之前)是在异性之间进行的。

female(X) :- wed(X, Y), male  (Y).
male (X) :- wed(X, Y), female(Y).

知道某人的性别是男性还是女性(即使您不知道是哪一个)是破译身份和关系的重要技巧。

您将如何在 Prolog 中编码这些知识?


female(X) :- person(X), not(male(X)).

这是不正确的,因为它会让你得出结论:每个人都是女性,除非可以证明他们是男性。

最佳答案

incorrect, as it makes you conclude that everyone is female unless they can be proven to be male

这种稍加精炼的推理并没有不正确。每个人都可能是女性,除非他们被证明是男性。他们还会是什么?

possibly_female(Person) :-
person(Person),
\+ proven_male(Person).
possibly_female(Person) :-
proven_female(Person).

possibly_male(Person) :-
person(Person),
\+ proven_female(Person).
possibly_male(Person) :-
proven_male(Person).

不过,根据您想要做什么,使用男性/女性/未知三向划分可能更简单,而不是使用已知/可能的性别划分:

unknown_gender(Person) :-
person(Person),
\+ proven_female(Person),
\+ proven_male(Person).

(许多关于性别二元论的警告适用于现实世界,但可以说,如果您确实基于二元假设对历史数据库进行建模,那么使用该模型是合理的。)

关于prolog - 你如何在 Prolog 中表达事实的相互排斥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65488156/

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