最近 Prolog を始めたので、いくつかの単純なタスクに Prolog を使用してきましたが、以下の簡単な例のような forall ループ内で member を使用することに疑問を抱き始めました。
forall(member(A,[1,2,3,4]), print(A)).
このようなことを行う場合、forall が呼び出されるたびにリスト内の要素を同じ順序で処理するというのは常に本当ですか? 次のようなことを言って強制する必要がありますか?
A = [1,2,3,4], sort(A, B), forall(member(C,B), print(C)).
私が最初に行った小さな調査から、それは member/2 の動作に帰着すると推測していますが、SWI-Prolog の Web サイトにある関数のドキュメントは非常に簡潔です。しかし、確実ではありませんが、常に同じ順序で要素を抽出すると言って正しい道を進んでいる可能性があることを私に感じさせた member/2 に関する決定論について言及しています。
誰かがこれについて保証や説明をしてくれますか?