このディレクトリの索引

http://pc12.2ch.net/test/read.cgi/tech/1245853701/825
# 〔1〕授業単元:C言語
# 〔2〕問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9718.txt
# 課題 I
# コマンド引数に自分の姓と名を与え,そのまま表示するプログラムを作成せよ.
# コマンド引数の数が少なかったり多かった場合は,標準エラー出力にエラー分を表示させること.
# 課題 II
# コマンド引数に任意の個数の整数を与え,その和を表示するプログラムを作成せよ.
# コマンド引数の数が少なかった場合は,標準エラー出力にエラー分を表示させること.
# また,コマンド引数に整数以外が与えられた場合にも,標準エラー出力にエラー分を
# 表示させること.
# 課題 III
# n から m までの整数の和を求めるプログラムを作成せよ.(n ≦ m)
# 再帰呼び出しを行う関数 sum を作成して問題を解くこと.
# 関数 sum は,引数を n, m とし,n から m までの和を返すもとのとする.

'課題 I
コマンド引数に自分の姓と名を与え,そのまま表示するプログラムを作成せよ.
コマンド引数の数が少なかったり多かった場合は,標準エラー出力にエラー分を表示させること.' :-
コマンド引数から自分の姓と名を得て(_コマンド引数ならび),
'そのまま表示する.コマンド引数の数が少なかったり多かった場合は,標準エラー出力にエラー分を表示させる.'(_コマンド引数ならび).

コマンド引数から自分の姓と名を得て(_コマンド引数ならび) :-
current_prolog_flag(argv,_コマンド引数ならび).

'そのまま表示する.コマンド引数の数が少なかったり多かった場合は,標準エラー出力にエラー分を表示させる.'(_コマンド引数ならび) :-
'そのまま表示する.'(_コマンド引数ならび),!.
'そのまま表示する.コマンド引数の数が少なかったり多かった場合は,標準エラー出力にエラー分を表示させる.'(_コマンド引数ならび) :-
コマンド引数の数が少なかったり多かった場合は,標準エラー出力にエラー分を表示させる.'(_コマンド引数ならび) :-

'そのまま表示する.'([_姓,_名]) :-
writef('%w %w\n',[_姓,_名]),!.

コマンド引数の数が少なかったり多かった場合は,標準エラー出力にエラー分を表示させる.'(_コマンド引数ならび) :-
tell(user_error),
writef('%w\n',[_コマンド引数ならび]),
told.



'課題 II
コマンド引数に任意の個数の整数を与え,その和を表示するプログラムを作成せよ.
コマンド引数の数が少なかった場合は,標準エラー出力にエラー分を表示させること.
また,コマンド引数に整数以外が与えられた場合にも,標準エラー出力にエラー分を
表示させること.' :-
'コマンド引数から任意の個数の整数を得て、引数の長さが1以上であり、すべて整数であるかを調べる'(_整数ならび),
その和を表示する(_整数ならび).

'コマンド引数から任意の個数の整数を得て、引数の長さが1以上であり、すべて整数であるかを調べる'(_整数ならび) :-
'コマンド引数から任意の個数の整数を得て、'(_整数ならび),
すべて整数であるかを調べる(_整数ならび).

'コマンド引数から任意の個数の整数を得て、'(_整数ならび) :-
current_prolog_flag(argv,_整数ならび).

'引数の長さが1以上であり、すべて整数であるかを調べる'(_整数ならび) :-
'引数の長さが1以上であり、'(_整数ならび),
すべて整数であるかを調べる(_整数ならび).

'引数の長さが1以上であり、'(_整数ならび) :-
length(_整数ならび,_要素数),
_要素数 > 0.

すべて整数であるかを調べる(_整数ならび) :-
forall(member(_整数,_整数ならび),integer(_整数)).

その和を表示する(_整数ならび) :-
sum_list(_整数ならび,_和),
writef('引数に与えられた整数の合計は%wです\n',[_和]).

'課題 III
n から m までの整数の和を求めるプログラムを作成せよ.(n ≦ m)'(_n,_m,__整数の和) :-
'n から m までの整数の和を求める'(_n,_m,0,_整数の和).

'n から m までの整数の和を求める'(N,N,_ここまでの累計,_整数の和) :-
_整数の和 is _ここまでの累計 + N.
'n から m までの整数の和を求める(N,M,_ここまでの累計,_整数の和) :-
'NがMより小さい間、ここまでの累計にNを加えて行く'(N,M,_ここまでの累計,_整数の和).

'NがMより小さい間、ここまでの累計にNを加えて行く'(N,M,_ここまでの累計,_整数の和) :-
'NがMより小さい間、ここまでの累計にNを加える'(N,M,_ここまでの累計,_Nを加えた累計),
succ(N,N2),
'n から m までの整数の和を求める'(N2,M,_Nを加えた累計,_整数の和).

'NがMより小さい間、ここまでの累計にNを加える'(N,M,_ここまでの累計,_Nを加えた累計),
N < M,
ここまでの累計にNを加える(N,_ここまでの累計,_Nを加えた累計).

ここまでの累計にNを加える(N,_ここまでの累計,_Nを加えた累計) :-
_Nを加えた累計 is _ここまでの累計 + N.


引数の長さ検査(Len) :- Len > 0,!.
引数の長さ検査(Len) :- Len < 1,tell(user_error),write('引数がありません\n'),told,!,fail.

引数のすべてが整数([]) :- !.
引数のすべてが整数([N|R]) :- integer(N),引数のすべてが整数(R).
引数のすべてが整数([A|R]) :- tell(user_error),write('引数に整数でない%tがあります\n',[A]),told,!,fail.