我正试图绕过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)
。
这类事情是否需要数据结构,还是我过度思考?
答案 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}}