以下列方式实施除法运算符: A为12 div 6 div 2 结果为: A = 4
所以我认为我必须创建属于 yfx 类型的中缀运算符,因为此运算符首先计算6 div 2然后计算12 div结果(6 div 2)
我希望在我的解释中明确一点......我知道我已经以程序的方式解释了这个概念,但我不知道如何表达对参数执行的操作的优先级...... / p>
好的,所以我认为(我希望) yfx 形式的运算符是正确的......
问题是现在我不知道如何描述这个算子。
在上一个练习中,我以这种方式定义了运算符:
op(600,xfx,has).
/* perter has information */
has(peter, information).
我可以阅读Ivan Bratko的书:
运算符定义不指定任何操作或操作。 原则上,没有操作或数据与操作员相关联。
所以我认为我无法定义执行计算的运算符。
所以我认为我的练习的解决方案可能是这样的:
op(600,yfx,div).
div(X div Y, Division) :- Division is X/Y.
但是效果不好而且我认为这不是他们要求我实施的。
答案 0 :(得分:2)
div似乎是一个预先声明的运算符,已经进行了整数除法,那么它就足以改变它的相关性。
这是默认值:
?- current_op(P,A,div).
P = 400,
A = yfx.
运行得
?- A is 12 div 6 div 2.
A = 1.
随意改变:
?- [user].
|: :-op(400,xfy,div).
|: % user://1 compiled 0,04 sec, 1 clauses
true.
你会得到
?- A is 12 div 6 div 2.
A = 4.
请注意更改预定义的操作符 错误 练习。但我必须说,我不知道是否有任何标准方法可以将运算符添加到is / 2评估....
编辑 SWI-Prolog has a way添加算术:你得到
?- X is 12 mydiv 6 mydiv 2.
X = 4.
后
:- op(400,xfy,mydiv).
:- arithmetic_function(mydiv/2).
mydiv(A,B,C) :- C is A div B.