通用逻辑问题求解程序
斯科特先生、他的妹妹、他的儿子、他的女儿都是网球选手。关于这四人有以下的情况:
所有人{} = {"斯科特","妹妹","儿子","女儿"};
性别{} = {"男","女"}; 年龄{} = {1,2,3,4};
sex("斯科特") = "男"; sex("妹妹") = "女"; sex("儿子") = "男"; sex("女儿") = "女";
year("斯科特") > year("儿子"); year("斯科特") > year("女儿");
同胞("斯科特")="妹妹";同胞("妹妹")="斯科特";
同胞("儿子")="女儿";同胞("女儿") = "儿子";
year(最佳) = year(同胞(最佳)); //(1)最佳选手的的孪生同胞
假如上面的文本保存在一个”最佳选手.txt”文件中,在得到了我的znlog.exe程序后在控制台下输入”znlog最佳选手.txt”就会产生 “最佳选手是: 女儿”的输出。
输入语言
当然完全通用的描述语言远不是我一个人能够设计好的,就算prolog的解析分析程序也不是我能写成的,不过大多数(特别是我手头小册子中的)逻辑问题都不是太复杂,我发现它们可以用几个简单的语言就能描述。
集合定义
集合元素可以是数字或者字符串,但是同一个集合中集合元素不能同时包含数字和字符串。出于实现难度的考虑我限制数字只能是整数,数字集合可以使用[a,b]的语法,[a,b]表示从a开始到b的所有数,例如:
A{} = {[3,7],9,10}; 就等价于 A{} = {3,4,5,6,7,9,10};
在定义字符串集合的时候每个字符串都必须用””号括起来,例如下面是一个字符串集合的例子:
每个集合定义必须占用一个单独的语句,每个语句使用;号作为结束符。
变量定义
说完集合之后就该说到变量了,每个变量在使用前都需要给出它的定义,变量定义语法为:
在定义变量时第一个需要给出的就是它的类型,也就是已经定义了的集合名字。这个类型规定了变量的取值范围。多个变量可以定义在一个语句中。
为了满足需要,我一共设计了三种变量,一种是单变量,一种是序变量,一种是参变量。
单变量是最简单的,例如语句 A a; 就定义一个单变量a,这个a的取值范围是A。
参变量相当于一个函数,例如语句 A f(B); 就定义了一个参变量,参变量的定义语法为:
由于时间有限我暂时只支持一个参数的定义方式。也就是说现在的znlog程序只接受语法为:变量名(参数类型); 的定义。
条件定义
另外条件中还可以使用 存在 和 任意 两个量词,它们的语法是
取值{} = {1,2,3,4}; 编号{} = {[0,15]}; 取值 M(编号);
任意 x 属于 编号, 任意 y 属于 编号, x/4=y/4 | x%4=y%4 -> x=y | M(x)!=M(y);
输出定义
最后该说的就是输出定义了,znlog在进行搜索的时候,如果发现了一个满足所有条件的解,就会将结果输出出来,输出的方式由用户指定,输出定义的语法如下:
输出定义由关键字输出引导,然后在{}中给出所有的输出元素,每个输出元素可以是字符串,也可以是表达式,字符串中使用c风格的/n/t导出换行和制表符。
通用逻辑问题求解程序相关推荐
- 调用第三方接口缴费的通用逻辑
下面是我总结的调用第三方接口缴费的通用逻辑 代码逻辑如下: 代码示例: public RestDTO<BaseDTO> charge(Param param)throws Exceptio ...
- Linux中断(interrupt)子系统之四:驱动程序接口层 中断通用逻辑层
在本系列文章的第一篇:Linux中断(interrupt)子系统之一:中断系统基本原理,我把通用中断子系统分为了4个层次,其中的驱动程序接口层和中断通用逻辑层的界限实际上不是很明确,因为中断通用逻辑层 ...
- 三十行代码教你做个通用文字识别程序
三十行代码教你做个通用文字识别程序 准备 开始编程 测试 准备 在开始敲代码前,我们先做一些准备.我们的这个通用文字识别程序的原理很简单,就是通过API调用百度智能云提供的免费的通用文字识别(标准版) ...
- 关键元器件选型设计指引--通用逻辑器件(逻辑IC)
1.物料分类--标准逻辑器件 标准数字逻辑IC集成电路可以从工艺.功能和电平三个方面划分,列表所示. 注:常见的逻辑电路有54军用系列和74商用系列,两者电路功能一致,本文仅讨论74系列. 按照制造工 ...
- 通用预约小程序,可广泛应用于医疗、政务、教育、培训、体育、金融、生活服务等行业领域,基于腾讯小程序云开发,无须服务器和域名
项目介绍 采用小程序+腾讯云技术构建的高效自有业务预约平台解决方案,无需域名和服务器即可搭建. 机构/商户/企业/个体可以利用本软件快速搭建出自有业务预约平台, 小程序在微信里打开,无需下载安装APP ...
- 西门子PLC动态密码程序,1200PLC和1500PLC通用,催款程序,动态密保,底层使用SCL写的
西门子PLC动态密码程序,1200PLC和1500PLC通用,催款程序,动态密保,底层使用SCL写的,详细介绍了程序编写的思路和画面操作步骤,非常值得拥有
- 不错的linux下通用的java程序启动脚本(转载)
虽然写起动shell的频率非常不高...但是每次要写都要对付一大堆的jar文件路径,新加jar包也必须要修改起动shell. 在网上找到一个挺好的通用shell脚本. 只需要修改一些配置变量,就可以用 ...
- linux java启动脚本文件_不错的linux下通用的java程序启动脚本
#!/bin/sh #该脚本为Linux下启动java程序的通用脚本.即可以作为开机自启动service脚本被调用, #也可以作为启动java程序的独立脚本来使用. # #Author: tudaxi ...
- C#通用权限管理-程序安全检查,这些你一定要考虑到位
接触通用权限已经一年,现在使用已经很熟练,分享通用权限管理下面的一些好的开发思想. 安全漏洞对于一个小项目来说,可能不是特别的重视,对于一个大项目来说,这是特别重要需要注意的,特别是在项目开发中的就要 ...
最新文章
- I2C和SPI总线优缺点对比
- CentOS常见配置
- 金融的财务的一些概念
- 白嫖我常用的 11 个超火的前端必备在线工具,终于有时间上班摸鱼了
- 第一章计算机网络概述答案,第一章 计算机网络概述[3]
- python实现非对称加密算法_Python3非对称加密算法RSA实例详解
- Oracle rac11g 安装报INS41112
- Linux配置NTP服务器
- TCP、UDP、HTTP、SOCKET、WebSocket之间的区别
- DCMTK 查询 WorkList
- 三角函数的极限和导数
- python rasterio库和gdal库匹配与冲突问题安装办法
- 面阵相机以及相机选型公式
- 利用tensorflow训练自己的图片数据(1)——预处理
- 面试官:说一说 Docker 原理
- ​VC深思考:在商还得言商!
- 【高级篇 / HA】(6.0) ❀ 03. 通过命令切换 HA 主备 ❀ FortiGate 防火墙
- 200+款神器,全网最好用的免费在线工具,都在这里了!
- 照片美妆--人像变老算法研究
- 如何快速关闭8080端口