私はPrologプログラミングが初めてです。だから私は次のことを知りたいです。Prolog でのカット (!) の使用を知っています。プロローグでの Not の使用、いつ、どのように Not を使用するか、Cut を使用せずにバックトラッキングを回避せずに以下を書き換える方法を誰かが説明してくれませんか。(述語のみを使用)
choose (0,_,[]) :- !.
choose (N,[H|T], [H|R]) :- M is N-1, Choose (M,T,R).
choose(N, [_|T],R) :- Choose(N,T,R)
そして、次の書き直し方を教えてください(述語のみを使用)
chooseAll(N,L,Res) :-
chooseAll(N,L,[],Res).
chooseAll(N,L,Seen,Res):-
choose(N,L,R),
not(member(R,Seen)),
!,
chooseAll(N,L,[R|Seen],Res).
chooseAll(_,_,Res,Res).