このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1305867431/165
#  【質問テンプレ】  
#  [1] 授業単元:プログラミング  
#  [2] 問題文(含コード&リンク):  
#  キーボードから入力した長さ10の文字列の任意の2つの文字を 
#  入れ換える関数void swap(char *address1, char *address2)を定義し、 
#  その動作を確認するkadai6-2.cを作りなさい。 
#  この関数は引数で与えられたアドレスのメモリにアクセスして中身を 
#  入れ換える作業を行う。 
#  ただし、文字列と入れ換える2つの文字の位置は次のように入力されるものとする。 
#  scanf("%s %d %d", str, &position1, &position2);//それぞれ文字列、位置1, 位置2を表している。 
#  答えは以下で出力されるものとする。 
#  printf("answer = %s\n", str); 
#  

キーボードから入力した長さ10の文字列の任意の2つの文字を入れ換える(_文字列,_2つの文字を入れ換えた文字列) :-
        キーボードから入力した長さ10の文字列(_文字列),
        組合せ([0,2,3,4,5,6,7,8,9],2,[Nth1,Nth2]),
        atom_chars(_文字列,Chars),
        ならびの任意の2つの文字を入れ換える(Chars,Nth1,Nth2,[],_2つの文字を入れ換えた文字列).

ならびの任意の2つの文字を入れ換える(Chars,Nth1,Nth2,L,_2つの文字を入れ換えた文字列) :-
        length(L,45),!,
        fail.
ならびの任意の2つの文字を入れ換える(Chars,Nth1,Nth2,L,_2つの文字を入れ換えた文字列) :-
        \+(append(_,[[Nth1,Nth2]|_],L)),
        length(L0,Nth1),
        append(L0,[A|R1],Chars),
        Nth3 is Nth2 - Nth1 - 1,
        length(L03,Nth3),
        length(L03,[B|R3],R1),
        append(L0,[B|L03],[A|R3],Chars2),
        atom_chars(_2つの文字を入れ換えた文字列,Chars2).
ならびの任意の2つの文字を入れ換える(Chars,Nth1,Nth2,L,_2つの文字を入れ換えた文字列) :-
        \+(append(_,[[Nth1,Nth2]|_],L)),
        組合せ([0,2,3,4,5,6,7,8,9],2,[Nth1_2,Nth2_2]),
        ならびの任意の2つの文字を入れ換える(Chars,Nth1_2,Nth2_2,[[Nth1,Nth2]|L],_2つの文字を入れ換えた文字列).
ならびの任意の2つの文字を入れ換える(Chars,Nth1,Nth2,L,_2つの文字を入れ換えた文字列) :-
        append(_,[[Nth1,Nth2]|_],L),
        組合せ([0,2,3,4,5,6,7,8,9],2,[Nth1_2,Nth2_2]),
        ならびの任意の2つの文字を入れ換える(Chars,Nth1_2,Nth2_2,L,_2つの文字を入れ換えた文字列).

キーボードから入力した長さ10の文字列(_文字列) :-
        write('10の文字列の文字列を入力してください : '),
        findall(_文字,(
                   for(1,N,10),
                   get_char(_文字)),
                L),
        atom_chars(_文字列,L).