##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ノート]]