<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ### 單詞謎題 在進行下一章之前,我想先把上一章加分習題的第二題答案給大家揭曉一下,因為臺北小碼農給我反應說這一道題有點難了,連學過Prolog的人都不一定會做。確實,這是一道難題,但是這道題的難點不在于程序本身邏輯上的復雜或者是用到了什么高級的語法,這道題的難點在于你必須要清楚地理解Prolog程序的意義才能得出答案。好了,先給大家看一下答案的程序: ~~~ solution(L1,L2,L3,L4,L5,L6,L7,L8,L9,L10,L11,L12,L13,L14,L15,L16):- word(L1,L2,L3,L4,L5), word(L9,L10,L11,L12,L13,L14), word(L1,L6,L9,L15), word(L3,L7,L11), word(L5,L8,L13,L16). ~~~ 以上就是這個單詞謎題的答案。在編寫Prolog程序的時候,之前有編程基礎的朋友一定要摒棄之前編程的習慣,因為像C,Java這樣的程序語言,程序員解決問題的方式實際上是把解決問題的步驟用程序一步一步地表示出來。換句話說,就是程序員要用程序語言告訴電腦應當怎樣一步一步地做,才能找到問題的答案。Prolog不是這樣,Prolog程序員讓程序解決一個問題時,只需要把想要得到的答案的形式表述出來,Prolog系統會自動幫你找答案。就像上面這個程序一樣,你告訴Prolog系統,答案應該是什么樣子的呢?首先,我們要將5個單詞填入表格中,同時,單詞和單詞之間有可能共享同一個英文字母。所以這兒有兩個“約束”,一個約束是單詞字母的個數,第二個約束是單詞里面可以出現的字字母。讓我們先寫水平排列的兩個單詞: ~~~ word(L1,L2,L3,L4,L5), <-----單詞1 word(L9,L10,L11,L12,L13,L14) <-----單詞2 ~~~ 之后,我們加上豎直的三個單詞: ~~~ word(L1,L6,L9,L15), <-----單詞3 word(L3,L7,L11), <-----單詞4 word(L5,L8,L13,L16) <-----單詞5 ~~~ 單詞1和單詞3共享字母“L1”,單詞4和單詞1共享字母“L3”,單詞4和單詞2共享字母“L12”,依次類推,我們可以把所有的約束都寫出來。這樣,我們就告訴Prolog系統最后的答案長得什么樣兒了。有了答案的形式,Prolog就會用我之前提到的三個策略(回溯,變量重命名,模式匹配)來找出答案。 ### 程序的意義 上述的程序其實昭示了Prolog程序的其中一個意義:陳述性意義(declarative meaning)。Prolog程序具有陳述性意義就在于Prolog都是描述的邏輯學上的一個事實或者是一個規則。例如: ~~~ mother(pam,bob). ~~~ 這句程序語句陳述了一個事實:pam是bob的媽媽。再看: ~~~ grandmother(X,Y):-mother(X,Z),father(Z,Y). ~~~ 這個語句陳述的是一個規則:當X是Z的母親并且Z是Y的父親時,X是Y的母親。當我們在Prolog系統上輸入“grandmother(X,bob)”這樣的查詢時,實際上就是讓Prolog根據自己知道的邏輯規則來試圖證明你的查詢。這就是程序的陳述性意義。 程序的第二個意義是過程性意義。想Java和C這樣的語言一樣,Prolog的程序也具有過程性意義,即解決問題的步驟。在舉例子之前,我先講一個在Prolog里面常用的語句:”write”,它的作用是向顯示屏輸出信息。它的參數可以是任意類型的數據,數字,字符串,甚至一個Prolog的規則都可以直接被輸出。另外一個語句是”nl”,它的作用是使Prolog的屏幕輸出換行。下面給一個程序,你就能理解”write”和”nl”的作用了: ~~~ write('I have a dream'),nl, write('that my four little children will one day live in a nation'),nl, write('where they will not be judged by the color of their skin'),nl, write('but by the content of their character.'),nl, write('This is form Martin Luther King'). ~~~ Prolog會這樣輸出: ~~~ I have a dream that my four little children will one day live in a nation where they will not be judged by the color of their skin but by the content of their character. This is form Martin Luther King true. ~~~ 上面這個程序其實就揭示了Prolog程序的過程性意義,它告訴Prolog系統:要想輸出上面這一段話,首先要輸出’I have a dream’,然后換行,接著輸出’that my four little children will one day live in a nation‘,然后換行,依次類推。它實際上是告訴了Prolog系統一個解決問題的步驟。這就是程序的過程性意義。 其實,就Prolog本身的意義來說,編寫Prolog程序的時候是不提倡加入太多的過程性意義的,盡量要以描述性意義為主,因為Prolog本身就是一個描述性語言。但是,程序員們在實際開發的時候發現,他們離不開過程性意義的程序,因為現實生活中解決問題本身就是需要步驟的,例如你想從北京到泰安,你要先從北京到天津,然后從天津到滄州,然后從滄州到濟南,最后從濟南到泰安。所以,在Prolog里面就不可避免的出現過程性意義為主的程序。 ## 加分習題 1. 下面我們來試著把單詞謎題的答案打印的屏幕上,你要寫一個規則”print_solution“,試著把答案這樣打印: ~~~ word1 is XXXXXX word2 is XXXXXX word3 is XXXXXX word4 is XXXXXX word5 is XXXXXX ~~~ 之后,試著解釋一下你寫的程序的過程性意義和陳述性意義。
                  <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>

                              哎呀哎呀视频在线观看