Пролог пытается сделать фиксированный размер пустым списком - PullRequest
0 голосов
/ 27 апреля 2018

Я пытаюсь составить список в прологе с такими размерами:

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

Итак, список, содержащий 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 голосов
/ 27 апреля 2018
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.

...