Исходя из того, как вы задаете свои вопросы, например, 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)
.