如何在prolog中访问二维数组以及如何循环其中的每个元素 例如,如果我有一个矩阵 问题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代码转成Prolog代码
那么我怎样才能把这个对象变成序言呢?
最佳答案
根据您提出问题的方式,即将java代码转移到Prolog中
,您似乎在思考过程或面向对象的代码,并且希望在学习Prolog时使用这些知识作为杠杆。我的建议是,不要使用您对过程或面向对象代码的了解作为帮助您学习 Prolog 的杠杆或后备,因为这会妨碍您学习 Prolog 并提高其效率。相反,尝试通过学习按预期使用 Prolog 来拥抱 Prolog。
此外,在 Stackoverflow 上提问时,您应该包含您尝试过的代码。
How to access two dimensional array in Prolog?
因此,您想在 Prolog 中创建一个可以将数据作为二维数组处理的数据结构。在不知道更多详细信息的情况下,列表列表应该可以工作,例如
[[[1],[2],[3]],[[4],[5],[6]],[[7],[8],[9]]]
还有其他可能性,但问题中没有足够的细节来针对特定问题提出更具体的建议。
How do I loop each element and make every element +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]].
How can I make this object into Prolog?
由于标准 Prolog 不是 Java 并且没有对象(尽管有一些变体),所以我将扔掉“对象”一词并改为回答
我怎样才能在 Prolog 中做到这一点?
这是 Prolog 中乍一看很难掌握的部分之一。在 Prolog 中,您不声明变量具有类型,也不创建构造函数方法来创建对象。在 Prolog 中,数据表示为 terms还有一些以大写字母开头的变量。因此,如果您希望 Prolog 中的某些内容可以保存行、列、成本和单位的值,您只需使用变量,例如Row
、Column
、Cost
和 Units
,并且可以将它们组合成一个复合术语,例如(Row,Column,Cost,Units)
,如果需要,您还可以使用名称 cell(Row,Column,Cost,Units)
限定结构。
关于arrays - 如何在prolog中访问二维数组以及如何循环其中的每个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55094480/