Итак, моя проблема в том, что у меня есть предикат espacos_fila(F,E)
, в котором F - это список, а E - это список списков.
Итак, цель моего предиката - создать список с элементами между # и добавить их в список, а после просмотра списка присоединиться к основному списку списка (списку списков), если длина этого списка больше. или равен 3 в конце, если нет # или если список состоит только из чисел, я все еще хочу добавить элементы в список и присоединить его к списку.
По сути, # служит как вырез .
Пример / правильный вывод:
espacos_fila([#, 1, 2, 3, 4, 5, #, 6, #, 7, 8,9, #],L).
L = [[1, 2, 3, 4, 5], [7, 8, 9]].
espacos_fila([#, 1, 2, 3, 4, 5, #, 6, #, 7, 8, 9],L).
L = [[1, 2, 3, 4, 5], [7, 8, 9]].
espacos_fila([1, 2, 3],L).
L = [[1, 2, 3]].
espacos_fila([1, 2],L).
L = [].
Мой вывод:
espacos_fila([#, 1, 2, 3, 4, 5, #, 6, #, 7, 8,9, #],L).
L = [[1, 2, 3, 4, 5], [7, 8, 9]].
espacos_fila([#, 1, 2, 3, 4, 5, #, 6, #, 7, 8, 9],L).
L = [[1, 2, 3, 4, 5]].
espacos_fila([1, 2, 3],L).
L = [].
espacos_fila([1, 2],L).
L = [].
Так что, как вы можете видеть из моего вывода, моя проблема заключается в том, если # нет В конце концов программа ничего не делает, и я не понимаю, почему.
Программа:
espacos_fila(F,E) :- espacos_fila(F,E,[],[]).
espacos_fila([],ACL,ACL,_) :- !.
espacos_fila([P|R],E,ACL,ACE) :- P \= #,!,
append(ACE,[P],NACE),
espacos_fila(R,E,ACL,NACE).
espacos_fila([P|R],E,ACL,ACE) :- P == #,
length(ACE,C),
C >= 3,!,
append(ACL,[ACE],NACL),
espacos_fila(R,E,NACL,[]).
espacos_fila([#|R],E,ACL,ACE) :- length(ACE,C),
C < 3,!,
espacos_fila(R,E,ACL,[]).
На самом деле любая помощь будет оценена, потому что я не понимаю, чего мне здесь не хватает.