このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1258158172/316
#  [1] 授業単元:C言語 
#  [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10165.txt
# 課題1、関数rand()を使用して0〜999の整数を10個作り、
#     画面に表示させた後、昇順(数値の小さい順)に表示させるプログラム
#     (実行例)
#    756、836、237、109、290、647、27、933、198、239
#     27、109、198、237、239、290、647、756、836、933
# 
# 課題2、関数rand()を使用して0〜9の整数を作る。これを100回実行し、各数値の出現回数をn[0]〜n[9]の
#     10個の配列にセット、これを用いて次のような棒グラフを表示するプログラムを作成せよ。
#    (実行例)
#     0:***************
#         1:********
#         2:*************
#         3:***********
#         4:*******
#         5:*********
#         6:***********
#         7:********
#         8:******
#         9:************

'0〜999の整数を10個作り、画面に表示させた後、昇順(数値の小さい順)に表示'(_整列した整数ならび) :- 
    findall(N,N is random mod 1000,L), 
    昇順整列(L,[],_整列した整数ならび), 
ならびを行出力(_整数整列ならび). 

昇順整列([],X,X). 
昇順整列([A|R1],L,X) :- 挿入(A,L,L1),昇順整列(R1,L1,X). 

挿入(A,[],[A]) :- !. 
挿入(A,[B|R1],[A,B|R1]) :- A =< B,!. 
挿入(A,[B|R1],[B|R2]) :- 
    挿入(A,R1,R2). 

ならびを行出力([]). 
ならびを行出力([A|R]) :- 
    write_formatted('%t\n',[A]), 
    ならびを行出力(R). 


課題2 :-
  課題2(100,[0,0,0,0,0,0,0,0,0,0],L),
  課題2_グラフ(L).

課題2(0,L,L) :- !.
課題2(M,Y,L) :-
  N is random mod 10,
    N2 is N + 1,
  'N番目要素をカウントアップ'(1,N2,Y,Y1),
  M1 is M - 1,
  課題2(M1,Y1,L).

課題2_グラフ(L) :-
  for(1,N,10),
  N1 is N - 1,
  list_nth(N,L,_頻度),
  findall('*',for(1,U,_頻度),L2),
  concat_atom([N1,':'|L2],S),
  write_formatted('%t\n',[S]),
  N = 10.

'N番目要素をカウントアップ'(M,0,Y,Y1) :- 'N番目要素をカウントアップ'(1,10,Y,Y1).
'N番目要素をカウントアップ'(N,N,[A|R1],[B|R1]) :- B is A + 1,!.
'N番目要素をカウントアップ'(M,N,[A|R1],[A|R2]) :- M2 is M + 1,'N番目要素をカウントアップ'(M2,N,R1,R2).