Prolog:无法增加复杂项内变量的值

发布于 2025-01-19 16:07:06 字数 189 浏览 1 评论 0原文

因此,我正在处理一个序言问题,在一个复杂的术语中定义了一个状态,当我尝试在此复杂术语中增加x的值时,没有任何

CurrentState(left, x, y).



test = CurrentState(left, x,y),
newX = x + 1,
write(newX).

事情发生吗?

So I'm working on a prolog problem where a state is defined in a complex term, When I try to increase the value of x inside this complex term nothing happens for example

CurrentState(left, x, y).



test = CurrentState(left, x,y),
newX = x + 1,
write(newX).

Is there a workaround for this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

撑一把青伞 2025-01-26 16:07:06

事实和谓词需要从小写字母开始。

变量需要从大写字母开始。

=不是分配,并且Prolog Predicates不是函数调用,并且您永远都不会使用test

即使那样,当您没有给出X值任何值时,您还是要X + 1做什么?这没有比左 + 1这样写的更有意义。

这一切都更像是:

currentState(left, 5, 2).   % fact

test(NewX) :-
    currentState(Direction, X, Y),   % search for the fact, fill the variables.
    NewX is X + 1,                   % new variable for new value.
    write(NewX).

然后,

?- test(NewX).
6
NewX = 6

在此之后,您仍然不想将状态存储为Prolog数据库中的事实并删除/断言。

Facts and predicates need to start with a lowercase letter.

Variables need to start with an uppercase letter.

= is not assignment, and Prolog predicates aren't function calls, and you never use test anyway.

Even then, what do you want x + 1 to do when you haven't given any value for x? It makes no more sense than left + 1 written like that.

It would all be more like:

currentState(left, 5, 2).   % fact

test(NewX) :-
    currentState(Direction, X, Y),   % search for the fact, fill the variables.
    NewX is X + 1,                   % new variable for new value.
    write(NewX).

Then

?- test(NewX).
6
NewX = 6

After that you still don't want to be storing the state as a fact in the Prolog database and removing/asserting it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文