このディレクトリの索引

# [1] 授業単元: プログラミング
# [2]問題文:以下の2つの構造体を用い,sample_data2.txt を単方向連結リストに
# 保存するプログラム extra8 を作成せよ.item_list 中の item は各行中の数値を
# 保持し,t_list 中の itemset は1行分のデータを保持するものとする.
# struct item_list {
# int item;
# struct item_list *next;
# };
# struct t_list {
# struct item_list itemset;
# struct t_list *next
# };
# ソースファイルの名前は extra8.c とする.また,extra8.c には,
# 生成した単方向連結リストの内容を標準出力に出力する関数 print_tlist を
# 含むものとし,以下の実行例のように print_tlist により各行の内容を出力
# するものとする.
# なお,入力ファイル名はコマンドライン引数で指定するものとし,入力ファイルが
# オープンできなかった場合の処理も含めること.また,プログラム自身を除く
# 引数の数が0個,もしくは2個以上の場合は,何もせず適切なメッセージを出力して
# 終了するものとする.
# (実行例1)
# > .\extra8 sample_data2.txt
# Itemset: 1,3,9,13,23,25,34,36
# Itemset: 2,3,9,14,23,26,34,36,39,40,52,55,59

extra8 :-
    ユーザパラメータの取得(_ファイル名),
    get_lines(_ファイル名,Lines),
    findall(Item_list,(member(Line,Lines),split(Line,[','],Item_list)),T_list),
    assertz(t_list(T_list)).

print_tlist :-
    t_list(T_list),
    member(Item_list,T_list),
    print_tlist_format(Item_list,Format),
    write_formatted(Format,Item_list),
    fail.
print_tlist.

print_tlist_format(Item_list,Format) :-
    length(Item_list,Len),
    length(L,Len),
    all(L,'%t'),
    concat_atom(L,',',S),
    concat_atom(['Items : ,S,'\n'],Format),!.

ユーザパラメータの取得(_ファイル名) :-
    user_parameters([_ファイル名]),!.
ユーザパラメータの取得(_) :-
    error_tell(Output),
    write(Output,'パラメータで適切なファイル名が与えられませんでした\n'),
    errot_told(Output).