プロローグでリストを繰り返して、生成された結果を新しいリストに書きたいと思います。 述語でnext_level_segments(List of Start-, Endcoordinates)
私はStart-とEndcoordinatesの各ペアの間の4つの座標の4つのリストを計算し、この4つのリストをLに格納したいと思います。 Iは、例えば[(10,0),(3.3,0)]
ためのスタート - 及びEndcoordinatesの 一対の間に4点の次の座標を計算する必要があり述語segments()
プロローグのリストを反復する
next_level_segments([
[(10,0),(3.3,0)],
[(3.3,0),(0,-5.8)],
[(0,-5.8),(-3.3,0)],
[(-3.3,0),(-10,0)]
])
例えば呼び出したときにこれが意味します。 next_level_segmentsは開始点と終了点のリストを反復する必要があります。セグメントは計算を行い、4つのリストの結果を得て、各4組の座標を結果のリストに格納します。
4つの座標のリストをnext_level_segments()
と呼ぶと、計算が完了し、トレースを見ると座標が生成されますが、正しく格納されません。 トレースで見ることができる限り、4つの座標の最後のリストがありません。 誰かが見て、私が間違っていることをいくつかアドバイスしているかもしれません。
はあなたに
segments([(Sx,Sy),(Ex,Ey)],Ls):-
X2 is Sx+(Ex-Sx)/3,
Y2 is Sy+(Ey-Sy)/3,
R1 is sqrt((X2-Sx)*(X2-Sx)+(Y2-Ey)*(Y2-Ey)),
Phi1 is atan((Y2-Sy)/(X2-Sx)),
X3 is X2 +R1*cos((Phi1-240)*pi/180),
Y3 is Y2 +R1*sin((Phi1+240)*pi/180),
X4 is X2+(X2-Sx),
Y4 is Y2+(Y2-Sy),
Ls=[
[(Sx,Sy),(X2,Y2)],
[(X2,Y2),(X3,Y3)],
[(X3,Y3),(X4,Y4)],
[(X4,Y4),(Ex,Ey)]].
next_level_segments([[(Sx,Sy),(Ex,Ey)]|E],[X|RLs]):-
segments([(Sx,Sy),(Ex,Ey)],X),
next_level_segments(E,RLs).
next_level_segments([],[]).
ボリス!ご回答どうもありがとうございました。私は、あなたが書いたものに従って実装を編集しました。私があなたを正しく理解していれば、括弧を挿入することでセグメント/ 3をセグメント/ 2に変更する必要があります。不要な節を削除し、next_level_segments([]、[]) 'という第3節として挿入しました。私はマッピングの代わりにマッピングを使用することができますが、私はそうする必要はありません - 私はこの権利を理解しましたか?私はそれをやったことがありますが、next_level_segments([()、()、()、()]、[()、()]、[()、()]] )。 "4座標で今私はfalseを取得します。もう一度見てください、私は間違った何かを理解したと思いますか? – claire
私は「第2の」節として意味していました... – claire
@claire編集した質問に表示されているとおり、正確なコードで私にとってはうまくいきます。私の編集を参照してください。 –