[英]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.