Так что моя проблема в том, что у меня есть предикат espaco_fila (F, E), в котором F - это список, содержащий элементы, а #, L - результирующий список без #.
Пример:
Мой вывод:
?- espaco_fila([1,2,3,#,1,2,3,4], E).
E = [1,2,3];
false.
?- espaco_fila([1,2,3,#,1,2,#,3,4,5], E).
E = [1,2,3];
false.
?- espaco_fila([1,2,3], E).
E = [];
false.
Правильный вывод:
?- espaco_fila([1,2,3,#,1,2,3,4], E).
E = [1,2,3];
E = [1,2,3,4];
false.
?- espaco_fila([1,2,3,#,1,2,#,3,4,5], E).
E = [1,2,3];
E = [3,4,5];
false.
?- espaco_fila([1,2,3], E).
E = [1,2,3];
false.
Но вместо этого я получаю 1-й список в результате, вместо ретроспективы и получения обоих списков и пустой список, если я набираю только цифры и не могу понять, почему.
Программа:
espaco_fila(F, E) :- espaco_fila(F,E,[],[]).
espaco_fila([],ACP,ACP,_).
espaco_fila([P|R],E,ACP,ACE) :-
P \== #,
append(ACE,[P],NACE),
espaco_fila(R,E,ACP,NACE).
espaco_fila([P|R],E,ACP,ACE) :-
P == #,
length(ACE,COMP),
COMP >= 3,!,
append(ACP,ACE,NACP),
espaco_fila([],E,NACP,[]).
espaco_fila([P|R],E,ACP,ACE) :-
P == #,
length(ACE,COMP),
COMP < 3,!,
espaco_fila(R,E,ACP,[]).
Действительно, любая помощь будет признательна.