0

述語 fill(L,X,N) を作成する必要があります。ここで、L は N 個の要素 X を含むリストです。N <= 0 または N != L の長さの場合、L は空リストにする必要があります。

これが私がやったことです。Prologでif、else..構造が正しく機能することはありませんでした:

fill(L,X,N) :-
   ((N =< 0) -> 
   L = [];
   length(L,I),
   ((N =\+= I) -> 
   L = [];
   fill2(L,X,N))).
fill2([H|T],X,N2) :-
   NewN = N2 - 1,
   H = X,
   fill2(T,X,NewN).

N != L の長さの場合を除いて機能する、より単純なバージョンもあります。

fill(L,_,N) :-
   N =< 0,
   L = [].
fill([H|T],X,N) :-
   NewN = N - 1,
   H = X,
   fill(T,X,NewN).

たとえば、fill(L,20,4) は L = [20,20,20,20] を返しますが、fill([20,20,20],X,2) は L = [] を返しません。

4

1 に答える 1