このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1260532772/194
#  [1] 授業単元: プログラミング1 
#  [2] 問題文(含コード&リンク): http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10277.txt 
#  
# 必修課題2
# 初項1公差1の等差数列がある(An={1 2 3 4 5 ・・・n})。数値XとYを入力して、
# この数列におけるX項からY項までの数列の和を算出するプログラムを作成せよ。
# 実行結果の例を以下に示す。
# ------------------------------------------------
# 第X項から:1
# 第Y項まで:10
# 初項1公差1の等差数列において、
# 第1項から第10項までの数列の和は55です。
# ------------------------------------------------


初項1公差1の等差数列におけるX項からY項までの数列の和を算出する(X,Y,_数列の和) :-
初項1公差1の等差数列におけるX項からY項までの数列の和を算出する(X,Y,_,_数列の和).


初項1公差1の等差数列におけるX項からY項までの数列の和を算出する(X,Y,_初項1公差1の等差数列,_数列の和) :-
初項1公差1の等差数列におけるX項からY項までの数列の(X,Y,_初項1公差1の等差数列,_X項からY項までの数列),
和を算出する(_X項からY項までの数列,_数列の和).


初項1公差1の等差数列におけるX項からY項までの数列の(X,Y,_等差数列,_X項からY項までの数列) :-
初項1公差1の等差数列(_等差数列),
'X項からY項までの数列の'(X,Y,_等差数列,_X項からY項までの数列),!.


初項1公差1の等差数列(_等差数列) :-
初項1公差1の等差数列(1,_等差数列).


初項1公差1の等差数列(M,[M|R]) :-
公差1の(M,N),
初項1公差1の等差数列(N,X).


公差1の(M,N) :-
succ(M,N).


'X項からY項までの数列の'(X,Y,_等差数列,_X項からY項までの数列) :-
'X項からY項までの数列'(X,Y,_X項からY項までの数列),
append(_,_X項からY項までの数列,_,_等差数列),
'X項からY項までの数列は全て整数'(_X項からY項までの数列).


'X項からY項までの数列'(X,Y,_X項からY項までの数列) :-
length([_|L1],X),
length(L2,Y),
append(L1,_X項からY項までの数列,L2).


'X項からY項までの数列は全て整数'(_X項からY項までの数列) :-
forall(member(A,_X項からY項までの数列),integer(A)).


和を算出する(_X項からY項までの数列,_数列の和) :-
sum_list(_X項からY項までの数ならび,_数列の和).


append([],L2,L3,L4) :-
append(L2,L3,L4).
append([U|L1],L2,L3,[U|L4]) :-
append(L1,L2,L3,L4).