Prolog '的别名;是';在序言中

Prolog '的别名;是';在序言中,prolog,swi-prolog,Prolog,Swi Prolog,我希望能够为prolog中的is操作符创建一个符号别名,该别名也可以与pack func一起使用。到目前为止,我有: :- use_module(library(func)). :- op(50, xfy, [$]). :- op(700, xfx, [#]). #(X, Y) :- is(Y, X). 我可以运行如下查询: ?- 2*10+5 # X. 但不能运行以下操作: ?- write(#$2*10+5). 这给了我一个语法错误 如何使#和$一起工作?两个($)/2和(#)/2都是

我希望能够为prolog中的
is
操作符创建一个符号别名,该别名也可以与pack func一起使用。到目前为止,我有:

:- use_module(library(func)).
:- op(50, xfy, [$]).
:- op(700, xfx, [#]).
#(X, Y) :- is(Y, X).
我可以运行如下查询:

?- 2*10+5 # X.
但不能运行以下操作:

?- write(#$2*10+5).
这给了我一个语法错误

如何使
#
$
一起工作?

两个
($)/2
(#)/2
都是二进制运算符:

:- op(50, xfy, [$]).
:- op(700, xfx, [#]).
因此,
#$2*10+5
必须给出语法错误
#($(2*10+5))
OTOH工作正常。

两个
($)/2
(#)/2
都是二进制运算符:

:- op(50, xfy, [$]).
:- op(700, xfx, [#]).

因此,
#$2*10+5
必须给出语法错误
#($(2*10+5))
OTOH工作得很好。

什么是
$
应该做的?@WillemVanOnsem
$
库(func)
中被定义为元谓词。它提供了一种功能性的感觉:
X是somepred$(somearg)。
somepred(somearg,X)相反。
。这有帮助吗?
$
应该做什么?@WillemVanOnsem
$
被定义为
库(func)
中的元谓词。它提供了一种功能性的感觉:
X是somepred$(somearg)。
somepred(somearg,X)相反。
。那有用吗?谢谢,重复一遍。我会试试看,看看效果如何。对不起,我误解了你的想法。我不能将
$
作为一元运算,因为它在
库(func)
中定义为二进制。另外,
#($(2*10+5))
对我不起作用。它告诉我:
错误:算术:“#($(2*10+5))”不是上面的函数
(#))/1,
($)/1
可能不是你想要的。您希望使用它们的二进制形式吗?是的,我希望使用它们的二进制形式,但是
$
是在
库(func)
中定义的,因此
($())
应该可以工作。我知道,如果二进制谓词名称是一个单词,比如
foo
,那么它就可以工作了,在这种情况下
foo$(2*10+5)
就可以了。但是,将
foo
替换为一个符号(如
#
),然后…崩溃。@Ash。语法错误,对吗?我知道你想要什么了:试试
#$4
(#)、$4
#$4
…谢谢重复。我会试试看,看看效果如何。对不起,我误解了你的想法。我不能将
$
作为一元运算,因为它在
库(func)
中定义为二进制。另外,
#($(2*10+5))
对我不起作用。它告诉我:
错误:算术:“#($(2*10+5))”不是上面的函数
(#))/1,
($)/1
可能不是你想要的。您希望使用它们的二进制形式吗?是的,我希望使用它们的二进制形式,但是
$
是在
库(func)
中定义的,因此
($())
应该可以工作。我知道,如果二进制谓词名称是一个单词,比如
foo
,那么它就可以工作了,在这种情况下
foo$(2*10+5)
就可以了。但是,将
foo
替换为一个符号(如
#
),然后…崩溃。@Ash。语法错误,对吗?我知道你想要什么了:试试
#$4
(#)、$4
#$4
。。。