prolog - 我计算二叉树分支深度的谓词不起作用
问题描述
我正在尝试计算二叉树中左分支的深度,但谓词一直失败!
我已经尝试过trace.
,我得出的结论是失败状态必须来自is\2
仿函数,但我仍然无法弄清楚问题是什么......
leftdepth(void,0).
leftdepth(tree(_,Left,_),N):-leftdepth(Left,N),N is N+1.
我希望查询的输出为leftdepth(tree(3,tree(2,tree(5,void,void),tree(7,void,void)),void),3).
真,但输出为假。
解决方案
来电:
N is N + 1.
没有多大意义。在 Prolog 中,一个变量可以与一个值统一,但您不能再将它与不同的值“重新统一”。声明式编程的概念之一是变量不能改变值。
你可以做的是创建一个额外的变量,一个用于“ child ”的级别,一个用于“ parent ”的级别:
leftdepth(void, 0).
leftdepth(tree(_,Left,_), N1):-
leftdepth(Left, N),
N1 is N+1.
推荐阅读
- python - Binance Websocket客户端在一段时间后停止
- azure - 如何使用 REST API 在 Azure DevOps 中禁用分支策略?
- github-actions - Strapi 与 Github Actions - 保留公共上传
- swift - Swift:“FileHandle”类型的值在引用嵌套在 FileHandle 子类中的自定义函数时没有成员,但扩展工作正常
- sql - dplyr vs dbplyr 过滤与空白
- authentication - Schoology API:从另一个平台使用 Schoology 登录
- pine-script - 错误消息:参数的类型应为:series[float]
- cloud - JetBrains 托管的代理可以重用结帐目录吗?
- neo4j - 获取具有超过 X 个关系的节点及其特定格式的子节点
- c# - c# Devexpress Gridview FocusedRow 搜索后选择错误