我想撰寫一個謂詞,該謂詞采用元組的一個成員,該元組,并輸出該元組的另一個成員。你可以假設元組總是有 2 個元素,并且提供的成員總是存在。
extract_from_tuple(_, [], _).
extract_from_tuple(X, [H|T], R) :-
( X \= H -> R is X, ! ; X = H -> extract_from_tuple(X, T, R) ).
我試圖實作一個簡單的 if-else 陳述句語法,我在如何在 Prolog 中撰寫 IF ELSE 條件中找到。
例如,
extract_from_tuple(a, [b,a], R).
應該b在結果變數中輸出R
Same 應該是其他方式:
extract_from_tuple(a, [a,b], R).
只是這一次它“應該”命中else 陳述句并遞回呼叫具有提供串列的另一個元素的謂詞。
uj5u.com熱心網友回復:
我認為這個問題非常簡單,只需使用統一即可解決:
extract(X, [X,Y], Y).
extract(Y, [X,Y], X).
例子:
?- extract(a, [b,a], R).
R = b.
?- extract(a, [a,b], R).
R = b ;
false.
為避免虛假選擇點,您可以編碼extract/3為:
extract_deterministic(Item, [First,Second], Rest) :-
( Item = First
-> Rest = Second
; Rest = First ).
但是請注意,最后一個版本不如第一個版本通用!例如:
?- extract(X, [a,b], R). % two answers!
X = a,
R = b ;
X = b,
R = a.
?- extract_deterministic(X, [a,b], R). % only one answer!
X = a,
R = b.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/368796.html
