##master-page:CategoryTemplate
##master-date:Unknown-Date
#format wiki
#language en
= Prolog演習の課題メモ =
== デバッグ ==
=== printデバッグ ===
デバッグの方法はprintしか無いようです。(TA談)
{{{#!highlight
:- module("test").
% printAVMは恒真
% 組み込みでprintもありますが、printAVMの方が綺麗に要素が出力されるのでおすすめです。
% 文字列の出力
% printAVM("文字列")
hello <- [pred].
hello :- print("Hello,World!").
?-hello.
% 要素の中身を出力
append1 <- [pred].
append1([X|Xs], Ys, [X|Zs]) :- append1(Xs, Ys, Zs),printAVM(Zs).
append1([], Ys, Ys).
?-append1([1,2,3,4], [5,6,7], Z).
% 一応、printによる方法も
append2 <- [pred].
append2([X|Xs], Ys, [X|Zs]) :- append2(Xs, Ys, Zs),print(Zs).
append2([], Ys, Ys).
?-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が見にくすぎたので、改良しました。
[[attachment:cfg_io.lil]]
== 第7回 ==
[[関数・論理型プログラミング実験/課題メモ(LiLFeS)/第7回|こちら]]
----
[[Categoryノート]]