Недавно попал в Прологе Я использую его на несколько простых задач и начал задаваться вопросом об использовании элемента в пределах FORALL петель, как в тривиальном примере ниже:Будет ли использовать элемент в рамках предложения forall в SWI-Prolog всегда выводить элементы в том же порядке?
forall(member(A,[1,2,3,4]), print(A)).
В случае, что вы делаете что-то вроде этого всегда верно, что forall будет обрабатывать элементы в списке в том же порядке каждый раз при его вызове? Есть ли у него должно быть исполнено путем говорят делать что-то вроде:
A = [1,2,3,4], sort(A, B), forall(member(C,B), print(C)).
от того, что мало исследований я изначально сделал я предполагаю, что это сводится к поведению члена/2, но в документации функции на Сайт SWI-Prolog очень краток. Однако он упоминает детерминизм в отношении члена/2, который дал мне понять, что я могу быть на правильном пути, говоря, что он всегда будет извлекать элементы в том же порядке, хотя я далеко не уверен.
Может ли кто-нибудь дать мне какие-либо гарантии или пояснения по этому вопросу?
Я думаю, что вы можете положиться на него, потому что списки Пролога являются односвязными и любым другим обход будет работать хуже.Я, конечно, не вижу различий в семантике от наименования списка. –