シンボルから数値をソートするプログラムを作成しましたが、それは動作しますが、最後まで実行しなかったリストの最後にメモリアドレスを与えます。どうしてこんなことに?SWI-Prologのリストの最後のインスタンス化されていない変数
separate([],[],[]).
separate([X],X,_):-number(X).
separate([X],_,X).
separate([X|Y],[X|Z],S):-number(X),separate(Y,Z,S).
separate([X|Y],Z,[X|S]):-separate(Y,Z,S).
?- separate([3,a,b,4,5,c],X,Y).
と相談私が取得する:あなたがseparate([],[],[])
として、端末句とseparate([X|Y],[X|Z],S)
などの通常の句のカップルを持っている場合、私は
separate([],[],[]).
separate([H | T], [H | Tn], Ls) :-
number(H),
separate(T, Tn, Ls).
separate([H | T], Ln, [H | Ts]) :-
\+ number(H),
separate(T, Ln, Ts).
を提案
X = [3, 4, 5|_G2592],
Y = [a, b, c] .
答えを見てから「Enter」を押す代わりに、スペースバーを押すとどうなりますか? See:SWI-Prologはなぜ私に最初の答えしか与えないのですか?(http://stackoverflow.com/q/34463248/1243762) –
これは、Prologを初めて学ぶときに、 'X'や' Y 'Digit'、' Letter'、 'Digits'、' Letters'、 'Rest'など、より意味のある名前があります。何が起こっているのか理解したら、 'X'や' Y'などに戻すことができます。 –