prolog - 如何在 prolog 谓词中实例化变量
问题描述
list([]) :- !.
list([A|B], X) :- X = X + 1, list(B, X).
我有以下谓词,我希望确定列表的大小。在第二个谓词中,当我最初遇到谓词时, X 未初始化。如何在对其进行递增之前检查 X 是否具有值。
?-list([a,b,c,d,e,f,g],X).
在这种情况下 X 应该返回 7
解决方案
在声明性范例中,实例化是不可能的(除非您使用 datafact 或类似的东西),因此解决您的问题的一种方法是声明空列表的大小为 0:
list([],0) :- !.
list([A|B], X1) :- list(B, X0), X1 = X0 + 1.
这样,你知道列表L的长度是1+( L尾的长度)
推荐阅读
- java - 将 Docker 和 docker compose 与 Spring Boot REST 应用程序一起使用
- c - 我可以确定该类型是否是 C 中的指针类型吗?
- networking - Chrome 中的旧主机地址
- regex - Pyspark 从日期层次结构存储中读取选定的日期文件
- android - 引用稍后在 android 布局文件中定义的视图是否是一个好习惯
- java - 如何导出整个项目的调用层次结构
- powershell - 使用 PowerShell 脚本删除 CSV 文件的列和最后一行
- android - 如何在kotlin中实现自定义navigationBar Fragment
- ios - 使用 Decodable 解码嵌套对象数组
- email - 链接未显示在 php 的电子邮件正文中