プロローグの新機能で、要素を任意の位置にリストに挿入できるすべてのオプションを与える述語を作成しようとしました。 例:プロローグリストの任意の位置に挿入
インins(a, [b,c], R).
を与える必要があります:それはありませんが、その後、 'グローバルスタック外' というエラーになる
R = [a,b,c]
R = [b,a,c]
R = [b,c,a]
。これをより決定論的にし、結果を与え、実行する方法はありますか?それが逆に実行されると、すなわち。 ins(X、Y、[a、b、c])である。期待される結果が得られ、それが完了したことを示すfalseと表示されます。 コード:ここで
app([],L,L).
app([H|T],L2,[H|L]) :-
app(T,L2,L).
ins(E, List, R) :-
R = R1,
app(R2, R3, R1),
app([E], R4, R3),
app(R2, R4, List).
はオンラインコンパイラでコードを実行するためのリンクです、どれ役立つだろう SWISHは(これも私がインを使用することを望む方法の例がありますが、インは、今問題となっています)ありがとう!
なぜこれほど多くの事実? – false
@false実際には、両方の事実を 'ins(X、L、[X | L]) 'に融合することができます。両方のバージョンはまだ 'ins(a、X、Y)'に問題があります(可能性のあるすべてのケースを列挙しません)。 – Fatalize