【发布时间】:2021-10-27 23:07:08
【问题描述】:
我是 prolog 的新手,我正在尝试创建一个特定的矩阵。 我已经拥有的:
- 一个用所有 0-s 填充的矩阵
- 数字对列表,用于 expl。 [1-1, 2-3, 2-4]
我想要做的是将矩阵中由数字对指示的位置中的 0-s 替换为 1-s。我已经有一个谓词,给定矩阵和行号和列号,会从 0 切换到 1,但是在遍历对列表时我被卡住了。 我正在尝试这样做:
%replace(Mx, RowId, ColumnId, Value, ResultMx)
%generateMx(Mx, ListOfPairs, ResMx)
generateMx(_, [], _).
generateMx(Mx, [I-J|Tail], Res) :-
generateMx(Mx, Tail, Res1),
replace(Res1, I, J, 1, Res).
但由于某种原因,它给出了奇怪的结果。
我也试过了:
generateMx(Mx, [], Res) :- Res is Mx.
generateMx(Mx, [I-J|Tail], Res) :-
replace(Mx, I, J, 1, Res1),
(Tail == []) -> Res is Res1 ; generateMx(Res1, Tail, Res2).
为此我得到一个错误,但我至少看到它正在尝试将正确的结果矩阵与原样条件下的某个值进行比较。我猜它应该不会停止迭代?
有人能帮我弄清楚我的错误以及我应该怎么做吗?
【问题讨论】: