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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 | _ ],

但它似乎没有用。我究竟做错了什么?

答案
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表达式。

以上是关于Prolog试图制作固定大小的空列表的主要内容,如果未能解决你的问题,请参考以下文章

哪些语言标准允许忽略固定大小数组上的空终止符?

片段中的空指针异常

Prolog列表列表获取所有元素

在 Prolog 中使用约束和排列解决难题

Prolog - 在将每个值加倍后,从原始列表中创建元素的新列表?

试图制作一个二维数组列表