将sin函数的答案分配给prolog中的sin(X)一词

时间:2014-09-01 06:07:59

标签: prolog

我写了一个Prolog程序来解决简单的三角方程。我写它来获得三角函数的值。例如,我可以获得sin(45)的值,但我无法将sin(45)的值分配给术语sin(45)。我尝试了=,==,=:=运营商,但他们没有工作。实际上,我想将sin(45)的值传递给程序的下一个代码而不是术语sin(45)。 感谢...

3 个答案:

答案 0 :(得分:4)

算术由一些专门的内置函数执行,例如is / 2或(<)/ 2,它们将右手术语评估为表达式,并统一数字用左手边的价值。最常见的用法是为 free 变量赋值,例如

?- X is sin(pi/2).
X = 1.0.

注意sin / 1的参数是弧度的。在评估之后,将现在绑定到数值的变量传递给下一个代码。

答案 1 :(得分:1)

prolog中的复合术语("仿函数"或"结构")没有任何数字"值"。 Prolog算术引擎没有"分配"计算到这样一个术语的值,它只是使用计算值作为参数 在外部操作中或将计算值限制为变量(因为"是"内置谓词)#/ p>

Y is sin(45), ... % Y is now now bound to the numeric result of sin(45), do with Y what you whant

如果你不想忘记罪的价值的起源(45), 您可以使用其他参数创建另一个术语,例如

Y is sin(45), MyTerm=funcresult(sin,45,Y),  ... % then pass MyTerm wherever you whant or return it to the caller

MyTerm的消费者可以统一

MyTerm= funcresult(F,X,Y),

并获得函数名称(F = sin)和参数(X = 45)以及结果本身(Y)

你甚至可以

assert(funcresult(sin,X,Y)) 

并为所有已计算的函数值提供数据库(不要忘记

:-dynamic(funcresult/3). 
在这种情况下

指令。)

另请注意,sin()通常接受弧度,而不是等级,所以sin(45)可能会产生你不期望的东西

答案 2 :(得分:0)

我研究并了解,无法使用====:=等过程语言将值分配给术语。当我们使用这个运算符时,prolog只是比较这两个值。因此,我们应该通过 value作为参数。例如,

isolax(1,sin(U) = V,U = R):-
    getasin(V,R).   

getatan(X,R):-R is atan(X).

即使我们没有定义事实或规则来获得sin,cos,tan,prolog自动回答sin,cos,tan。