Я пытаюсь найти способ проверить, равны ли два списка независимо от их порядка элементов.
Моя первая попытка:
areq([],[]).
areq([],[_|_]).
areq([H1|T1], L):- member(H1, L), areq(T1, L).
Однако это проверяет, есть ли все элементы списка слева в списке справа; значение areq([1,2,3],[1,2,3,4]) => true
. На этом этапе мне нужно найти способ проверить вещь в двунаправленном смысле. Моя вторая попытка заключалась в следующем:
areq([],[]).
areq([],[_|_]).
areq([H1|T1], L):- member(H1, L), areq(T1, L), append([H1], T1, U), areq(U, L).
Где бы я попытался перестроить слева и скопировать списки в конце; но это с треском провалилось.
Мое чувство рекурсии крайне плохое и просто не знает, как улучшить его, особенно с помощью Prolog. Любые намеки или предложения будут оценены на этом этапе.