在列表中累积列表

时间:2020-04-19 18:03:15

标签: list prolog

所以我的问题是我有一个谓词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,[]).

真的很感谢您的帮助,因为我对此处缺少的内容一无所知。

0 个答案:

没有答案
相关问题