「lmntal」の編集履歴(バックアップ)一覧はこちら
lmntal - (2005/06/06 (月) 17:56:09) の1つ前との変更点
追加された行は緑色になります。
削除された行は赤色になります。
<h1>適当なLMNtalメモ。</h1>
<hr>
<p>実行コマンド java runtime.FrontEnd</p>
<p>
-cp : フォルダ名を指定できる ex. java-cpbinruntime.FrontEnd</p>
<p>
-e : 直接ソース書き込めるのかな。 ex javaruntime.FrontEnd-e'p(1).p(2).'</p>
<p>-t : トレース。</p>
<hr>
<h3>プログラムの書き方とかサンプルとか。</h3>
<p>リストの書き方。<br>
r = [1,3].<br>
r(A) , cons(1,B,A), cons(3,C,B),'[]'(C).<br></p>
<p>bubble sort<br>
H=[X , Y|R] :- X>Y| H = [Y , X|R].<br>
r=[1,5,2,3,6,8,85,3].</p>
<p>append<br>
R=append([], A) :- R=A.<br>
R=append([H|T], A) :- R=[H|append(T , A)].</p>
<p>quicksort<br>
p(E , [] , Ls , Rs) :- R = list.append(q(Ls) , [E|q[Rs]).<br>
p(E , [H|T] , Ls , Rs) :- R = H < E | R = p(E , T , [H|Ls] , Rs).<br>
p(E , [H|T] , Ls , Rs) :- R = H >= E | R = p(E , T , Ls , [H|Rs]).<br>
q([]) :- R = [].<br>
q([H|T]) :- R = p(H , T , [], []).</p>
<br>
<p>evenfilter(偶数フィルタ)<br>
R = even([]) :- R = [].<br>
R = even([H|T]) :- H mod 2 = 0 | R = [H|even(T)].<br>
R = even([H|T]) :- H mod 2 = 1 | R = even(T).</p>
<p>局所的に使えるようにするとこうなる。かな?<br>
H = [X | A] :- X mod 2 = 1 | H = A.</p>
<hr>
<h3>ぼちぼちCHRの例題をやってみる。</h3>
<p>Greatest Common Divisor
(justtworules) つまり最大公約数を求める<br>
gcd(0):- true.<br>
gcd(N) , gcd(M) :- N =< M | gcd(M mod N).<br></p>
<hr>
<p>例えば a(A,B) :-
a(A) とした場合、Bのルールが無いと怒られる。これを回避するために、</p>
<p>unary(B) と記述する。</p>
<h1>適当なLMNtalメモ。</h1>
<hr>
<p>実行コマンド java runtime.FrontEnd</p>
<p>
-cp : フォルダ名を指定できる ex. java-cpbinruntime.FrontEnd</p>
<p>
-e : 直接ソース書き込めるのかな。 ex javaruntime.FrontEnd-e'p(1).p(2).'</p>
<p>-t : トレース。</p>
<hr>
<h3>プログラムの書き方とかサンプルとか。</h3>
<p>リストの書き方。<br>
r = [1,3].<br>
r(A) , cons(1,B,A), cons(3,C,B),'[]'(C).<br></p>
<p>bubble sort<br>
H=[X , Y|R] :- X>Y| H = [Y , X|R].<br>
r=[1,5,2,3,6,8,85,3].</p>
<p>append<br>
R=append([], A) :- R=A.<br>
R=append([H|T], A) :- R=[H|append(T , A)].</p>
<p>quicksort<br>
p(E , [] , Ls , Rs) :- R = list.append(q(Ls) , [E|q[Rs]).<br>
p(E , [H|T] , Ls , Rs) :- R = H < E | R = p(E , T , [H|Ls] , Rs).<br>
p(E , [H|T] , Ls , Rs) :- R = H >= E | R = p(E , T , Ls , [H|Rs]).<br>
q([]) :- R = [].<br>
q([H|T]) :- R = p(H , T , [], []).</p>
<br>
<p>evenfilter(偶数フィルタ)<br>
R = even([]) :- R = [].<br>
R = even([H|T]) :- H mod 2 = 0 | R = [H|even(T)].<br>
R = even([H|T]) :- H mod 2 = 1 | R = even(T).</p>
<p>局所的に使えるようにするとこうなる。かな?<br>
H = [X | A] :- X mod 2 = 1 | H = A.</p>
<hr>
<h3>ぼちぼちCHRの例題をやってみる。</h3>
<p>Greatest Common
Divisor(justtworules) つまり最大公約数を求める<br>
gcd(0):- true.<br>
gcd(N) , gcd(M) :- N =< M | gcd(M mod N).<br></p>
<hr>
<p>a(A,B) :-
a(A) とした場合、Bのルールが無いと怒られる。これを回避するために、ガードにunary(B) と記述する。つまりa(A,B)
:- unary(B). 中野的には、「アトム1個がUnary。」</p>
<p>a(X,Y) :- b(X , Y ,
Y). とした時、Yが2回出てくるので怒られる。回避するためにはガードにground(Y)と記述する。
つまりa(X,Y) :- ground(Y) | b(X , Y ,
Y). 中野的には「アトムが繋がってground。」</p>
<p>ちなみにa(X,Y) :- ground(Y)| b(X , Y , Y , Y). もOK。</p>
<p>ということは、a(X,Y,Z) :- unary(Z) , ground(Y) | b(X , Y ,
Y). ってことかねぇ?</p>
<p>リンクじゃなくて数字の時はint(B)とか使え。</p>