<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 家譜 假設我們有這樣一個家譜圖: !["alt"](https://box.kancloud.cn/2015-08-05_55c1da050d6e7.png "family-tree") 我們現在的任務是將這個家譜圖寫成程序代碼的形式。請打開你最喜歡的文本編輯器,輸入以下代碼。 ~~~ male(di). male(jianbo). female(xin). female(yuan). female(yuqing). father(jianbo,di). father(di,yuqing). mother(xin,di). mother(yuan,yuqing). grandfather(X,Y):-father(X,Z),father(Z,Y). grandmother(X,Y):-mother(X,Z),father(Z,Y). daughter(X,Y):-father(X,Y),female(Y). ~~~ 這段代碼里面的每一行都代表一個子句(clause)。其中帶有“:-”的子句叫做規則(rule),不帶有”:-“的子句叫做事實(fact)。另外,在Prolog里面諸如”di”和”jianbo”這類以小寫英文字母開頭的名稱我們稱它們為原子(atom),以大寫英文字母為開頭的名稱我們稱它們為變量,例如上面程序里面的”X”和”Y”。顧名思義,原子是常量,即它的值是不可變的,而變量的值可以改變。最后需要講的是,在Prolog里面”,”代表邏輯關系中的”且”,我們回在后面的章節里面看到,”;”代表邏輯關系里面的”或”。 已經被這些名稱搞得頭暈了?沒關系,我會在之后的教程里面詳細的介紹Prolog的數據類型和術語,在這里,你只需有初步的了解即可。 保存上述代碼到你的磁盤的某個地方,例如在Mac系統里,我把它存到“~/prolog/chapter2.pl”,然后依照第一章里面講的那樣,進入SWI-Prolog。在SWI-Prolog里面輸入如下查詢: ~~~ ?- consult('path/to/your/chapter2.pl'). ~~~ 在我的電腦里,我應該這么輸入: ~~~ ?- consult('~/prolog/chapter2.pl'). ~~~ 這里”consult”的意思是讓SWI-Prolog加載你編寫的程序,然后編譯它。輸入完這句查詢以后,敲擊回車鍵,你應該得到如下輸出: ~~~ % /Users/fengdi/prolog/chapter2.pl compiled 0.00 sec, 3,816 bytes true. ~~~ 如果你得到了上述的輸出,那么恭喜你,你的第一個程序完成了。如果你得到的是其他的錯誤的輸出,請重新檢查你的程序代碼是否輸入正確(不過要記得,千萬不要因為想要保證代碼輸入的不出錯而直接復制粘貼代碼,那樣的話你學不到真正的東西)。下面,讓我們考驗一下我們的SWI-Prolog現在都知道些什么。在SWI-Prolog里面輸入下面一個查詢: ~~~ grandfather(X,yuqing). ~~~ 令人驚訝的事情發生了!你得到了下列輸出: ~~~ X = jianbo. ~~~ 你的電腦告訴你,”yuqing”的祖父是”jianbo”。現在請看之前我們編寫的”chapter2.pl”程序代碼,我們在程序里根本沒有明確的說明誰是誰的祖父,我們只是給了一個規則: ~~~ grandfather(X,Y):-father(X,Z),father(Z,Y). ~~~ 我們說,當X是Z的父親并且Z是Y的父親的時候,X是Y的祖父。然后我們問,yuqing的祖父是誰,Prolog就能自動幫我們找到答案! 下面再看一個例子: ~~~ parent(keyuan,jianbo). parent(jianbo,di). parent(di,yuqing). ancestor(X,Y):-parent(X,Y). ancestor(X,Y):-parent(X,Z),ancestor(Z,Y). ~~~ 在這個例子里面,我們定義了一個回溯的規則”ancestor”,規則可以這樣解讀:我們可以說X是Y的祖先基于兩個條件:X是Y的parent,或者存在一個Z,使得X是Z的parent并且Z是Y的祖先。請讀者仔細的想一下,是不是這個道理呢?為了證明我們的程序的正確性,我們輸入一下查詢: ~~~ ?- ancestor(keyuan,yuqing). ~~~ Prolog會返回: ~~~ true. ~~~ 這證明了我們的程序是正確的,因為根據常識,keyuan是yuqing的曾祖父,所以keyuan是yuqing的祖先。 好了,今天的新內容就講到這里,下面是一個習題,你可以自己試驗一下。 ## 加分習題 1. 試著用Prolog描述一下你的家譜,并且做一些簡單的查詢。(小提示:在編寫你的家譜的時候,你可以試著用一些新的事實,比如:”sister(your_sister,you)”“brother(your_brother,you)”等等)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看