所以我的问题是我有一个谓词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,[]).
真的很感谢您的帮助,因为我对此处缺少的内容一无所知。