Prolog '的别名;是';在序言中
我希望能够为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都是
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
。。。