将sin函数的答案赋给prolog中的sin(X)项
我写了一个Prolog程序来解简单的三角方程。我写它是为了得到三角函数的值。例如,我可以获得将sin函数的答案赋给prolog中的sin(X)项,prolog,Prolog,我写了一个Prolog程序来解简单的三角方程。我写它是为了得到三角函数的值。例如,我可以获得sin(45)的值,但我不能将sin(45)的值分配给术语sin(45)。我尝试了=,=,=:=操作符,但它们不起作用。实际上,我想将sin(45)的值传递给程序的下一个代码,而不是术语sin(45)。 多亏了…算术是由一些专门的内置项执行的,比如/2,或者(prolog中的复合项(“functor”或“structures”)没有任何数字“值”。 Prolog算术引擎不会“分配”计算值给这样一个术语,它
sin(45)
的值,但我不能将sin(45)
的值分配给术语sin(45)
。我尝试了=,=,=:=
操作符,但它们不起作用。实际上,我想将sin(45)
的值传递给程序的下一个代码,而不是术语sin(45)
。
多亏了…算术是由一些专门的内置项执行的,比如/2,或者(prolog中的复合项(“functor”或“structures”)没有任何数字“值”。 Prolog算术引擎不会“分配”计算值给这样一个术语,它只是将计算值用作参数 在外部操作或将计算值绑定到变量中(与“is”内置谓词一样) 如果你不想忘记罪的价值起源(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)也许会产生一些你不期望的结果我研究并理解,不能使用
=
、=
或类似过程语言的=:=
将值分配给一个术语。当我们使用这个操作符时,序言只是比较两个值。因此,我们应该传递
值作为参数。例如
isolax(1,sin(U) = V,U = R):-
getasin(V,R).
getatan(X,R):-R is atan(X).
尽管我们没有定义自动获取sin、cos、tan、prolog的sin、cos、tan答案的事实或规则。这不是一个完全准确的答案。
=/2
操作符将统一这两个参数。它可以起到比较的作用,但也可以起到赋值的作用。的目的是/2
是规范对于将右侧的算术表达式指定给左侧的变量而言,这是一个很好的解释。
:-dynamic(funcresult/3).
isolax(1,sin(U) = V,U = R):-
getasin(V,R).
getatan(X,R):-R is atan(X).