?- 'a##'. c153-480#
このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1320365280/480
#  [1] 授業単元:プログラミング技法、配列とポインタ 
#  [2] 問題文(含コード&リンク):整数型配列a[10]とb[10]を宣言し、a[10]に任意で数値を10個入力する。 
#  b[10]は初期値として0を代入しておく。 
#  任意で入力された10個の整数のうち、奇数のみ抜き出してb[0]から順番に代入する。 
#  最後に配列bの中身を出力し終了する。このとき0は表示されないようにすること。 
#  

'整数型配列a[10]とb[10]を宣言し、a[10]に任意で数値を10個入力する。b[10]は初期値として0を代入しておく。任意で入力された10個の整数のうち、奇数のみ抜き出してb[0]から順番に代入する。最後に配列bの中身を出力し終了する。このとき0は表示されないようにすること。' :-
        '10要素のならびを確保し全て0を入れる'(_10要素のならび),
        '任意で入力された10の整数のうち奇数のみ抜き出してならびを置換する'(1,_10要素のならび,_置換され了った10要素のならび),
        'ならびの中身のうち0でない要素を出力する'(_置換され了った10要素のならび).

'10要素のならびを確保し全て0を入れる'(_10要素のならび) :-
        length(_10要素のならび,10),
        all(_10要素のならび,0).

'任意で入力された10の整数のうち奇数のみ抜き出してならびを置換する'(_n,_ならび,_ならび) :-
        _n > 10,!.
'任意で入力された10の整数のうち奇数のみ抜き出してならびを置換する'(_n,_10要素のならび_1,_置換された10要素のならび) :-
        '任意の入力された整数'(_整数),
        '奇数のみ抜き出してならびを置換する'(_n,_整数,_10要素のならび_1,_置換された10要素のならび_2),
        _n_2 is _n + 1,
        '任意で入力された10の整数のうち奇数のみ抜き出してならびを置換する'(_n_2,_10要素のならび_2,_置換された10要素のならび).

'任意の入力された整数'(_整数) :-
        _整数 is random(1000) + 1.

'奇数のみ抜き出してならびを置換する'(_n,_整数,_10要素のならび_1,_置換された10要素のならび_2) :-
        奇数(_整数),
        length([_|L0],_n),
        append(L0,[A|R],_10要素のならび_1),
        append(L0,[_整数|R],_10要素のならび_2),!.
'奇数のみ抜き出してならびを置換する'(_,_,_10要素のならび,_置換された10要素のならび).

奇数(N) :-
        1 is N mod 2.

'ならびの中身のうち0でない要素を出力する'(_置換され了った10要素のならび) :-
        append(L0,[_要素|R],_置換され了った10要素のならび),
        '0でない要素を出力する'(L0,_要素),
        R = [].

'0でない要素を出力する'(L0,_要素) :-
        \+(_要素 = 0),
        length([_|Ln],_何番目),
        writef('%t: %t\n',[_何番目,_要素]),!.
'0でない要素を出力する'(_,_).