このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1308749241/166
#  [1] 授業単元:C言語 
#  [2] 問題文:コンソールから2つの数(数1,数2とする)を入力する.ただし,数1は複数の桁の整数で,数2は1桁の数であるとする. 
#  数1が数2の倍数のときには,数1が数2の倍数である旨を表示し,そうでない場合は,数1が数2の倍数では無い旨,教示する. 
#  そして,数1に含まれる,数字としての数2の個数を数え,結果をコンソールに出力させる. 
#  以上を4つの関数で構成されるプログラムとして作成せよ. 
#   
#  実行例 
#  数1を入力して下さい 23242 ←キーボードから23242と入力 
#  数2を入力して下さい 2 ←キーボードから2と入力 
#  23242は2の倍数です 
#  23242に含まれる2の数字は3個です 
#   
#  数1を入力して下さい 323 
#  数2を入力して下さい 3 
#  323は3の倍数ではありません 
#  323に含まれる3の数字は2個です 
#  お願いします 
# 
#  <仕様> 
#  プログラムを以下の関数で構成する. 
#   数1が数2の倍数であるか否かの判定の関数 
#  ・引数:数1, 数2(いずれもint型) 
#  ・戻り値:0または1(いずれもint型) 
#  0…数1は数2の倍数ではない 
#  1…数1は数2の倍数 
#   数1に含まれる数字としての数2の個数を数える関数 
#  ・引数:数1, 数2(いずれもint型) 
#  ・戻り値:数えた結果の個数(int型) 
#   数1, 数2にまつわる分析を行う関数 
#  ・引数:数1, 数2(いずれもint型) 
#  ・戻り値:分析結果…2桁の整数 
#  1の位 :数1に含まれる数2の数字の個数 
#  10の位:数1が数2の倍数か否か(0:非倍数,1:倍数)) 
#   main関数. 
#  ・数1, 数2をキーボードから入力する 
#  ・上記の分析関数を呼び出す 
#  ・下記の分析結果を表示する. 
#  数1が数2の倍数か否か 
#  数1に含まれる数2の数字の個数 
#  関数 銑の名称やソースプログラム内の位置は任意で良い. 
# 
#  

'コンソールから2つの数(数1,数2とする)を入力する.ただし,数1は複数の桁の整数で,数2は1桁の数であるとする'(_数1,_数2) :-
        '数1を入力する。ただし,数1は複数の桁の整数であるとする'(_数1),
        '数2を入力する。ただし,数2は1桁の数であるとする'(_数2).

'数1を入力する。ただし,数1は複数の桁の整数であるとする'(_数1) :-
        write('数1を入力してください(複数の桁の整数) : '),
        get_line(Line),
        'ただし,数1は複数の桁の整数であるとする'(Line,_数1),!.
'数1を入力する。ただし,数1は複数の桁の整数であるとする'(_数1) :-
        '数1を入力する。ただし,数1は複数の桁の整数であるとする'(_数1).

'ただし,数1は複数の桁の整数であるとする'(Line,_数1) :-
        atom_to_term(Line,_数1,_),
        integer(_数1),
        _数1 > 9,!.
'ただし,数1は複数の桁の整数であるとする'(Line,_) :-
        writef('入力された %t から複数桁の整数が得られません。再入力をお願いします。\n',[Line]),
        fail.

'数2を入力する。ただし,数2は1桁の数であるとする'(_数2) :-
        write('数2を入力してください(1桁の整数) : '),
        get_line(Line),
        'ただし,数2は1桁の数であるとする'(Line,_数2),!.
'数2を入力する。ただし,数2は1桁の数であるとする'(_数2) :-
        '数2を入力する。ただし,数2は1桁の数であるとする'(_数2).

'ただし,数2は1桁の数であるとする'(Line,_数2) :-
        atom_to_term(Line,_数2,_),
        integer(_数2),
        _数2 >= 0,
        _数2 =< 9,!.
'ただし,数2は1桁の数であるとする'(Line,_) :-
        writef('入力された %t から1桁の数が得られません。再入力をお願いします。\n',[Line]),
        fail.

'数1が数2の倍数のときには,数1が数2の倍数である旨を表示し,そうでない場合は,数1が数2の倍数では無い旨,教示する'(_数1,_数2,_教示) :-
        '数1が数2の倍数のときには,数1が数2の倍数である旨を表示し'(_数1,_数2,_教示),!.
'数1が数2の倍数のときには,数1が数2の倍数である旨を表示し,そうでない場合は,数1が数2の倍数では無い旨,教示する'(_数1,_数2,_教示) :-
        '数1が数2の倍数でない場合は、数1が数2の倍数では無い旨,教示する'(_数1,_数2,_教示),!.

'数1が数2の倍数のときには,数1が数2の倍数である旨を表示し'(_数1,_数2,数1が数2の倍数である) :-
        _数1 is _数2 * 2.

'数1が数2の倍数でない場合は、数1が数2の倍数では無い旨,教示する'(_数1,_数2,数1が数2の倍数では無い) :-
        \+(_数1 is _数2 * 2).

'数1に含まれる,数字としての数2の個数を数え,結果をコンソールに出力させる'(_数1,_数2,_数1に含まれる数2の個数) :-
        '数1に含まれる,数字としての数2の個数を数え'(_数1,_数2,_数1に含まれる数2の個数),
        結果をコンソールに出力させる(_数1に含まれる数2の個数).

'数1に含まれる,数字としての数2の個数を数え'(_数1,_数2,_数1に含まれる数2の個数) :-
        number_chars(_数1,L1),
        number_chars(_数2,L2),
        count(append(_,L2,_,L1),_数1に含まれる数2の個数),

結果をコンソールに出力させる(_数1に含まれる数2の個数) :-
        writef('数1には数2の数が%t個含まれます。\n',[_数1に含まれる数2の個数]).