Prolog演習の課題メモ

デバッグ

printデバッグ

   1 :- module("test").
   2 
   3 % printAVMは恒真
   4 % 組み込みでprintもありますが、printAVMの方が綺麗に要素が出力されるのでおすすめです。
   5 
   6 % 文字列の出力
   7 % printAVM("文字列")
   8 hello <- [pred].
   9 hello :- print("Hello,World!").
  10 ?-hello.
  11 
  12 % 要素の中身を出力
  13 append1 <- [pred].
  14 append1([X|Xs], Ys, [X|Zs]) :- append1(Xs, Ys, Zs),printAVM(Zs).
  15 append1([], Ys, Ys). 
  16 
  17 ?-append1([1,2,3,4], [5,6,7], Z).
  18 
  19 % 一応、printによる方法も
  20 append2 <- [pred].
  21 append2([X|Xs], Ys, [X|Zs]) :- append2(Xs, Ys, Zs),print(Zs).
  22 append2([], Ys, Ys). 
  23 
  24 ?-append2([1,2,3,4], [5,6,7], Z).

実行時間を測る

shell上でtimeを使う

$ lilfes -l test.lil -e "?-hello."

で、" "内のQueryを試したら終了するようにできます。
つまり、時間を測りたいときは

$ time lilfes -l test.lil -e "?-hello."

でいいですね。
しかし、インタプリタを起動する時間や出力の時間も測ってしまうので、工夫が必要です。(output redirectionを付けるとか。)

if文

> :- print(1) -> print(2); print(3).
1
2
> :- fail -> print(2); print(3).
2
> :- fail -> print(2).
> :- (print(1), fail, fail) -> print(2); print(3).
1
3
> :- print(1), fail, fail -> print(2); print(3).
> :- print(1) -> print(2); print(3), print(4).
1
2
> :- (print(1) -> print(2); print(3)), print(4).
1
2
4
> :- fail -> print(2); print(3), print(4).
3
4

第6回

配布のprint_parseが見にくすぎたので、改良しました。 cfg_io.lil

第7回

こちら


Categoryノート

関数・論理型プログラミング実験/課題メモ(LiLFeS) (最終更新日時 2011-07-31 01:17:02 更新者 amylase)