Мне нужна помощь в обратном порядке.Обратный порядок
fun(a, [b, d]).
fun(b, [c]).
fun(c, []).
fun(d, [e]).
fun(e, [f]).
fun(f, [g]).
fun(g, []).
xyz(X, Y):-
fun(X, Z) -> findall([A|B], (member(A, Z), xyz(A, B)), L),
flatten(L, F), sort(F, Y); Y = [].
Запрос xyz(a,X).
дает мне X = [b,c,d,e,f,g].
Однако, я хотел бы, чтобы дать мне X = [g,f,e,d,c,b]
.
Я пробовал разные попытки повернуть вспять список, но мне не повезло.
Я попытался добавить дополнительный предикат сразу после этого, но это не сработало:
xyz2(X,Y):-
xyz(X,Y),
reverse(Y,Z),
Z\=0.
Заслуга CapelliC для подхода к осуществлению выше найденного у меня другой пост здесь. Recursion in PROLOG?
@Boris Обязательно, обновленный оригинал сообщение. Кроме того, я попробовал общий способ сделать это, но, возможно, мне что-то не хватает. Я попытался включить 'reverse (Y, Y)' в конце кода, но это не помогает. – am3decoy
'xyz (X, Y): - f (X, Z) -> findall ([A | B], (член (A, Z), xyz (A, B)), L), flatten (L, F), sort (F, Y); Y = []. (Y, Z), Z \ = 0. Я тоже это пробовал, но чувствую, что мне не хватает важной детали. Я могу использовать только X и Y в качестве аргументов. – am3decoy
@Boris Я обновил сообщение. Возможно, вы можете вести меня в правильном направлении, спасибо. – am3decoy