このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1357748713/610
#  [1] 授業単元:プログラミング基礎I 
#  [2] 問題文(含コード&リンク): 
#  入力したDNA塩基配列中にある塩基 t, c, a, g それぞれの個数をカウントするプログラムを作成せよ. 
#   
#  【実行例】 
#  % ./a.out 
#  tataatccg ← 入力し,リターンを押して ^D 
#  Thymine (t) : 3 
#  Cytosine (c) : 2 
#  Adenine (a) : 3 
#  Guanine (g) : 1 
#  % 
#   

program :-
        '入力したDNA塩基配列中にある塩基 t, c, a, g それぞれの個数をカウントする'(_DNA配列,0,0,0,0).

'入力したDNA塩基配列中にある塩基 t, c, a, g それぞれの個数をカウントする' :-
        入力したDNA塩基配列(_DNA配列),
        atom_chars(_DNA配列,_DNA塩基ならび),
        '入力したDNA塩基ならび中にある塩基 t, c, a, g それぞれの個数をカウントする'(_DNA塩基ならび,0,0,0,0).

入力したDNA塩基配列(_DNA配列) :-
        write('DNA塩基配列を入力してください : '),
        get_line(_DNA配列).

'入力したDNA塩基ならび中にある塩基 t, c, a, g それぞれの個数をカウントする'([],_t,_c,_a,_g) :-
        塩基カウント出力([[t,_t],[c,_c],[a,_a],[g,_g]]),!.
'入力したDNA塩基ならび中にある塩基 t, c, a, g それぞれの個数をカウントする'([_塩基|R],_t_1,_c_1,_a_1,_g_1) :-
        カウントする(_塩基,_t_1,_c_1,_a_1,_g_1,_t_2,_c_2,_a_2,_g_2),
        '入力したDNA塩基ならび中にある塩基 t, c, a, g それぞれの個数をカウントする'(R,_t_2,_c_2,_a_2,_g_2).

カウントする(t,_t,_c,_a,_g,_t_2,_c,_a,_g) :-
        _t_2 is _t + 1,!.
カウントする(c,_t,_c,_a,_g,_t,_c_2,_a,_g) :-
        _c_2 is _c + 1,!.
カウントする(a,_t,_c,_a,_g,_t,_c,_a_2,_g) :-
        _a_2 is _a + 1,!.
カウントする(g,_t,_c,_a,_g,_t,_c,_a,_g_2) :-
        _g_2 is _g + 1,!.

塩基カウント出力(LL) :-
        append(_,[[_塩基記号,_個数]|R],LL),
        塩基(_塩基名,_塩基記号),
        writef('%t (%t) : %t\n',[_塩基名,_塩基記号,_個数]),
        R = [].

塩基('Thymine',t).
塩基('Cytosine',c).
塩基('Adenine',a).
塩基('Guanine',g).