の第一及び第二の要素がList1
に等しい「正確にいつ成功
last([X], X).
last([_|Z], X) :- last(Z, X).
nextToLast([X,_], X).
nextToLast([_|Z], X) :- nextToLast(Z, X).
書き込みは、ここでは、広く利用可能なリスト述語を使用してmatchFirstTwo/2
を定義することができます方法は次のとおりです。
matchFirstTwo(List1, List2) :-
append([X,Y], _, List2), % List2's first and second elements
append(_, [Y,X], List1). % equal List1's last two elements
または、よりコンパクトに:
matchFirstTwo(List1, [Y,X|_]) :-
append(_, [X,Y], List1).
または、さらに良い:
matchFirstTwo(List1, [Y,X|_]) :-
reverse(List1, [Y,X|_]).
サンプルクエリ:
?- matchFirstTwo([a,b,c,d], [d,c,a,b]).
true % succeeds deterministically
'matchFirstTwo([a]、[a])'はどうでしょうか? – false
'List2の第1要素と第2要素は等しいです.'再帰を使用していますが、長さが2に達すると、単純にそれらを比較します。 –
@TomasBy:編集することで、編集に時間がかかります。むしろ投稿を編集する前に2kを得る! – false