初学者序言:数据结构

时间:2015-08-23 04:32:37

标签: data-structures prolog

我正试图绕过Prolog,我正在努力解决数据结构问题。

我想采用point(X,Y)并沿着“对角线”X=Y反映它,因此point(-5,8)变为point(8,-5)

/* the following line is what I've gotten so far, 
   but I don't know how to manipulate the data inside the structures. */
reflection(X,Y) :- =(Y,X).

test_answer :-
    reflection(point(-5,8), point(X,Y)),
    write(point(X, Y)).
test_answer :-
    write('Wrong answer!').

应输出point(8,-5)

这类事情是否需要数据结构,还是我过度思考?

2 个答案:

答案 0 :(得分:3)

你可以写:

reflection(point(A,B), point(B,A)).

如果是在文件reflection.prolog中,那么:

$ gprolog --consult-file reflection.prolog
...
| ?- reflection( point(1,2), X).
X = point(2,1)
yes 

答案 1 :(得分:1)

我使用的prolog版本(Strawberry Prolog)不允许我使用=的前缀表示法,所以除非prolog对=有不同的含义,否则您的代码似乎是这样的:

reflection(X,Y):- Y = X.

这意味着reflection\2仅在X& Y是统一的。

因此,当point(-5,8)& point(8,-5)point(-5, 8) point(X, Y)时,您的代码应该会生成X = -5而不会生成Y = 8 reflection(point(X,Y),point(Y,X)). {{1}}。你没有说你在问题中得到了什么。

您需要使用此规则才能使其正常工作:

{{1}}