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