立即领取|华润集团、宁德核电、东风岚图等 20+ 标杆企业数字化人才培养实践案例 了解详情
写点什么

Prolog 递归

  • 2019-12-11
  • 本文字数:655 字

    阅读完需:约 2 分钟

Prolog 递归

在这一次的 post 中, 我们将要介绍 Prolog 中的递归定义, 也就是说, 一个 predicate 如果它定义了一个或多个引用自己的规则, 那么这个 predicate 就是递归的.


递归的定义非常地简单:


is_digesting(X,Y):-just_ate(X,Y).is_digesting(X,Y):-    just_ate(X,Z),    is_digesting(Z,Y).just_ate(mosquito,blood(john)).just_ate(frog,mosquito).just_ate(stork,frog).
复制代码


is_digesting 就是一个递归地 predicate, 在这个 knowledge base 上, 我们就可以询问 Prolog.


?- just_ate(stork,blood(john)).true
复制代码


虽然我们并没有直接定义这个事实, 不过 Prolog 根绝递归定义地 is_digesting 推出了这个结果.


递归是一种非常强大的定义方式, 但是, 我们也能遇到一切错误, 如果, 你是用下面的这种定义方式, 就会出现无限递归.


is_digesting(X,Y):-is_digesting(X,Y).
复制代码


这个无限递归是非常明显的.


is_digesting(X,Y):-    is_digesting(Z,Y),    just_ate(X,Z).
复制代码


上面的定义初看是正确的, 不过 Prolog 会不断地调用 is_digesting 导致无限递归, 所以这也是错误的.


我们需要正确是使用递归, 使用递归定义式, 要在定义最后添加自己的引用而不是在定义的前面.

关于图片和转载

本作品采用知识共享署名 4.0 国际许可协议进行许可。


  转载时请注明原文链接,图片在使用时请保留图片中的全部内容,可适当缩放并在引用处附上图片所在的文章链接,图片使用 Sketch 进行绘制,你可以在 [](https://draveness.me/draveness.me/sketch-sketch) 一文中找到画图的方法和素材。
复制代码


本文转载自 Draveness 技术博客。


原文链接:https://draveness.me/prolog-di-gui-3


2019-12-11 15:25682

评论

发布
暂无评论
发现更多内容

关于飞书的告警通知,这里有个更好的办法

睿象云

运维 告警 运维平台 智能告警

TCP协议认知篇

邱学喆

TCP协议 拥塞避免算法 慢启动算法 坚持定时器 TCP状图切换

最全互联网后端免费技术分享视频资源学习社区

hanaper

北鲲云超算平台如何帮助高性能计算行业提供解决方案

北鲲云

技术实践|网易云信 IM SDK 服务高可用技术方案

网易云信

后端

WorkPlus高端制造业移动数字化平台解决方案—华晨宝马

WorkPlus

即时通讯 移动办公平台 移动数字化底座 移动数字化基座 企业即时通讯平台

ipfs挖矿合法吗?ipfs挖矿靠谱吗?

区块链 IPFS ipfs挖矿 ipfs矿机 filecoin挖矿

springboot+vue+activiti,在线编辑器,快速开发平台

金陵老街

Java Vue 工作流 springboot Activiti

打开vscode好像打开了原神?vscode原神背景推荐,比博燃

CodeNongXiaoW

vscode vscode背景 原神

如何从内部保障企业数据安全?用IT运维审计系统可以吗?

行云管家

网络安全 数据安全 堡垒机 IT运维 运维审计

技术分析| 实时音视频通讯中的流媒体是怎样传输的

anyRTC开发者

音视频 WebRTC 流媒体 流媒体传输

区块链“通证”将颠覆“资本”

CECBC

区块链产业大爆发!未来究竟是谁的机会?

CECBC

阿里巴巴首发:Java核心框架指导手册1小时点击量破千万!

Java 编程 面试 程序人生 Alibaba

图数据库在百度汉语中的应用

百度Geek说

数据库 后端

模块一作业

陈家豪

架构实战营

交易所智能炒币机器人开发||量化交易炒币机器人系统搭建

Geek_23f0c3

量化交易机器人系统开发 炒币机器人

吐血整理!金九银十必问的1000道Java面试题及答案

Java 编程 程序员 架构 面试

kubelet 1.14 升级 kubelet 1.20 容器重启问题

Geek_f24c45

Docker Kubernetes kubelet

小公司实施系统为什么也容易失败?

明道云

Spring 配置加载

樊江。

Spring Framework

高可用 | Xenon 实现 MySQL 高可用架构 部署篇

RadonDB

MySQL 数据库 Xenon RadonDB

如何基于分布式KV研发一款消息中间件

Java 编程 面试 后端 中间件

区块链应用:从技术工具到创新思维

CECBC

能不能征服初恋,就看这个架构了!!!

人工智能~~~

计算机网络常用知识总结

Java 架构 后端 网络 计算机

量化交易炒币机器人系统搭建

量化系统19942438797

机器人 量化交易

Goroutine & Channel

Vibyird

并发编程 channel CSP Go 语言 goroutine

宝安机关食堂支持数字人民币刷脸支付

CECBC

fil挖矿步骤教程是什么?fil挖矿规则是什么?

fil挖矿步骤教程是什么 fil挖矿规则是什么

阿里资深架构师终于把微服务架构与实践第2版PDF分享出来了

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

Prolog 递归_语言 & 开发_Draveness_InfoQ精选文章