アットウィキロゴ

lmntal

適当なLMNtalメモ。


実行コマンド java runtime.FrontEnd

-cp : フォルダ名を指定できる ex. java-cpbinruntime.FrontEnd

-e : 直接ソース書き込めるのかな。 ex javaruntime.FrontEnd-e'p(1).p(2).'

-t : トレース。


プログラムの書き方とかサンプルとか。

リストの書き方。
r = [1,3].
r(A) , cons(1,B,A), cons(3,C,B),'[]'(C).

bubble sort
H=[X , Y|R] :- X>Y| H = [Y , X|R].
r=[1,5,2,3,6,8,85,3].

append
R=append([], A) :- R=A.
R=append([H|T], A) :- R=[H|append(T , A)].

quicksort
p(E , [] , Ls , Rs) :- R = list.append(q(Ls) , [E|q[Rs]).
p(E , [H|T] , Ls , Rs) :- R = H < E | R = p(E , T , [H|Ls] , Rs).
p(E , [H|T] , Ls , Rs) :- R = H >= E | R = p(E , T , Ls , [H|Rs]).
q([]) :- R = [].
q([H|T]) :- R = p(H , T , [], []).


evenfilter(偶数フィルタ)
R = even([]) :- R = [].
R = even([H|T]) :- H mod 2 = 0 | R = [H|even(T)].
R = even([H|T]) :- H mod 2 = 1 | R = even(T).

局所的に使えるようにするとこうなる。かな?
H = [X | A] :- X mod 2 = 1 | H = A.


ぼちぼちCHRの例題をやってみる。

Greatest Common Divisor(justtworules) つまり最大公約数を求める
gcd(0):- true.
gcd(N) , gcd(M) :- N =< M | gcd(M mod N).


a(A,B) :- a(A) とした場合、Bのルールが無いと怒られる。これを回避するために、ガードにunary(B) と記述する。つまりa(A,B) :- unary(B).  中野的には、「アトム1個がUnary。」

a(X,Y) :- b(X , Y , Y). とした時、Yが2回出てくるので怒られる。回避するためにはガードにground(Y)と記述する。 つまりa(X,Y) :- ground(Y) | b(X , Y , Y). 中野的には「アトムが繋がってground。」

ちなみにa(X,Y) :- ground(Y)| b(X , Y , Y , Y). もOK。

ということは、a(X,Y,Z) :- unary(Z) , ground(Y) | b(X , Y , Y). ってことかねぇ?

リンクじゃなくて数字の時はint(B)とか使え。

最終更新:2005年06月06日 17:56
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。