3

これは、リストの最後の要素のみを削除する場所です。

delete([_], []).
delete([X|Xs], [X|Last]) :- delete(Xs, Last).

元のリストが空になり、新しいリストが返されるまで、ループを実行する必要があります。

部分集合に少し似ています。

4

2 に答える 2

3

次のように書き直すことで、不要な選択ポイントを回避して、定義を改善できます。

delete([Head| Tail], List) :-
    delete(Tail, Head, List).

delete([], _, []).
delete([Next| Tail], Previous, [Previous| List]) :-
    delete(Tail, Next, List).

いくつかのサンプル呼び出し:

?- delete([1,2,3], L).
L = [1, 2].

?- delete([], L).
false.

?- delete([1], L).
L = [].

?- delete(L, [1,2,3]).
L = [1, 2, 3, _].

 ?- delete(L1, L2).
L1 = [_A],
L2 = [] ? ;
L1 = [_A,_B],
L2 = [_A] ? ;
L1 = [_A,_B,_C],
L2 = [_A,_B] ? ;
L1 = [_A,_B,_C,_D],
L2 = [_A,_B,_C] ? 
...
于 2013-10-16T21:34:11.427 に答える