プロローグで次のようなことができるのだろうか
L = [1,2,3,4,5,_,_,7].
私は次のようなことをしたい
getElements(L, R)
R=[1,2,3,4,5,7]を返します
リスト内のワイルドカードを無視します
プロローグで次のようなことができるのだろうか
L = [1,2,3,4,5,_,_,7].
私は次のようなことをしたい
getElements(L, R)
R=[1,2,3,4,5,7]を返します
リスト内のワイルドカードを無視します
Prolog にlibrary(apply)がある場合、次のように書くことができます
getElements(L, R) :-
include(nonvar, L, R).
または、もう少しコンパクト
getElements(L, R) :-
exclude(var, L, R).
それ以外の場合、これは機能する述語である必要があります。
getElements([], []).
getElements([H|T], [H|R]) :-
nonvar(H), !,
getElements(T, R).
getElements([_|T], R) :-
getElements(T, R).
@false で強調表示されているように編集します。後者の getElements/2 は、最後の句の匿名変数と一致するため、バグがあります。ここで訂正
getElements([], []).
getElements([H|T], R) :-
var(H), !,
getElements(T, R).
getElements([H|T], [H|R]) :-
getElements(T, R).