Arity = 0的Prolog函数

发布于 2025-01-19 12:40:57 字数 228 浏览 0 评论 0原文

我试图在Prolog中写下以下内容:

“如果代理人拥有箭头,则Hasarrow/0返回true,并且在拍摄行动后开始返回错误。”

代理商从拥有箭头开始。

我的代码如下:

assert(hasArrow). 
hasArrow :- (A = shoot -> false ; assert(hasArrow)).

这是正确的吗?

I am trying to write the following in prolog:

"hasarrow/0 returns true if the Agent has the arrow, and begins to return false after shoot action has been executed by the Agent."

The agent starts with having the arrow.

My code is as follows:

assert(hasArrow). 
hasArrow :- (A = shoot -> false ; assert(hasArrow)).

Is this correct?

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

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

发布评论

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

评论(1

司马昭之心 2025-01-26 12:40:57

您可以按如下方式解决问题:

:- dynamic(has_arrow/0).

has_arrow.

shoot :- retract(has_arrow).

get_arrow :- assertz(has_arrow).

示例:

?- has_arrow.
true.

?- shoot.
true.

?- has_arrow.
false.

?- shoot.
false.

?- get_arrow.
true.

?- has_arrow.
true.

?- shoot.
true.

?- has_arrow.
false.

You can solve the problem as follows:

:- dynamic(has_arrow/0).

has_arrow.

shoot :- retract(has_arrow).

get_arrow :- assertz(has_arrow).

Examples:

?- has_arrow.
true.

?- shoot.
true.

?- has_arrow.
false.

?- shoot.
false.

?- get_arrow.
true.

?- has_arrow.
true.

?- shoot.
true.

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