0

プロローグで次のようなことができるのだろうか

L = [1,2,3,4,5,_,_,7].

私は次のようなことをしたい

getElements(L, R)

R=[1,2,3,4,5,7]を返します

リスト内のワイルドカードを無視します

4

1 に答える 1

1

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).
于 2012-11-18T07:32:35.483 に答える