gpt4 book ai didi

Prolog 语句/动物命令(逻辑帮助)

转载 作者:行者123 更新时间:2023-12-02 11:36:38 24 4
gpt4 key购买 nike

我想知道如何让这样的事情发挥作用。这似乎是一个简单的概念,但我对 Prolog 很陌生,我似乎不知道如何正确地做到这一点。

例如,这里有两个表。每一种动物,无论其类别如何,都有两个事实。

哺乳动物:

老虎 - 条纹,强大

河马 - 大而危险

大象 - 大而温柔

昆虫:

苍蝇 - 黑色,有翅膀

毛毛虫 - 绿色,缓慢

蜗牛 - 粘糊糊的,缓慢

我如何在 Prolog 代码中编写所有这些语句,以便将苍蝇及其特征分类为昆虫,将河马及其特征分类为哺乳动物?

那么,如果我插入这样的规则会怎么样?

guess(mammal, large) 

查阅代码后,我会写出这样的命令:

possibleanimal(mammal, X) 

该命令的结论是:

X = hippo 
X = elephant

因为河马和大象都有体型大的特点。

另一个例子:

guess(insect, slow) 
guess(insect, green)

指挥部咨询后询问:

possibleanimal(insect, Y) 
Y= caterpillar

我们可以忽略蜗牛,因为尽管它很慢,但它不是绿色的。

请大家帮帮忙,谢谢!

最佳答案

第一个例子看起来像传递性,所以试试这个:

% animal(Animal, Property)
animal(tiger, striped).
animal(tiger, powerful).
animal(hippo, large).
animal(hippo, dangerous).
animal(elephant, large).
animal(elephant, gentle).

% guess(Category, Property)
guess(mammal, large).

% possibleanimal(Category, Animal)
possibleanimal(C, A) :-
guess(C, P),
animal(A, P).

?- possibleanimal(mammal, X).
X = hippo ;
X = elephant

现在棘手的部分是第二个例子,因为我们有多个猜测/2。

我猜你希望它们同时举行。所以你需要一种 forall。

Forall可以在Prolog中定义如下:

% forall(Goal,Goal)
forall(A, B) :- \+ (A, \+ B).

参见示例: http://www.swi-prolog.org/pldoc/man?predicate=forall%2F2

所以你可以尝试这个:

% possible(Animal)
possible(fly).
possible(caterpillar).
possible(snail).

% animal(Animal, Property)
animal(fly, black).
animal(fly, winged).
animal(caterpillar, green).
animal(caterpillar, slow).
animal(snail, slimy).
animal(snail, slow).


% guess(Category, Property)
guess(insect, green).
guess(insect, slow).

% possibleanimal(Category, Animal)
possibleanimal(C, A) :-
possible(A),
forall(guess(C,P), animal(A,P)).

?- possibleanimal(insect,X).
X = caterpillar ;
No

希望这有帮助。

再见

关于Prolog 语句/动物命令(逻辑帮助),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13113574/

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