types - 给定的序言项是二叉树吗
问题描述
我已经通过以下定义定义了给定术语是否是二叉树的成员:
isBtMember(E,bt(E,_L,_R)).
isBtMember(E,bt(_Rt,L,_R)) :- isBtMember(E,L).
isBtMember(E,bt(_Rt,_L,R)) :- isBtMember(E,R).
通过使用它,我想创建一个定义来检查给定项是否是二叉树。
现在,当谈到我对 的定义时isBtMember
,它可以工作,但不适用于以下查询:
?- btMember(bt(a,b),bt(_,_,_)).
我试图询问 a 的错误定义是否bt
可能是 any 的成员bt
。但是,让我们把它放在一边。
现在,我对我的定义的想法isBt
是这样的:
isBt(bt(E,L,R)) :- isBtMember(bt(_,_,_),L), isBtMember(bt(_,_,_),R).
我检查左节点和右节点是否是二叉树?但似乎这个定义是错误的,因为它在查询中给出了错误的结果。
关于我的错误或更好的方法的任何建议?
谢谢
编辑:这是我认为的另一种解决方案。感觉不对,因为_E
可以取任何值,例如isBt(bt(asd(a,b,c,), nil,nil))
并且仍然返回 true。
isBt(nil).
isBt(bt(_E,nil,nil)).
isBt(bt(_E,L,nil)) :- isBt(L).
isBt(bt(_E,nil,R)) :- isBt(R).
isBt(bt(_E,L,R)) :- isBt(L), isBt(R).
解决方案
推荐阅读
- msbuild - NuGet 引用程序集的临时别名如何工作?
- android - 无法usb调试,设备不显示
- sql - 在 SQL 中选择列名时是否可以执行“like ...”?
- amazon-web-services - 如何通过 Kubernetes 预置 AWS 服务?
- javascript - Javascript:0 和 1 数字的真假比较
- vim - 如何定期存储 VIm 会话
- html - 为什么当溢出设置为“可见”时我的 div 会缩小,但当 div 设置为溢出或自动时会扩展?
- liferay - Liferay DXP:设置/禁用用户注册字段
- mongodb - 版本降级后,mongodump 无法连接到 monogdb
- python - 如何在 Python 中使用 QFileDialog 打开默认浏览器下载位置?