如何在prolog中定义运算符来制作列表?

时间:2011-01-18 17:57:05

标签: list operators prolog

我想定义一个运算符“++>”以某种方式输入“a ++> b”将列出[a,b]。

我已经编写了以下代码,但它似乎没有完成这项工作。

++>(X,Y) :-
 [X,Y].

:- op(500,xfy,++>).

3 个答案:

答案 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