通用的逻辑题目搜索程序。能够解决诸如爱因斯坦难题之类的逻辑题目。
为了能够表达现实的逻辑题目,软件作者设计了一门语言,这门语言一方面很简单,另一方面也具有很强的表达能力。对于一个实际的逻辑问题,用户只需要用这门语言描述一下,就可一交给程序搜索需要的解。同时用户还可以按照自己的需求定义输出的格式。
五一的时候我发现一本逻辑题目的小册子,买过来之后本想做做脑力体操消磨一下时间,可是做了不到3到题我就不耐烦了,闲下来我就想能否写一个程序让计算机去求解这类问题呢,经过整个假期的努力居然做成了,欣喜之余我忍不住就想把它共享出来。
首先我们看一下书里面的第一个题目:
斯科特先生、他的妹妹、他的儿子、他的女儿都是网球选手。关于这四人有以下的情况:
(1) 最佳选手的的孪生同胞与最差选手的性别相同。
(2) 最佳选手与最差选手的年龄相同
请问谁是最佳选手
对于这样的问题,我的第一个困难是如何让计算机理解它,经过分析我设计了一门描述这类问题的语言,只要输入这种语言的文件,计算机就能为你自动搜索出所要的结果。为了让读者对这门语言有一个感性的认识,下面给出描述最佳选手问题的输入:
所有人{} = {"斯科特","妹妹","儿子","女儿"};
性别{} = {"男","女"}; 年龄{} = {1,2,3,4};
年龄 year(所有人); 性别 sex(所有人);
所有人 同胞(所有人); 所有人 最差,最佳;
sex("斯科特") = "男"; sex("妹妹") = "女"; sex("儿子") = "男"; sex("女儿") = "女";
year("斯科特") > year("儿子"); year("斯科特") > year("女儿");
同胞("斯科特")="妹妹";同胞("妹妹")="斯科特";
同胞("儿子")="女儿";同胞("女儿") = "儿子";
最佳 != 最差;
year(最佳) = year(同胞(最佳)); //(1)最佳选手的的孪生同胞
sex(同胞(最佳)) != sex(最差); //(1)
year(最差) = year(最佳); //(2)
输出 { "最佳选手是: " 最佳 }
假如上面的文本保存在一个”最佳选手.txt”文件中,在得到了我的znlog.exe程序后在控制台下输入”znlog最佳选手.txt”就会产生 “最佳选手是: 女儿”的输出。
如果得到了ZnLogWin.exe程序,只需用此程序打开 最佳选手.txt 文件就能在输出窗口产生结果。