arrays - 如何在prolog中访问二维数组以及如何循环其中的每个元素
问题描述
如何在prolog中访问二维数组以及如何循环其中的每个元素例如如果我有一个矩阵问题1我如何在prolog中创建这样的二维列表:
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 代码
那么我怎么能把这个对象变成prolog呢?
解决方案
根据您提出问题的方式,即transfer java code into Prolog
您似乎在程序或面向对象的代码中思考,并希望在学习 Prolog 时利用这些知识作为杠杆。我的建议是不要将您对过程或面向对象代码的知识用作帮助您学习 Prolog 的杠杆或后备,因为它会阻碍您使用 Prolog 的学习和效率。相反,通过学习按预期使用 Prolog 来尝试并拥抱 Prolog。
此外,在 Stackoverflow 上提问时,您应该包含您尝试过的代码。
如何在 Prolog 中访问二维数组?
所以你想在 Prolog 中创建一个可以将数据作为二维数组处理的数据结构。在不知道更多细节的情况下,列表列表应该可以工作,例如
[[[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]].
我怎样才能把这个对象变成 Prolog?
由于标准 Prolog 不是 Java 并且没有对象,(尽管有一些变体),我将扔掉对象这个词,而是回答
我怎样才能在 Prolog 中做到这一点?
这是 Prolog 中乍一看似乎很难掌握的部分之一。在 Prolog 中,您无需将变量声明为具有类型,也无需创建构造方法来创建对象。在 Prolog 中,数据表示为术语,并且存在以大写字母开头的变量。因此,如果您想要在 Prolog 中保存 , 的值,row
并且您只需使用变量,例如,和,并且可以将它们组合成一个复合术语,例如,并且如果您愿意,您还可以使用 a 来限定结构名字。column
cost
units
Row
Column
Cost
Units
(Row,Column,Cost,Units)
cell(Row,Column,Cost,Units)
推荐阅读
- html - 为什么在 Safari 中,当 flex-item 应用 `align-items:stretch` 时,`img` 的`height` 不会拉伸到其 flex-line 的大小?
- php - Wordpress如何添加页面计数器
- r - 在为什么轴上切割分组条形图,如何在每个条形图上添加置信区间?
- google-sheets - 谷歌表格自定义菜单根据第 1 列中的文本值隐藏行
- java - 在使用 spring boot 和响应式编程时,我在控制台中看到了 actor-tcp-nio。这是什么意思?
- python - 为什么我的条形图没有按降序排列,而我的数据已使用 sort_values 按降序排列?(与熊猫)
- typescript - 从 Uniswap V2 获取正确的执行价格
- python - Python Treeview 如何按文件类型对文件进行排序?
- c++ - 在参数包和可变参数模板上解包元组的语法
- json - Typescript HttpClient.post 从 json 格式的字符串返回错误请求