このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1320365280/544
#  [1] 授業単元:C言語 
#  [2] 問題文(含コード&リンク):5 つの要素を持つdouble 型配列vx[] に対し 
#  て,その各要素の正負を反転するプログラムを, 
#  ポインタ演算を用いて作成せよ.例えばvx[] が 
#  {1.1, 2.2, -3.3, 4.4, -5.5}であったとき,プログ 
#  ラムの結果vx[] は{-1.1, -2.2, 3.3, -4.4, 5.5} 
#  となる.ただし,プログラムは以下の要件を満たすこと 
#  とする. 
#   
#  解答例等 
#  5 つの実数を入力してください 
#  vx[0] = 1.1 
#  vx[1] = 2.2 
#  vx[2] = -3.3 
#  vx[3] = 4.4 
#  vx[4] = -5.5 
#  正負を反転させました。 
#  vx[0] = -1.100000 
#  vx[1] = -2.200000 
#  vx[2] = 3.300000 
#  vx[3] = -4.400000 
#  vx[4] = 5.500000 
#  

'5 つの要素を持つならびに対して,その各要素の正負を反転する' :-
        '5 つの要素を持つならびに対して'(_ならび),
        'その各要素の正負を反転する'(_ならび,_正負を反転したならび),
        '正負を反転したならびを表示する'(_正負を反転したならび).

'5 つの要素を持つならびに対して'(_ならび) :-
        length(_ならび,5),
        write('5 つの実数を入力してください\n'),
        findall(_値,(
                    '5 つの要素を実数で埋める'(_ならび,_値)),
                _ならび).

'5 つの要素を実数で埋める'(_ならび,_値) :-
        append(L0,[_値|_],_ならび),
        length(L0,Len),
        writef('vx[%t] = ',[Len]),
        実数の入力(_値).

実数の入力(_値) :-
        get_line(Line),
        実数入力診断(Line,_値),!.
実数の入力(_値) :-
        実数の入力(_値).

実数入力診断(Line,_値) :-
        atom_to_term(Line,_値,_),
        float(_値),!.
実数入力診断(Line,_値) :-
        writef('入力された %t からは実数が得られません。再入力をお願いします。\n',[Line]),
        fail.

'その各要素の正負を反転する'([],[]).
'その各要素の正負を反転する'([A|R1],[B|R2]) :-
        B is A * -1,
        'その各要素の正負を反転する'(R1,R2).

'正負を反転したならびを表示する'(_正負を反転したならび) :-
        append(L0,[_正負を反転された値|R],_正負を反転したならび),
        length(L0,Nth),
        writef('vx[%t] = %t\n',[Nth,_正負を反転された値]),
        R = [].