Недавно познакомившись с Prolog, я использовал его для нескольких простых задач и начал задумываться об использовании member внутри циклов forall, подобных тому, который показан в тривиальном примере ниже:
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 очень краткая. Однако в нем упоминается детерминизм в отношении member / 2, который дал мне понять, что я могу быть на правильном пути, говоря, что он всегда будет извлекать элементы в одном и том же порядке, хотя я далек от уверенности.
Может ли кто-нибудь дать мне какие-либо гарантии или объяснения по этому поводу?