накопление списков в списке - PullRequest
0 голосов
/ 19 апреля 2020

Итак, моя проблема в том, что у меня есть предикат 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,[]).

На самом деле любая помощь будет оценена, потому что я не понимаю, чего мне здесь не хватает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...