通用的邏輯題目搜索程序。能夠解決諸如愛(ài)因斯坦難題之類的邏輯題目。
為了能夠表達(dá)現(xiàn)實(shí)的邏輯題目,軟件作者設(shè)計(jì)了一門(mén)語(yǔ)言,這門(mén)語(yǔ)言一方面很簡(jiǎn)單,另一方面也具有很強(qiáng)的表達(dá)能力。對(duì)于一個(gè)實(shí)際的邏輯問(wèn)題,用戶只需要用這門(mén)語(yǔ)言描述一下,就可一交給程序搜索需要的解。同時(shí)用戶還可以按照自己的需求定義輸出的格式。
五一的時(shí)候我發(fā)現(xiàn)一本邏輯題目的小冊(cè)子,買過(guò)來(lái)之后本想做做腦力體操消磨一下時(shí)間,可是做了不到3到題我就不耐煩了,閑下來(lái)我就想能否寫(xiě)一個(gè)程序讓計(jì)算機(jī)去求解這類問(wèn)題呢,經(jīng)過(guò)整個(gè)假期的努力居然做成了,欣喜之余我忍不住就想把它共享出來(lái)。
首先我們看一下書(shū)里面的第一個(gè)題目:
斯科特先生、他的妹妹、他的兒子、他的女兒都是網(wǎng)球選手。關(guān)于這四人有以下的情況:
(1) 最佳選手的的孿生同胞與最差選手的性別相同。
(2) 最佳選手與最差選手的年齡相同
請(qǐng)問(wèn)誰(shuí)是最佳選手
對(duì)于這樣的問(wèn)題,我的第一個(gè)困難是如何讓計(jì)算機(jī)理解它,經(jīng)過(guò)分析我設(shè)計(jì)了一門(mén)描述這類問(wèn)題的語(yǔ)言,只要輸入這種語(yǔ)言的文件,計(jì)算機(jī)就能為你自動(dòng)搜索出所要的結(jié)果。為了讓讀者對(duì)這門(mén)語(yǔ)言有一個(gè)感性的認(rèn)識(shí),下面給出描述最佳選手問(wèn)題的輸入:
所有人{(lán)} = {"斯科特","妹妹","兒子","女兒"};
性別{} = {"男","女"}; 年齡{} = {1,2,3,4};
年齡 year(所有人); 性別 sex(所有人);
所有人 同胞(所有人); 所有人 最差,最佳;
sex("斯科特") = "男"; sex("妹妹") = "女"; sex("兒子") = "男"; sex("女兒") = "女";
year("斯科特") > year("兒子"); year("斯科特") > year("女兒");
同胞("斯科特")="妹妹";同胞("妹妹")="斯科特";
同胞("兒子")="女兒";同胞("女兒") = "兒子";
最佳 != 最差;
year(最佳) = year(同胞(最佳)); //(1)最佳選手的的孿生同胞
sex(同胞(最佳)) != sex(最差); //(1)
year(最差) = year(最佳); //(2)
輸出 { "最佳選手是: " 最佳 }
假如上面的文本保存在一個(gè)”最佳選手.txt”文件中,在得到了我的znlog.exe程序后在控制臺(tái)下輸入”znlog最佳選手.txt”就會(huì)產(chǎn)生 “最佳選手是: 女兒”的輸出。
如果得到了ZnLogWin.exe程序,只需用此程序打開(kāi) 最佳選手.txt 文件就能在輸出窗口產(chǎn)生結(jié)果。