如何在prolog中为内部列表创建具有特定宽度的列表列表?

时间:2017-04-09 15:37:17

标签: prolog

我正在尝试创建一个列表列表,其中我的输入是一个大的扁平网格,我需要将网格中的元素调整为较小的列表。 例如,我有一个这样的列表:[1,2,3,4,5,6,7,8]我想创建列表列表[[1,2,3,4],[ 5,6,7,8]]在这种情况下,我将每个内部列表中的元素的大小调整为宽度(4)。如果我的列表只有7个元素,那么结果应该是[[1,2,3,4]],我应该忽略其余的,因为他们不会形成另一个宽度为4的列表。这是我的代码,我是在"全球堆栈中遇到问题"错误,我无法弄清楚。

代码:

list_to_llists([],W,L).
list_to_llists([H|T],W,[[X1]|[Xr]]):- 
    length([X1],R),
    R<W,           
    append(X1,H,Rs),
    list_to_llists(T,W,Rs).
list_to_llists([H|T],W,[[X1]|[Xr]]):-
    length([X1],R),
    R>=W,
    append(Xr,H,Rs),
    list_to_llists(T,W,Xr).

1 个答案:

答案 0 :(得分:0)

list_to_llists(L,W,[S|R]):-
    length(S,W),
    append(S,T,L),
    !, list_to_llists(T,W,R).
list_to_llists(L,_,[L]).

length(S,W) 生成自由变量列表,因此,如果此列表可以是前缀,则只存储在结果中。

您也可以尝试不切割,以更好地了解行为。