このディレクトリの索引
#  演習6-3 
#   
#  入力したDNA塩基配列中にある塩基 t, c, a, gそれぞれの個数をカウントするプログラムを作成せよ. 
#  【実行例】 
#   
#      % ./a.out 
#      tataatccg ← 入力し,リターンを押して ^D 
#      Thymine  (t) : 3 
#      Cytosine (c) : 2 
#      Adenine  (a) : 3 
#      Guanine  (g) : 1 
#      % 
#   
# 
'入力したDNA塩基配列中にある塩基 t, c, a, gそれぞれの個数をカウントする' :-
        get_chars(_塩基ならび),
        '塩基 t, c, a, gそれぞれの個数をカウントする'(_塩基ならび,T,C,A,G),
        塩基個数の表示([[t,T],[c,C],[a,A],[g,G]]).

'塩基 t, c, a, gそれぞれの個数をカウントする'([],0,0,0,0) :- !.
'塩基 t, c, a, gそれぞれの個数をカウントする'([t|R],T,C,A,G) :-
        '塩基 t, c, a, gそれぞれの個数をカウントする'(R,T,C,A,G),T is T1 + 1,!.
'塩基 t, c, a, gそれぞれの個数をカウントする'([c|R],T,C,A,G) :-
        '塩基 t, c, a, gそれぞれの個数をカウントする'(R,T,C1,A,G),C is C1 + 1,!.
'塩基 t, c, a, gそれぞれの個数をカウントする'([a|R],T,C,A,G) :-
        '塩基 t, c, a, gそれぞれの個数をカウントする'(R,T,C,A1,G),A is A1 + 1,!.
'塩基 t, c, a, gそれぞれの個数をカウントする'([g|R],T,C,A,G) :-
        '塩基 t, c, a, gそれぞれの個数をカウントする'(R,T,C,A,G1),G is G1 + 1,!.
'塩基 t, c, a, gそれぞれの個数をカウントする'([X|R],T,C,A,G) :-
        \+(X=t),\+(X=c),\+(X=a),\+(X=g),
        '塩基 t, c, a, gそれぞれの個数をカウントする'(R,T,C,A,G).

塩基個数の表示([]) :- !.
塩基個数の表示([[_塩基,_個数]|R]) :-
        塩基(_塩基,_塩基表示),
        write_formatted('    %8s (%t) : %t\n',[_塩基表示,_塩基,_個数]),
        塩基個数の表示(R).
        
塩基(t,'Thymine').
塩基(c,'Cytosine').
塩基(a,'Adenine').
塩基(g,'Guanine').