作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个我创建的列表如下:
tab([(top,left),(top,middle),(top,right),(center,left),(center,middle),
(center,right),(bottom,left),(bottom,middle),(bottom,right)]).
tab(AllPos).
place(Line, Column, Tab) :-
AllPos \== [_,_] /*while AllPos isn't empty - not sur if this is done this way*/ -> (member((Line,Column), AllPos) -> (erase(AllPos, (Line,Column), AllPos)).
erase(List, Element, NewList)
从 List 中删除元素 Element 并创建一个新列表 NewList 等于 List 但没有 Element。两个函数
member
和
erase
正在工作。
AllPos
到处。那是因为我想,我想修改它,以便我以后可以在另一个函数中使用它(在从中删除了一些元素之后)。我的逻辑对吗?我可以在另一个函数中使用修改后的 AllPos 吗?
最佳答案
在 SWI-Prolog 中,您可以使用:b_setval(name, value)
和 b_getval(name, value)
.如果您不希望在回溯的情况下将值更改回来,您可以使用以下命令使它们成为实际全局的:nb_setval(name, value)
和 nb_getval(name, value)
.
因此,例如,如果您有一个程序并且您想检查它通过某个路径的频率,您可以使用:
recursive(100).
recursive(X) :- add, Y is X + 1, recursive(Y).
add :- nb_getval(counter, C), CNew is C + 1, nb_setval(counter, CNew).
testRecursion
:-
% Set counter to zero
nb_setval(counter, 0),
% Run some code with 'add'
recursive(0), !,
% Print the results
nb_getval(counter, CounterValue),
write('Steps: '), writeln(CounterValue).
关于list - 如何在prolog中创建全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10655013/
我是一名优秀的程序员,十分优秀!