Prolog试图制作固定大小的空列表

时间:2018-04-27 14:52:59

标签: prolog swi-prolog

我试图在这些维度的prolog中列出一个列表:

[
[[_,_,_,_,_,_,_,_,_],[_,_,_,_,_,_,_,_,_]],
[[_,_,_,_,_,_,_,_,_],[_,_,_,_,_,_,_,_,_]],
[[_,_,_,_,_,_,_,_,_],[_,_,_,_,_,_,_,_,_]],
[[_,_,_,_,_,_,_,_,_],[_,_,_,_,_,_,_,_,_]],
[[_,_,_,_,_,_,_,_,_],[_,_,_,_,_,_,_,_,_]],
[[_,_,_,_,_,_,_,_,_],[_,_,_,_,_,_,_,_,_]],
[[_,_,_,_,_,_,_,_,_],[_,_,_,_,_,_,_,_,_]],
[[_,_,_,_,_,_,_,_,_],[_,_,_,_,_,_,_,_,_]],
[[_,_,_,_,_,_,_,_,_],[_,_,_,_,_,_,_,_,_]]
]

所以包含9个列表的列表包含2个9个元素的列表。

我尝试了以下内容:

createEmptyView(ReturnList, Size) :-
  length(ReturnList, Size),
  ( for(Y, 1, Size), param(ReturnList, Size) do
      Row is ReturnList[Y],
      length(Row, 2),
      Xlist = Row[0],
      Ylist = Row[1],
      length(Xlist, Size),
      length(Ylist, Size)
  ).

其中Size = 9且ReturnList是输出。

检索Xlist和Ylist是出错的地方。 我还尝试了以下内容来提取它们:

[Xlist, Ylist] is Row,
Row = [Xlist, Ylist | _ ],

但它似乎不起作用。我做错了什么?

1 个答案:

答案 0 :(得分:1)

mylength(X,Y):-
    length(Y,X).

list_sizes(Size,List):-
    maplist(mylength(Size),List).

然后查询:

?- length(List,9), list_sizes(2,List), maplist(list_sizes(9),List).

你可以缩短没有帮助器mylength / 2并使用库yall的lambda表达式。