このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1291471791/347
#  [1] 授業単元:プログラミング 
#  [2] 問題文(含コード&リンク): 
#   
#  東北地方の県のデータを打ち出すプログラムを作成しなさい。ただし、東北地方かどうかの判定をする部分は関数を使うこと。 
#  #  県データの1行からなる構造体を受取る関数とする。該当すればYを戻り値として返すようにする。) 
#  判定をする際の県名の比較は、関数側に県名の二次元配列を持ち、標準関数strcmpを使う。string.h のinclude を忘れないように。 
#  strcmp(文字列1,文字列2) は文字列が一致すれば0を返す。 
#   
#  コード例示: http://ime.nu/minus-k.com/nejitsu/loader/up84923.jpg 
#  県データ: http://ime.nu/minus-k.com/nejitsu/loader/up84924.txt 
#  
#  Hokkaido   5683  83453 
#  Aomori     1476   9606 
#  Iwate      1416  15278 
#  Miyagi     2365   7285 
#  Akita      1189  11612 
#  Yamagata   1244   9323 
#  Fukushima  2127  13782 
#  Ibaraki    2985   6096 
#  Tochigi    2005   6408 
#  Gumma      2025   6363 
#  Saitama    6938   3797 
#  Chiba      5926   5156 
#  Tokyo     12059   2187 
#  Kanagawa   8490   2415 
#  Niigata    2476  12582 
#  Toyama     1121   4247 
#  Ishikawa   1181   4185 
#  Fukui       829   4189 
#  Yamanashi   888   4465 
#  Nagano     2214  13585 
#  Gifu       2108  10598 
#  Shizuoka   3767   7779 
#  Aichi      7043   5156 
#  Mie        1857   5776 
#  Shiga      1343   4017 
#  Kyoto      2644   4613 
#  Osaka      8805   1893 
#  Hyogo      5551   8392 
#  Nara       1443   3691 
#  Wakayama   1070   4726 
#  Tottori     613   3507 
#  Shimane     761   6707 
#  Okayama    1951   7112 
#  Hiroshima  2879   8477 
#  Yamaguchi  1528   6110 
#  Tokushima   824   4145 
#  Kagawa     1023   1876 
#  Ehime      1493   5676 
#  Kochi       814   7105 
#  Fukuoka    5016   4971 
#  Saga        877   2439 
#  Nagasaki   1517   4092 
#  Kumamoto   1859   7404 
#  Oita       1221   6338 
#  Miyazaki   1170   7734 
#  Kagoshima  1786   9187 
#  Okinawa    1318   2271

東北地方の県のデータを人口密度の小さい順に打ち出す :-
        東北地方の県のデータならび(_東北地方の県のデータならび),
        sort(_東北地方の県のデータならび,_人口密度を鍵に整列した東北地方の県のデータならび),
        write('人口密度,県名,面積,人口\n'),
        append(_,[[[_人口密度,_県名,_面積,_人口]|R],_人口密度を鍵に整列した東北地方の県のデータならび),
        write_formatted('%t,%t,%t,%t,%t\n',[_人口密度,_件名,_面積,_人口]),
        R = [].

東北地方の県のデータならび(_東北地方の県のデータならび) :-
        webサイトから読み出した東北地方の県のデータならび(_県のデータならび),
        findall([_人口密度,_県名,_面積,_人口],(
                    append(_,[[_県名,_面積,_人口]|_],_県のデータならび),
                    東北地方(_県名),
                    人口密度(_面積,_人口,_人口密度)),
                _東北地方の県のデータならび).

webサイトから読み出した東北地方の県のデータならび(_県のデータならび) :-
        w3c('http://nojiriko.asia/prolog/c144_347_1.html',L),
        県のデータ部分のみを切り出す(L,_県のデータ部分ならび),
        findall(_県のデータ,(
                    append(_,[_行|_],_県のデータ部分ならび),
                    split(_行,[' '],['#'|_県のデータ])),
                _県のデータならび),!.

県のデータ部分のみを切り出す(L,_県のデータ部分ならび) :-
        append(_,[_行,_|R],L),
        \+(sub_atom(_行,0,7,_,'#  県のデータ')),
        append(_県のデータ部分ならび,[_行2|_],R),
        \+(sub_atom(_行2,0,1,_,'#')),!.

人口密度(_面積,_人口,_人口密度) :-
        _人口密度 is floor((_人口 / _面積) * 10 + 5) / 10.

東北地方('Aomori').
東北地方('Iwate').
東北地方('Akita').
東北地方('Miyagi').
東北地方('Yamagata').
東方地方('Fukushima').