多くのソリューションを返すこのコードを持っていますが、最初のリストが必要です。私はいくつかのカットで作業する必要がありますが、私はPrologを初めて使っています。私はそれを置く必要があります。Prologは最初のソリューションのみを選択します
list_s(_,[],_) :-
!.
list_s(P,[P|Ps],ListS) :-
list_slope(P,Ps,ListS).
list_s(pt(X,Y),[pt(A,B)|Ps],ListS) :-
angle(pt(X,Y),pt(A,B),R),
new_s(R,pt(A,B),Ns),
append(Nls,[Ns],ListS),
!,
list_s(pt(X,Y),Ps,Nls).
append/3
の後に挿入しようとしましたが、動作しません。 これを修正するにはどうすればよいですか?
編集:問題は、おそらく私は変更またはこの機能を改善する必要があります追加すると思います。
例:
1 ?- list_slope(pt(2,2),[pt(1,1),pt(2,9),pt(3,8),pt(4,7)],L).
L = [slope(0.3805063771123649, pt(4, 7)), slope(0.16514867741462683, pt(3, 8)), slope(0.0, pt(2, 9)), slope(0.7853981633974483, pt(1, 1))] ;
L = [_G2260, slope(0.3805063771123649, pt(4, 7)), slope(0.16514867741462683, pt(3, 8)), slope(0.0, pt(2, 9)), slope(0.7853981633974483, pt(1, 1))] ;
L = [_G2260, _G2266, slope(0.3805063771123649, pt(4, 7)), slope(0.16514867741462683, pt(3, 8)), slope(0.0, pt(2, 9)), slope(0.7853981633974483, pt(1, 1))] ;
L = [_G2260, _G2266, _G2272, slope(0.3805063771123649, pt(4, 7)), slope(0.16514867741462683, pt(3, 8)), slope(0.0, pt(2, 9)), slope(0.7853981633974483, pt(1, 1))]
これは何を期待しているのか、その代わりに何をするのでしょうか? –
通常、最初の解のみが必要な場合は、述部からすべての切れ目を削除し、その代わりに述部の_call_の後に1つの切れ目を入れることができます。あるいは 'once(Goal)'を使うことができます。しかし、全体的なカットは、しばしばあなたがやっていることとそれを表現する方法を理解するための貧しい人の代用品です。 –
ボリスさんありがとう!私は理解しようとするだろうが、この瞬間に私は本当にこの作業機能が必要です! – UserFromTheSpace