リスト内の特定の要素のすべてのインデックスを検索し、それをリストとして返す必要があります。したがって、たとえば:
?- indexList(a,[a,b,c,a,b],Rs).
Rs = [0,3]
私の考えは:
positions( E, L, P ) :- positions( E, L, 0, Rs ).
positions( E, [], _, [] ).
positions( E, [E|Xs], P, [P|PT] ) :- P1 is P + 1, positions( E, Xs, P1, PT ).
positions( E, [X|Xs], P, PT ) :- P1 is P+1, positions( E, Xs, P1, PT ).
これをトレースすると、すべてのポジションが含まれているリストが表示されます(最後のステップの前のステップ)。しかし、最後のステップで、彼はどういうわけかそれを変更し、ちょうどtrueを返します。