Prologまとめ

Information

version date memo
0.1 2013/01/23 first
1.0 2013/07/27 csv関連

備考

prolog : swi-prolog 6.3.14

ファイルロード

/* インタプリタ上にて */
['ファイル名(拡張子除く)'].

ファイル入出力

参考ページ:ホームページ移転のお知らせ - Yahoo!ジオシティーズ

/* ファイル入力 */
read_data(X) :-
  see(X), /* ファイルオープン (current input)*/
  repeat, /* 失敗駆動ループ */
  read(Y), /* 読み込み (大文字は変数扱いになるのでアウト) */
  write_data(Y),
  Y == end_of_file, /* end_of_file以外の場合は失敗してrepeatに戻る */
  !, /* カット end_of_fileの場合のみ通過する。 */
  seen. /* ファイルクローズ (current input) */

write_data(end_of_file).
write_data(X) :- format('~a.~n', X).   


カット(!) : ホームページ移転のお知らせ - Yahoo!ジオシティーズ
フォーマット(format) : SWI-Prolog -- format/2
TODO : 大文字を読み込みたい場合ってどうするんだろうね?

CSV読み込み

CSV形式のファイル読み込み方法

/* 以下を実行すると、Xに読み込み結果が入る */    
csv_read_file('ファイル名', X).



上記の方法でcsvファイルをロードすると、
10, 20, 30
40, 50, 60
というデータは、
[row(10, 20, 30), row(40, 50, 60)]
というrow()項のリストで取得される。

%% サンプル
:- use_module(library(csv)).

%% ファイルロード
load_file:-
        csv_read_file('sample.csv', File),!,
        print_csv(File).
%% 出力
print_csv([]).
print_csv(Xs):-
        Xs = [X | Rem],
        X = row(C1, C2, C3),
        format('~w, ~w, ~w~n', [C1, C2, C3]),
        print_csv(Rem).

この関数についての説明 : section(2,'A.9',swi('/doc/Manual/csv.html'))


現在時刻

詳細はhttp://www.swi-prolog.org/pldoc/doc_for?object=section(3,'4.34.2',swi('/doc/Manual/system.html'))

%% 現在時刻生成サンプル
current_time(Date):-
        get_time(Now),
        stamp_date_time(Now, Time, 'UTC'),
	format_time(atom(Date), '%Y/%m/%d %T', Time, posix).