実行コマンド 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.
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)とか使え。