簡體   English   中英

SWI-Prolog規則

[英]SWI-Prolog Rule

我的規則應該是將第一個參數與列表中的第三個元素統一起來。 該列表是規則中的第二個參數。 如果沒有第三個元素,則應該失敗。

經過許多例子和混亂,我創造了這個規則。

third(X,[_|T]):-
    [_,Y] = T,!,fail,
    (Y,X).

所以我的理解,我認為是不正確的,它會將Y設置為列表T的第三個元素,因為T是初始列表的尾部。 然后它會將Y與X統一起來。

仍然對“統一”這些元素的代碼感到困惑

切后fail ! 確保你的程序永遠不會成功,因為你正在選擇削減然后失敗。

只有當列表中只包含三個元素時,才可以按照嘗試的方式訪問列表的第三個元素:跳過過程頭部的第一個元素,然后從尾部獲取第二個元素。

third(X,[_|T]):-
    [_,X] = T.

請注意,如果列表中沒有正好三個元素,則此過程將失敗。

但是,直接訪問過程頭部的第三個元素更為直接,例如:

third(X, [_, _, X|_]).

這將使X與第二個參數的列表的第三個元素統一起來。 |_部分允許列表包含更多元素(它使用匿名變量統一尾部)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM