prolog - 检查列表的前三个元素是否是相同的数据类型。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]).
解决方案
假设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).
推荐阅读
- java - 是否可以将类(在 diff 模块中)添加到类路径并将其与反射一起使用
- java - 如何使用没有屏幕的java机器人模拟鼠标点击
- grafana - tidb grafana 没有数据点
- java - 使用 AWS4Signer 签署获取请求:我们计算的请求签名与您提供的签名不匹配
- remote-desktop - 禁用/启用鼠标和键盘输入到 Microsoft RDP
- excel - 如果它们的值高于/低于仅影响每行的平均值,如何突出显示每行中的单元格
- html - 使用 Bulma CSS 居中卡片
- python - 将文本文件内容读入整数列表
- ruby-on-rails - 数组中的rails组匹配日期
- javascript - 模态函数只显示黑屏而不是实际的模态,