我想定义一个运算符“++>”以某种方式输入“a ++> b”将列出[a,b]。
我已经编写了以下代码,但它似乎没有完成这项工作。
++>(X,Y) :-
[X,Y].
:- op(500,xfy,++>).
答案 0 :(得分:0)
:- op(500,xfy,++>).
++>(X,Y,[X,Y]).
并像
一样使用它?- ++>(1,2,X).
X = [1, 2].
实际上,Prolog不是面向计算,因此运算符只是术语的同义词。 你想要一个术语\ 3,其中一个元素是另一个元素的列表。因此,在这种情况下,您不能使用2位运算符。顺便说一下,在这种情况下你不能使用 ,因为它只在算术用例中使用。
答案 1 :(得分:0)
这适合你吗?
++>((X,Y),Z) :-Z= [X,Y].
:- op(500,xfy,++>).
答案 2 :(得分:0)
[a,b,c]
只是'.'(a,'.'(b,'.'(c))))
的语法糖。因此,您可以将运算符定义为相同并编写转换谓词:
:- op(500,xfy,'++>').
convert('++>'(A,B),[A|R]) :-
convert(B,R).
convert(Any,[Any]).
示例:
| ?- X = 1++>2++>3, convert(X,Y).
X = 1++>2++>3
Y = [1,2,3] ?
yes