Как получить доступ к двумерному массиву в прологе и как зациклить каждый элемент в нем - PullRequest
1 голос
/ 11 марта 2019

Как получить доступ к двумерному массиву в прологе и как зациклить каждый элемент в нем Например, если у меня есть матрица Вопрос 1, как мне создать двумерный список, как это в прологе:

  1 2 3
  4 5 6
  7 8 9

Вопрос 2: Как сделать цикл каждого элемента и сделать каждый элемент +1 становится

  2 3 4
  5 6 7
  8 9 10

Вопрос 3

 public Cell(int row, int col, int cost, int units) {
        this.cost = cost;
        this.units = units;
        this.row = row;
        this.col = col;
    }

В матрице каждая вещь является объектом, подобным ячейке Мое задание - перенести код Java в код Пролога

Так как я могу превратить этот объект в пролог ??

1 Ответ

0 голосов
/ 11 марта 2019

Исходя из того, как вы задаете свои вопросы, например, transfer java code into Prolog, кажется, что вы думаете о процедурном или объектно-ориентированном коде и хотите использовать знания в качестве рычага при изучении Пролога.Мой совет: не используйте свои знания процедурного или объектно-ориентированного кода в качестве рычага или запасного варианта, чтобы помочь вам выучить пролог, потому что это помешает вашему обучению и эффективности с Прологом.Вместо этого попробуйте принять Prolog, научившись использовать его по назначению.

Также, задавая вопрос в Stackoverflow, вы должны указать код того, что вы пробовали.

Как получить доступ к двумерному массиву в Прологе?

Итак, вы хотите создать структуру данных в Прологе, которая может работать с данными как двумерным массивом.Не зная дополнительных подробностей, список списка должен работать, например,

[[[1],[2],[3]],[[4],[5],[6]],[[7],[8],[9]]]

Существуют другие возможности, но в вопросе недостаточно подробностей, чтобы предложить что-то более конкретное для конкретной проблемы.

Как зациклить каждый элемент и сделать каждый элемент + 1.

Сначала это делается с помощью рекурсии, чтобы вы могли видеть, что происходит подробно

increment(Array,New_array) :-
    increment_rows(Array,New_array).

increment_rows([Row|Rows],[New_row|New_rows]) :-
    increment_row(Row,New_row),
    increment_rows(Rows,New_rows).
increment_rows([],[]).

increment_row([Cell|Columns],[New_cell|New_columns]) :-
    increment_cell(Cell,New_cell),
    increment_row(Columns,New_columns).
increment_row([],[]).

increment_cell(Cell,New_cell) :-
    New_cell is Cell + 1.

?- increment([[[1],[2],[3]], [[4],[5],[6]], [[7],[8],[9]]], New_array).
New_array = [[2, 3, 4], [5, 6, 7], [8, 9, 10]].

сейчасиспользуя встроенный предикат maplist / 3

increment_item(Item,New_item) :-
    New_item is Item + 1.

increment_list(List,New_list) :-
    maplist(increment_item,List,New_list).

increment_array(Array,New_array) :-
    maplist(increment_list,Array,New_array).

?- increment_array([[[1],[2],[3]], [[4],[5],[6]], [[7],[8],[9]]], New_array).
New_array = [[2, 3, 4], [5, 6, 7], [8, 9, 10]].

Как я могу превратить этот объект в Пролог?

Поскольку стандартный Пролог не являетсяЯва и не имеет объектов, (хотя есть некоторые варианты), я выкину слово «объект» и вместо этого отвечу

Как я могу сделать это в Прологе?

Это одна из частейПролога, который может показаться очень трудно понять с первого взгляда.В Прологе вы не объявляете переменные с типами и не создаете методы конструктора для создания объектов.В Прологе данные представлены в виде терминов , и есть переменные, которые идентифицируются, начиная с заглавной буквы.Поэтому, если вам нужно что-то в Прологе, которое может содержать значения для row, column, cost и units, вы просто используете переменные, например, Row, Column, Cost и Units, иможно сгруппировать их в составной термин, например, (Row,Column,Cost,Units), и при желании вы также можете определить структуру с именем cell(Row,Column,Cost,Units).

...