SWI-Prolog的截斷機制( 二 )


    Pow is Pow_tmp * X.
這里截斷符號暗示“若是已經選擇了某個法則 , 那么決不許可回溯并選擇統一謂詞的其他法則” 。 是以 , 這將會發生合理成果 。

SWI-Prolog的截斷機制



SWI-Prolog的截斷機制



6此時我們可能已經意識到上一節中給出的兩遞歸法則也會發生近似的、不但愿的成果 , 而這可以經由過程在它們的遏制前提平分別插手截斷而加以避免 。 插手截斷后的法式如圖所示 。
總而言之 , 若是在遏制前提處可能用到遞歸法則 , 那么必需在遞歸謂詞的遏制前提中插手截斷符號 。

SWI-Prolog的截斷機制



SWI-Prolog的截斷機制



截斷與謂詞fail的聯用1截斷的另一個常用體例是與謂詞fail聯用 。 fail是一個Prolog尺度謂詞 , 因為它老是掉敗 , 因而可引起回溯 。 截斷可設置在fail前面 , 以防止掉敗后的回溯 。
考慮圖中的法式 。 這里截斷與fail聯用可以包管當一個雇員知足某個表白其不合適候選前提的法則時 , 在其它任何法則都不再考慮 。 例如 , 一個員工小于50歲 , 謂詞fail將使方針eligible掉敗 , 而截斷則包管在其它兩個eligible法則中都不考慮他 。

SWI-Prolog的截斷機制



2該當注重 , 截斷與fail聯用凡是可用否認謂詞“\+”取代 , \+是Prolog另一個尺度謂詞 , 若是方針X掉敗 , 則方針\+(X)當作功;若是X當作功 , 則會掉敗 。 是以上面法式可以重寫為圖片中的形式 。
這里把三個eligible法則合當作為一個法則 , 這兩種編程體例中哪種可讀性更高呢?關于這一問題存在爭議 , 因為這取決于對截斷的理解水平 。
2Prolog的根基概念和語律例則

SWI-Prolog的截斷機制



操縱截斷節制回溯水平的原因盡管回溯是Prolog說話中最有效的機制之一 , 但基于下述來由 , 有時我們但愿節制回溯的水平:
?我們可能不但愿Prolog得出問題的全數解 , 因為有些解對我們來說可能沒有任何用處;
?一旦找到一個特定的解 , 就沒有需要去找其它更多的解 , 而其它解可能現實上是不準確的;
【SWI-Prolog的截斷機制】?年夜量回溯會使法式運行的效率很低 , 此中有兩個原因 , 一是回溯要破費一些時候才能完當作 , 二是回溯中Prolog所做的標識表記標幟要占用年夜量的計較機內存 。
SWI-Prolog的截斷機制



注重事項可以測驗考試調試與之有關的Prolog法式 , 領會其工作機制 。

猜你喜歡