このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1309076891/908
#  【 課題 】ttp://www.dotup.org/uploda/www.dotup.org2712711.txt.html 
#  【 形態 】1. Javaアプリケーション(main()で開始)  
#  【 GUI  】制限なし 
#  【 期限 】3/8 0:00 
#  【 Ver  】java version "1.7.0_02-ea" 
#  【 補足 】3/8が提出期限なので、それまでにどうかお願いいたします。 
# 
# 
#  専門学校での課題です。
#  課題1については自力でできたのですが、ところどころわからないので、課題1から3をお願いします
#  
#  課題2.
#  クラスHumanを作りなさい。フィールドは名前、身長、体重の3つとする。 そして、身長と体重が整数でも少数点でも設定できるようにメソッドを作ること。また、初期化時も整数でも少数点でも設定できるようにすること。さらにそのフィールドの値を表示するメソッドも持つこと(表示は小数点表示で統一してよい)
#  そして、そのクラスHumanをテストするクラスHumanTestを作り、実際にインスタンスを2つ作って、値を設定し、その値を表示するmainメソッドを作りなさい。
#  プロジェクト名は「kadai2」、クラス名は「HumanTest」とする。
#  

データベース構造('Human',1,名前).
データベース構造('Human',2,身長).
データベース構造('Human',3,体重).

フィールドの値を表示する(_関係名) :-
        フィールド名ならびを得る(_関係名,_フィールド名ならび),
        'Human'(_名前,_身長,_体重),
        併合する(_フィールド名ならび,[_名前,_身長,_体重],L),
        writef('Human:: %t=%t, %t=%t, %t=%t\n',L),
        fail.
フィールドの値を表示する(_).

'節を定義する'(_関係名) :-
        フィールド値の入力(_関係名,_フィールド名_フィールド値ならび),
        フィールド値の切り出し(_フィールド名_フィールド値ならび,_フィールド値ならび),
        P =.. [_関係名|_フィールド値ならび],
        assertz(P).

フィールド値の切り出し([],[]).
フィールド値の切り出し([[_,_フィールド値]|R1],[_フィールド値|R2]) :-
        フィールド値の切り出し(R1,R2).

フィールド名ならびを得る(_関係名,_フィールド名ならび) :-
        findall([Nth,_フィールド名],(
                    データベース構造(_関係名,Nth,_フィールド名)),
                L1),
        sort(L1,L2),
        フィールド名の切り出し(L2,_フィールド名ならび).

フィールド名の切り出し([],[]).
フィールド名の切り出し([[_,_フィールド名]|R1],[_フィールド名|R2]) :-
        フィールド名の切り出し(R1,R2).

フィールド値の入力(_関係名,L,_フィールド名_フィールド値ならび) :-
        findall([_フィールド名,_フィールド値],(
                    member([_,_フィールド名],L),
                    フィールド値の入力(_関係名,_フィールド名,_フィールド値)),
                _フィールド名_フィールド値ならび).

フィールド値の入力(名前,_名前) :-
        get_line(_名前).
フィールド値の入力(身長,_身長) :-
        get_line(Line),
        身長入力検査(Line,_身長),!.
フィールド値の入力(体重,_体重) :-
        get_line(Line),
        体重入力検査(Line,_体重),!.
フィールド値の入力(_フィールド名,_値) :-
        フィールド値の入力(_フィールド名,_値).

身長入力検査(Line,_身長) :-
        atom_to_term(Line,_身長),
        number(_身長),
        _身長 > 0,!.
身長入力検査(Line,_身長) :-
        writef('入力された %t は身長を表しません。再入力をお願いします。\n',[Line]),
        fail.

体重入力検査(Line,_体重) :-
        atom_to_term(Line,_体重),
        number(_体重),
        _体重 > 0,!.
体重入力検査(Line,_体重) :-
        writef('入力された %t は体重を表しません。再入力をお願いします。\n',[Line]),
        fail.