我需要從斜坡列表中的一個點中找到分段列表,每個分段必須長於3個點,並且具有相同的角度。Prolog - 在點列表中查找分段
每斜率從一個角度和點製成
slo(Angle,Pt(X,Y)).
實施例:
find_segment(P,[slo(1,p1),slo(1,p2),slo(1,p3),slo(2,p4),slo(3,p5),slo(3,p6),slo(3,p7)],Ls).
Ls=[[P,p1,p2,p3],[P,p5,p6,p7]].
我試圖與此代碼,但我認爲,我有一些問題(aganin)與追加,因爲
find_segment(_,[],_):-!.
find_segment(_,[_],_):-!.
find_segment(_,[_,_],_):-!.
find_segment(P,[slope(R,Ps)|Ss], Lines):-
( test(R,Ss) %condizione
-> find_same(P,Ps,R,Ss,Nline),
append(Nls,[Nline],Lines),!,
find_segment(P,Ss,Nls)
; find_segment(P,Ss,Lines) %else
).
test(R,[slope(A,_),slope(B,_)|_]):-R=A,B=A.
find_same(P1,P2,R,Slopes,Result):-
Result=[P1,P2|Lp],
findall(P, member(slope(R, P), Slopes),Lp).
有人可以幫助我找到正確的方法來達到我的目標嗎?
編輯: 我試圖改變我的代碼中的東西,但仍然無法正常工作。 我改變功能find_segment
find_segment(_,[],_):-!.
find_segment(_,[_],_):-!.
find_segment(_,[_,_],_):-!.
find_segment(P,[slope(R,Ps)|Ss],[L1|Lines]):-
( confronta_test(R,Ss)
-> find_same(P,Ps,R,Ss,L1),
find_segment(P,Ss,Lines)
;find_segment(P,Ss,Lines)
).
現在束縛水飽和度,Prolog的還給我:
252 ?- find_segment(pt(1,1),[slope(6,pt(2,2)),slope(6,pt(3,3)),slope(6,pt(4,4)),slope(0,pt(6,6)),slope(0,pt(7,7)),slope(0,pt(8,8)),slope(0,pt(9,9))],L).
L = [[pt(1, 1), pt(2, 2), pt(3, 3), pt(4, 4)], _G2019, _G2022, [pt(1, 1), pt(6, 6), pt(7, 7), pt(8, 8), pt(..., ...)], [pt(1, 1), pt(7, 7), pt(8, 8), pt(..., ...)]|_G2076].
在你的例子中, 'p'是從哪裏來的? – lurker
@luker從一個點的列表。 爲了幫助你理解,我有一個點的列表,我需要找到所有長度大於4的段並將它插入到列表中。 但我正在一步一步來。 我的想法是找到一個點的所有斜率,找到該段,然後切換到下一個點。 – UserFromTheSpace
您對'Ls'的結果具有'p',但'p'不會出現在輸入到'find_segment'的任何位置。 – lurker