gpt4 book ai didi

Prolog:解决多变量算术

转载 作者:行者123 更新时间:2023-12-02 11:43:14 25 4
gpt4 key购买 nike

我在编写返回某些算术变量值的 Prolog 谓词时遇到问题。

例如,该函数应返回等式中的 x 和 y:12 = 3x + 2y。

目前我的代码只能以相反的方式工作:

foo(S,X,Y) :- 
S is 3*X+2*Y.

有什么想法吗?

最佳答案

根据您所在的建模领域,使用以下选项之一:

  • 对于整数

  • 对于任意精度有理数

  • 对于有限精度的“实数”,通常由浮点值近似

  • 对于 bool 值

<小时/>

以下是如何使用 处理整数:

:- use_module(library(clpfd)).

foo(S,X,Y) :-
S #= 3*X+2*Y.

让我们看一些示例查询!

首先:地面查询。

?- foo(1,23,-34).
true.

?- foo(1,23,-2).
false.

下一步:一些单变量查询。

?- foo(X,1,2).X = 7.?- foo(1,X,2).X = -1.?- foo(1,23,X).X = -34.?- foo(1,2,X).false.

Then, a query with one variable used in multiple places:

?- foo(X,X,X).X = 0.

At last: some more general queries.

?- foo(S,X,2).
S#=3*X+4.

?- foo(S,X,Y).
S#=3*X+2*Y.
<小时/>

对于任意精度的有理数,请使用 :

:- use_module(library(clpq)).

?- foo(X,X,X).
X = 0.

?- foo(1,2,X). % a similar query failed with clp(FD)
X = -5 rdiv 2. % arbitrary-precision solution

?- foo(S,X,Y).
{Y=1 rdiv 2*S-3 rdiv 2*X}.
<小时/>

对于 float 的关系,请使用 :

:- use_module(library(clpr)).

foo(S,X,Y) :-
{ S = 3*X+2*Y }.

示例查询:

?- foo(1,2,X).          % a similar query failed with clp(FD)
X = -2.5 ; % and had an arbitrary-precision solution with clp(Q)
false.

?- foo(X,X,X).
X = 0.0 ;
false.

关于Prolog:解决多变量算术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29381312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com