Prolog演習の課題メモ
デバッグ
printデバッグ
- デバッグの方法はprintしか無いようです。(TA談)
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