Prolog:宣布运营商

时间:2012-03-23 17:27:16

标签: prolog operator-overloading iso-prolog

我已经定义了! (阶乘)函数并将其注册为算术函数和运算符,以便我可以执行:A是6!。

现在我要定义!! (奇数的阶乘),但同样的方式 - 写条款,注册算术函数和运算符,调用A是7 !! - 结果是     SyntaxError:预期的运算符

如果可能,我该如何注册!!运营商?

是的,我意识到了,!通常是削减。

1 个答案:

答案 0 :(得分:5)

!是一个所谓的独奏角色,你不能连续两个。如果不是,你不能写例如:

c :- !.

但反而必须写:

c :- ! .

因为“!”。否则将被解释为单个令牌。

另外,如果你让!是一个运算符,两个版本都是无效的语法(是的,SWI仍然接受它,但例如GNU Prolog没有)。你需要写:

c :- (!).

因为操作数的运算符需要被括起来。而不是!,使用例如“f”和“ff”,或者为您的用例拟合Unicode字符。