Data structures 初学者序言:数据结构
我正试图了解Prolog,我在数据结构方面有些挣扎 我想取一个Data structures 初学者序言:数据结构,data-structures,prolog,Data Structures,Prolog,我正试图了解Prolog,我在数据结构方面有些挣扎 我想取一个点(X,Y)并沿“对角线”X=Y,这样点(-5,8)就变成点(8,-5) 应输出点(8,-5) 这类事情需要数据结构吗?还是我想得太多了?你可以写: reflection(point(A,B), point(B,A)). 如果在reflection.prolog文件中,则: $ gprolog --consult-file reflection.prolog ... | ?- reflection( point(1,2), X).
点(X,Y)
并沿“对角线”X=Y
,这样点(-5,8)
就变成点(8,-5)
应输出点(8,-5)
这类事情需要数据结构吗?还是我想得太多了?你可以写:
reflection(point(A,B), point(B,A)).
如果在reflection.prolog文件中,则:
$ gprolog --consult-file reflection.prolog
...
| ?- reflection( point(1,2), X).
X = point(2,1)
yes
你可以写:
reflection(point(A,B), point(B,A)).
如果在reflection.prolog文件中,则:
$ gprolog --consult-file reflection.prolog
...
| ?- reflection( point(1,2), X).
X = point(2,1)
yes
我使用的prolog版本(草莓式prolog)不允许我对
=
使用前缀符号,因此除非您的prolog对=
有不同的含义,否则您的代码似乎是:
reflection(X,Y):- Y = X.
这意味着只有当X
和Y
可统一时,reflection\2
才会统一
因此,您的代码应该产生点(-5,8)
而不是点(8,-5)
,因为点(-5,8)
在X=-5
和Y=8
时与点(X,Y)
是一致的。你不能说你在问题中得到了什么
您需要使用此规则使其正常工作:
reflection(point(X,Y),point(Y,X)).
我使用的prolog版本(草莓式prolog)不允许我对
=
使用前缀符号,因此除非您的prolog对=
有不同的含义,否则您的代码似乎是:
reflection(X,Y):- Y = X.
这意味着只有当X
和Y
可统一时,reflection\2
才会统一
因此,您的代码应该产生点(-5,8)
而不是点(8,-5)
,因为点(-5,8)
在X=-5
和Y=8
时与点(X,Y)
是一致的。你不能说你在问题中得到了什么
您需要使用此规则使其正常工作:
reflection(point(X,Y),point(Y,X)).
我已经想出了一个解决办法,但对我来说似乎很糟糕反射(点(A,B),点(P,Q)):-=(点(P,Q),点(B,A))。'您找到的解决方案是正确的。同样可以更简洁地表达;下面是用户“谜性”和“峰值”的答案。我已经想出了一个解决方案,但对我来说似乎很糟糕反射(点(A,B),点(P,Q)):-=(点(P,Q),点(B,A))。'您找到的解决方案是正确的。同样可以更简洁地表达;下面的答案由用户“谜”和“峰”告诉你如何。