首页 > 解决方案 > 检查列表的前三个元素是否是相同的数据类型。Prolog

问题描述

我是Prolog的初学者。我有我的自定义类型鸟,鱼,动物。所以问题是我想传递像firstThree([owl,eagle,chicken,cat,dog])这样的函数。并得到结果为真,因为前三个是相同的数据类型。另一个例子:

firstThree([dog,cat,mouse,owl,shark,eagle]). > true

firstThree([shark,dog,owl,mouse]). > false

这是我的基础数据:

bird(eagle).
bird(chicken).
animal(cat).
animal(mouse).
animal(dog).
fish(shark).
fish(wheal).
fish(goldfish).



isSameType(X,Y):- bird(X),bird(Y);animal(X),animal(Y);fish(X),fish(Y).

我已经尝试过了,但它并没有真正起作用:

firstThree([H1,H2,H3|T]):-
   isSameType(H1,H2),
    areSameType([H2,H3|T]).

标签: prolog

解决方案


假设isSameType/2正在工作,

firstThree([H1,H2,H3|_]) :-
    isSameType(H1, H2),
    isSameType(H2, H3).

应该是足够的,因为相等是传递的(如果 H1 = H2 和 H2 = H3 则 H1 = H3)。

将来,您可能应该尝试以下方法:

critter_type(Critter, bird)   :- bird(Critter).
critter_type(Critter, animal) :- animal(Critter).
critter_type(Critter, fish)   :- fish(Critter).

isSameType(X, Y) :- critter_type(X, Type), critter_type(Y, Type).

推荐阅读