我需要将列表中的一些元素附加到另一个元素中:
find_same(pt(1,1),pt(2,2),6,[slope(6,pt(3,3)),slope(6,pt(4,4)),slope(7,pt(3,2)),slope(9,pt(5,5))],NL).
结果
NL=[pt(1,1),pt(2,2),pt(3,3),pt(4,4)]
我尝试使用追加但我有一些问题,使用此代码:
find_same(_,_,_,[],_):-!.
find_same(pt(X,Y),pt(Xa,Ya),R,Slopes,Nl):-X\=a,
append(Nla,[pt(X,Y),pt(Xa,Ya)],Nl),
find_same(pt(a,a),pt(b,b),R,Slopes,Nla).
find_same(pt(X,Y),pt(Xa,Ya),R,[slope(R,pt(Xs,Ys))|Ss],Nl):-X=a,
append(Nla,[pt(Xs,Ys)],Nl),
find_same(pt(X,Y),pt(Xa,Ya),R,Ss,Nla).
find_same(_,_,R1,[slope(R2,_)|_],_):-R1\=R2,!.
因为给我很多名单。
然后我尝试使用其他代码:
find_same2(_,_,_,[],_):-!.
find_same2(pt(X,Y),pt(Xa,Ya),R,Slopes,_):-X\=a,
find_same2(pt(a,a),pt(b,b),R,Slopes,[pt(X,Y),pt(Xa,Ya)]).
find_same2(pt(X,Y),pt(Xa,Ya),R,[slope(R,pt(Xd,Yd))|Ss],[pt(Xd,Yd)|Nl]):-
X=a,!,
find_same2(pt(X,Y),pt(Xa,Ya),R,Ss,Nl).
find_same2(_,_,R1,[slope(R2,_)|_],_):-R1\=R2.
但它只返回错误。
我该如何解决这个问题?谢谢
答案 0 :(得分:0)
因为您不关心点的特定组成部分,您可以将每个点视为单个变量。因此,不要以pt(X, Y)
为例,只需考虑它P
。
所以你想找到共同点:
find_common(P1, P2, N, SlopeList, Result)
如果您可以创建符合条件的SlopeList
元素子列表,则可以通过预先添加两个现有点来形成Result
。如果调用该子列表CommonPoints
,那么您的Result
将只是[P1, P2 | CommonPoints]
。
现在您只需要弄清楚如何确定CommonPoints
。您可以使用member/2
执行此操作。考虑:
member(slope(N, P), SlopeList)
对于具有元素SlopeList
的{{1}}的每个元素,这将成功。要将它们聚集在一起,您可以使用slope(N, P)
:
findall/3
这些都是解决问题所需的全部内容。你只需把它们放在一起。