再帰を使用してリストから整数を削除しようとしています。私はこのremove_integers
述語を作ったが、それがなぜ機能しないのか分からない。明らかに私はPrologについて非常に本質的な何かを欠いている。Prolog:リストから整数を削除する
remove_integers([], L, L).
remove_integers([H|T], A, L) :-
\+ integer(H),
remove_integers(T, [A|H], L).
私はこの述語のトレースをしたし、次のように得た:
[trace] ?- remove_integers([foo, bar, 1, 2, foo], [], L).
Call: (7) remove_integers([foo, bar, 1, 2, foo], [], _G8188) ?
Call: (8) integer(foo) ?
Fail: (8) integer(foo) ?
Redo: (7) remove_integers([foo, bar, 1, 2, foo], [], _G8188) ?
Call: (8) remove_integers([bar, 1, 2, foo], [[]|foo], _G8188) ?
Call: (9) integer(bar) ?
Fail: (9) integer(bar) ?
Redo: (8) remove_integers([bar, 1, 2, foo], [[]|foo], _G8188) ?
Call: (9) remove_integers([1, 2, foo], [[[]|foo]|bar], _G8188) ?
Call: (10) integer(1) ?
Exit: (10) integer(1) ?
Fail: (9) remove_integers([1, 2, foo], [[[]|foo]|bar], _G8188) ?
Fail: (8) remove_integers([bar, 1, 2, foo], [[]|foo], _G8188) ?
Fail: (7) remove_integers([foo, bar, 1, 2, foo], [], _G8188) ?
false.
ので仲介リストはいくつかの点で、それは項目を削除開始し、なぜ私は理解していない[[[]|foo]|bar]
奇妙に見えるという事実のほかにすでにアキュムレータに入っています。
これはまさに私が探していた答えの種類です。ありがとうございます。 – skamsie