2003 LMNtal GUI GUI : 2004 2 5 : : 1G00P024-3
LMNtal LMNtal LMNtal JAVA JAVA JAVA LMNtal LMNtal LMNtal
1 1 2 LMNtal 3 2.1 LMNtal.............................. 3 2.1.1 Atom........................ 3 2.1.2............................... 3 2.1.3............................. 3 2.1.4......................... 3 2.2 LMNtal............................ 5 2.3.............................. 6 2.4.............................. 6 2.5........................... 7 3 GUI 8 3.1.................................. 8 3.2 Java........................ 8 3.3 MVC.............................. 8 3.4............ 9 3.4.1 Control........................ 9 3.4.2.................... 11 3.4.3........................ 11 3.4.4......................... 12 3.5.............................. 13 3.6 LMNtal MVC........................ 16 3.7.............................. 16 3.8............................ 17 3.9............... 18 3.9.1 JAVA........................ 18 3.9.2....................... 18 3.9.3....................... 19 i
4 20 4.1.................................. 20 4.1.1.......................... 20 4.1.2.......................... 20 4.1.3 MVC.......................... 26 4.1.4 denntaku.......................... 26 4.1.5 byouga........................... 27 4.1.6 control........................... 27 4.1.7................ 28 4.2.............................. 30 4.3........................ 30 5 34 5.1............................ 34 5.2............................. 34 5.3 Runtime................................ 34 5.4.............................. 34 35 36 A 37 A.1 2................................. 37 A.2 3................................. 41 ii
1.1 LMNtal.................... 1 2.1 LMNtal....................... 4 4.1.............................. 30 4.2 Boud................................. 33 iii
2.1 LMNtal.............................. 5 iv
1 Grid LMNtal LMNtal LMNtal LMNtal LMNtal a(x1),c(x1,x2),a(x2) X1 X2 a c a = a(x1),c(x1,x2),a(x2) 1.1: LMNtal LMNtal GUI JAVA GUI LMNtal LMNtal 1
GUI LMNtal GUI GUI 2
2 LMNtal 2.1 LMNtal LMNtal 2.1.1 Atom a(x,y) a(y,x) 2.1.2 2.1.3 LMNtal 2.1.4 append 3
res a c c n res c a c 1 2 1 2 c c n c c 3 4 3 4 res c c c c n 1 2 3 4 <rule1> <rule2> Z0 X0 X Z0 Z X Z0 X0 Z0 a c :- c a a n :- Y A A Y Y n n Y :- 2.1: LMNtal 4
2.2 LMNtal X p LMNtal P P ::= 0 (null) p( X) (atom) P,P (composition) {P (cell) {P/ (stable cell) (T :- T) (reaction rule) T T ::= 0 (null) p( X) (atom) T,T (composition) {T (cell) {T/ (stable cell) @p (rule variable) $p(fvspec) (process variable) 2.1: LMNtal $p {a(x),$p $p a @p FVspec T P P P P {P P 5
append { append(lst1, Lst2, Res), res(res), c(v1, N1, Lst1), c(v2, N2, N1), n(n2), no1(v1), no2(v2), c(v3, N3, Lst2), c(v4, N4, N3), n(v4), no3(v3), no4(v4), ( append(x0,y,z0), c(a,x,x0) :- c(a,z,z0), append(x,y,z) ), ( append(x0,y,z0), n(x0) :- Y=Z0 ) 2.3 LMNtal JAVA LMNtal JAVA LMNtal JAVA /*inline*/ JAVA [[]] [[/*inline*/ System.out.println("inline");]] 2.4 a 6
a(x),5(x) b(x1),s(x1,x),5(x) b(x1),6(x1) 2.5 p(x),$i[x] :- $i < $c, 3($c) q(y),q(z),$i[y],$i[z]. $i p(x),x=0 :- q(y),q(z),y=0,z=0. p(x),x=1 :- q(y),q(z),y=1,z=1. p(x),x=2 :- q(y),q(z),y=2,z=2. p($a):-int($a) q($a),q($a). p q 7
3 GUI 3.1 LMNtal 3.2 Java JAVA java.util.eventobject 3.3 MVC MVC 8
MVC MVC LMNtal MVC 3.4 3.4.1 Control 9
class Control { Object[] objects; int objectid; public Control(){ objects = new Object[100]; objectid = 0; addpanel(); public String addpanel(){ LMNtalpanel g = new LMNtalpanel(); Frame lmntalframe = new LMNtalframe(g); objects[objectid] = g; objectid++; lmntalframe.show(); return Integer.toString(objectid-1); n){ public void addline(string x1,string x2, String y1,string y2,string Line line = new Line( Integer.parseInt(x1),Integer.parseInt(x2), Integer.parseInt(y1),Integer.parseInt(y2)); ((LMNtalpanel)objects[Integer.parseInt(n)]).addDraw(line); ((LMNtalpanel)objects[Integer.parseInt(n)]).repaint(); public String addbutton(string a,string b){ JButton button = new JButton(a); ((LMNtalpanel)objects[Integer.parseInt(b)]).add(button); ((LMNtalpanel)objects[Integer.parseInt(b)]).repaint(); objects[objectid] = button; objectid++; return Integer.toString(objectid-1); public void addlistener(string id,abstractmembrane mem){ int j = Integer.parseInt(id); if(objects[i] instanceof JButton){ new ButtonListener((JButton)objects[j],mem); 10
addpanel addbutton Control addline addlistener Control LMNtal ID ID ID LMNtal ID 3.4.2 LMNtal (addbutton(x,id,label):-[[/*inline*/ String s = Sample.control.addButton( me.getarg(0).getatom().tostring(), me.getarg(1).getatom().tostring()); Functor f1 = new Functor(me.getArg(2).getAtom().toString(),1); Functor f2 = new Functor(s,1); Atom a = me.getmem().newatom(f1); Atom b = me.getmem().newatom(f2); Link l1 = new Link(a,0); Link l2 = new Link(b,0); a.args[0] = l2; b.args[0] = l1; ]](X,ID,LABEL)), Control addbutton addbutton ID ID 3.4.3 11
buttonevent(x),label(x) buttonevent buttonevent(x):-( buttonevent 3.4.4 (addlistener(x):-[[/*inline*/ Sample.control.addListener( me.getarg(0).getatom().tostring(),me.getmem()); ]](X)) ID addlistener 12
class ButtonListener implements ActionListener{ AbstractMembrane mem; JButton button; String label; public ButtonListener(JButton button1,abstractmembrane mem1){ button = button1; label = button.gettext(); mem = mem1; button.addactionlistener(this); public void actionperformed(actionevent evt){ Functor f1 = new Functor("buttonevent",1); Functor f2 = new Functor(label,1); Atom a = mem.newatom(f1); Atom b = mem.newatom(f2); Link l1 = new Link(a,0); Link l2 = new Link(b,0); a.args[0] = l2; b.args[0] = l1; actionperformed 3.5 paintcomponent k paintcomponent Draw Draw 13
class Draw{ Draw ndraw; public void draw(graphics g){ paintcomponent Draw Drawn draw class Line extends Draw{ int x1,x2,y1,y2; public Line(int xx1,int xx2,int yy1,int yy2){ x1 = xx1;x2 = xx2;y1 = yy1;y2 = yy2; public void draw(graphics g){ g.drawline(x1,x2,y1,y2); Draw paintcomponent 14
class LMNtalpanel extends JPanel{ Draw ldraw,cdraw; public LMNtalpanel(){ public void paintcomponent(graphics g){ cdraw = ldraw; while(cdraw!= null){ cdraw.draw(g); cdraw = cdraw.ndraw; public void adddraw(draw draw){ draw.ndraw = ldraw; ldraw = draw; repaint(); public void resetdraw(){ ldraw = null; paintcomponent Draw adddraw Draw resetdraw Draw LMNtal ID (line(x1,y1,x2,y2,id):-[[/*inline*/ Sample.control.addLine( me.getarg(0).getatom().tostring(), me.getarg(1).getatom().tostring(), me.getarg(2).getatom().tostring(), me.getarg(3).getatom().tostring(), me.getarg(4).getatom().tostring()); ]](X1,Y1,X2,Y2,ID)) Draw repaint LMNtal repaint repaint repaint LMNtal 15
(repaint(x):-[[/*inline*/ ((LMNtalpanel)Sample.control.objects [Integer.parseInt( me.getarg(0).getatom().tostring()]).resetdraw(); ]](X)), Draw 3.6 LMNtal MVC LMNtal buttonevent { model(x1){a(x1) view(x2){a(x2),buttonevent(x),label(x) (view(x2){a(x2),buttonevent(x),$p,model(x1),{a(x1),$q:- view(x2){a(x2),$p,model(x1){a(x1),add(x),$q) 3.7 repaint LINE LINE label(x),line(x1,y1,x2,y2,id,x) LINE LINE 16
(line(x1,y1,x2,y2,id,x):- int(x1),int(y1),int(x2),int(y2),int(id) [[/*inline*/ Sample.control.addLine( me.getarg(0).getatom().tostring(), me.getarg(1).getatom().tostring(), me.getarg(2).getatom().tostring(), me.getarg(3).getatom().tostring(), me.getarg(4).getatom().tostring()); ]](X1,Y1,X2,Y2,ID),line(X1,Y1,X2,Y2,ID,X)) LINE LINE repaint paint(l1),{a(l1),line(x1,y1,x2,y2,id),$p, paintzumi(l2),{a(l2),$q, (paint(l1){a(l1),line(x1,y1,x2,y2,id), paintzumi(l2),{a(l2):- int(x1),int(y1),int(x2),int(y2),int(id) [[/*inline*/ Sample.control.addLine( me.getarg(0).getatom().tostring(), me.getarg(1).getatom().tostring(), me.getarg(2).getatom().tostring(), me.getarg(3).getatom().tostring(), me.getarg(4).getatom().tostring()); ]](X1,Y1,X2,Y2,ID), paint(l1){a(l1),$p, paintzumi(l2),{a(l2),line(x1,y1,x2,y2,id),$q) 3.8 addbutton 17
(copyint(s(x1),x2,x3,x4,x5):-copyint(x1,s(x2),s(x3),x4,x5)), (copyint(0,x2,x3,x4,x5):-x2=x4,x3=x5), (counter(s(x)):-copyint(x,0,0,x2,x3),counter(x2), addbutton(s(x3),id,label)), (counter(0):-()) button button(x):-addlistener(x) 3.9 3.9.1 JAVA Java paintcomponent Graphics ID Graphics paintcomponent ID Java ID 3.9.2 paint paintzumi paint paintzumi 18
3.9.3 Java paintcomponent Graphics line Java LMNtal LMNtal 19
4 4.1 4.1.1 x y x x y x 4.1.2 [[/*inline_define*/ import java.util.*; import javax.swing.*; import javax.swing.uimanager; import java.awt.*; import java.awt.event.*; class Sample { public static Control control = new Control(); class Control { Object[] objects; int objectid; public Control(){ objects = new Object[100]; 20
objectid = 0; addpanel(); public String addpanel(){ LMNtalpanel g = new LMNtalpanel(); Frame lmntalframe = new LMNtalframe(g); objects[objectid] = g; objectid++; lmntalframe.show(); return Integer.toString(objectid-1); public void addline(string x1,string x2, String y1,string y2,string n){ Line line = new Line(Integer.parseInt(x1), Integer.parseInt(x2), Integer.parseInt(y1), Integer.parseInt(y2)); ((LMNtalpanel)objects[Integer.parseInt(n)]).addDraw(line); ((LMNtalpanel)objects[Integer.parseInt(n)]).repaint(); public void addatom(string x,string y,string s,string n){ Atomm atom = new Atomm( Integer.parseInt(x),Integer.parseInt(y),s); ((LMNtalpanel)objects[Integer.parseInt(n)]).addDraw(atom); ((LMNtalpanel)objects[Integer.parseInt(n)]).repaint(); public String addbutton(string a,string b){ JButton button = new JButton(a); ((LMNtalpanel)objects[Integer.parseInt(b)]).add(button); ((LMNtalpanel)objects[Integer.parseInt(b)]).repaint(); objects[objectid] = button; objectid++; return Integer.toString(objectid-1); public void resetdraw(string s){ ((LMNtalpanel)objects[Integer.parseInt(s)]).resetdraw(); public void addlistener(string id,abstractmembrane mem){ int j = Integer.parseInt(id); if(objects[j] instanceof JButton){ new ButtonListener((JButton)objects[j],mem); 21
class LMNtalframe extends JFrame{ LMNtalpanel g; public LMNtalframe(LMNtalpanel g1){ settitle( LMNtal ); setsize(200,200); g = g1; addwindowlistener(new WindowAdapter(){ public void windowclosing(windowevent E){ System.exit(0); ); Container contentpane = getcontentpane(); contentpane.add(g); class LMNtalpanel extends JPanel{ Draw ldraw,cdraw; public LMNtalpanel(){ public void paintcomponent(graphics g){ cdraw = ldraw; while(cdraw!= null){ cdraw.draw(g); cdraw = cdraw.ndraw; public void adddraw(draw draw){ draw.ndraw = ldraw; ldraw = draw; repaint(); public void resetdraw(){ ldraw = null; 22
class ButtonListener implements ActionListener{ AbstractMembrane mem; JButton button; String label; public ButtonListener(JButton button1,abstractmembrane mem1){ button = button1; label = button.gettext(); mem = mem1; button.addactionlistener(this); public void actionperformed(actionevent evt){ Functor f1 = new Functor( buttonevent,1); Functor f2 = new Functor(label,1); Atom a = mem.newatom(f1); Atom b = mem.newatom(f2); Link l1 = new Link(a,0); Link l2 = new Link(b,0); a.args[0] = l2; b.args[0] = l1; class Draw{ Draw ndraw; public void draw(graphics g){ class Line extends Draw{ int x1,x2,y1,y2; public Line(int xx1,int xx2,int yy1,int yy2){ x1 = xx1;x2 = xx2;y1 = yy1;y2 = yy2; public void draw(graphics g){ 23
g.drawline(x1,x2,y1,y2); class Atomm extends Draw{ int x,y; String s; public Atomm(int xx,int yy,string ss){ x = xx;y = yy;s = ss; public void draw(graphics g){ g.setcolor(color.black); g.filloval(x,y,30,30); g.setcolor(color.blue); g.filloval(x+2,y+2,26,26); g.setcolor(color.black); g.drawstring(s,x+10,y+18) ]], { sumzumi, (denntaku(l1),{a(l1),sumzumi,c(x), byouga(l2),{a(l2),$p :- int(x) denntaku(l1),{a(l1),c(x), byouga(l2),{a(l2),c(x),$p), (byouga(l1),{a(l1),int(x1),$p,c(x):- sum(x1,x2,x3),mul(x,10,0,x2),c(x3), mulzumi,byouga(l1),{a(l1),$p), (byouga(l1),{a(l1),$p,c(x),mulzumi:- int(x) byouga(l1),{a(l1),c(x),$p,c(x)), (byouga(l1),{a(l1),plus,$p, denntaku(l2),{a(l2),$q,c(x):- byouga(l1),{a(l1),$p, denntaku(l2),{a(l2),add(x),$q,c(0)), (sum(s(x1),x2,x3):-sum(x1,s(x2),x3)), 24
(sum(0,x2,x3):-x2 = X3,sumzumi), (mul(s(x1),x2,x3,x4),sumzumi:- mul(x1,x2,x5,x4),sum(x2,x3,x5)), (mul(0,x2,x3,x4),sumzumi:- X3 = X4,sumzumi), denntaku(l1),{a(l1), c(0), (add(x1),c(x2):-sum(x1,x2,x3),c(x3)), (sum(s(x1),x2,x3):-sum(x1,s(x2),x3)), (sum(0,x2,x3):-x2 = X3,sumzumi), byouga(l2), {a(l2), (line(x1,y1,x2,y2,id):-[[/*inline*/ Sample.control.addLine( me.getarg(0).getatom().tostring(), me.getarg(1).getatom().tostring(), me.getarg(2).getatom().tostring(), me.getarg(3).getatom().tostring(), me.getarg(4).getatom().tostring()); ]](X1,Y1,X2,Y2,ID)), (atom(x,y,l,id):-[[/*inline*/ Sample.control.addAtom( me.getarg(0).getatom().tostring(), me.getarg(1).getatom().tostring(), me.getarg(2).getatom().tostring(), me.getarg(3).getatom().tostring()); ]](X,Y,L,ID)), (addbutton(x,id,label):-[[/*inline*/ String s = Sample.control.addButton( me.getarg(0).getatom().tostring(), me.getarg(1).getatom().tostring()); Functor f1 = new Functor( me.getarg(2).getatom().tostring(),1); Functor f2 = new Functor(s,1); Atom a = me.getmem().newatom(f1); Atom b = me.getmem().newatom(f2); Link l1 = new Link(a,0); Link l2 = new Link(b,0); a.args[0] = l2; b.args[0] = l1; 25
]](X,ID,LABEL)), (addlistener(x):-[[/*inline*/ Sample.control.addListener( me.getarg(0).getatom().tostring(),me.getmem()); ]](X)), (repaint(x):-[[/*inline*/ Sample.control.resetdraw( me.getarg(0).getatom().tostring()); ]](X),repaintzumi), (c(x):-repaint(0),c(x)), (c(x),repaintzumi:-addatom(50,100,x)), (buttonevent(x),+(x):-plus), (buttonevent(x):-int(x) int(x)), addbutton(1),addbutton(2),addbutton(3), addbutton(4),addbutton(5),addbutton(6), addbutton(7),addbutton(8),addbutton(9),addbutton(+) 4.1.3 MVC denntaku model byouga control control byouga denntaku denntaku byouga 4.1.4 denntaku denntaku c (sum(s(x1),x2,x3):-sum(x1,s(x2),x3)), (sum(0,x2,x3):-x2 = X3,sumzumi) sum X1,X2,X3 X1 X2 X3 26
X1 X2 sum X1 X2 X3 X3 sumuzumi denntaku add c sumzumi 4.1.5 byouga byouga atom, line addbutton, addlistener byouga addbutton(1) addbutton(9) addbutton(+) byouga (buttonevent(x),+(x):-plus), (buttonevent(x):-int(x) int(x)) plus int (c(x):-repaint(0),c(x)), (c(x),repaintzumi:-addatom(50,100,x)) byouga c c 4.1.6 control control c byouga int c byouga (byouga(l1),{a(l1),int(x1),$p,c(x):- sum(x1,x2,x3),mul(x,10,0,x2),c(x3), byouga(l1),{a(l1),$p), 27
(mul(s(x1),x2,x3,x4),sumzumi:- mul(x1,x2,x5,x4),sum(x2,x3,x5)), (mul(0,x2,x3,x4),sumzumi:- X3 = X4,sumzumi), X1,X2,X3,X4 X3 X1 X3 X2 X1 X1 X4 X3 byouga plus denntaku add (byouga(l1),{a(l1),plus,$p, denntaku(l2),{a(l2),$q,c(x):- byouga(l1),{a(l1),$p, denntaku(l2),{a(l2),add(x),$q,c(0)) denntaku sumzumi byouga (denntaku(l1),{a(l1),sumzumi,c(x), byouga(l2),{a(l2),$p :- int(x) denntaku(l1),{a(l1),c(x), byouga(l2),{a(l2),c(x),$p) 4.1.7 GUI GUI 28
{ sumzumi, (denntaku(l1),{a(l1),sumzumi,c(x), byouga(l2),{a(l2),$p :- int(x) denntaku(l1),{a(l1),c(x), byouga(l2),{a(l2),c(x),$p), (byouga(l1),{a(l1),int(x1),$p,c(x):- sum(x1,x2,x3),mul(x,10,0,x2),c(x3), byouga(l1),{a(l1),$p), (byouga(l1),{a(l1),plus,$p, denntaku(l2),{a(l2),$q,c(x):- byouga(l1),{a(l1),$p, denntaku(l2),{a(l2),add(x),$q,c(0)), (sum(s(x1),x2,x3):-sum(x1,s(x2),x3)), (sum(0,x2,x3):-x2 = X3,sumzumi), (mul(s(x1),x2,x3,x4),sumzumi:- mul(x1,x2,x5,x4),sum(x2,x3,x5)), (mul(0,x2,x3,x4),sumzumi:- X3 = X4,sumzumi), denntaku(l1),{a(l1), c(0), (add(x1),c(x2):-sum(x1,x2,x3),c(x3)), (sum(s(x1),x2,x3):-sum(x1,s(x2),x3)), (sum(0,x2,x3):-x2 = X3,sumzumi), byouga(l2), {a(l2), (c(x):-repaint(0),c(x)), (c(x),repaintzumi:-addatom(50,100,x)), (buttonevent(x),+(x):-plus), (buttonevent(x):-int(x) int(x)), addbutton(1),addbutton(2),addbutton(3), addbutton(4),addbutton(5),addbutton(6), addbutton(7),addbutton(8),addbutton(9),addbutton(+), c(0) 29
4.2 line(10,10,30,10),line(30,10,30,30),line(10,10,10,30), line(10,30,30,30),atom(30,30,a) 4.1: 4.3 LMNtal Java 30
class Bound{ int x1,y1; boolean xb,yb; public Bound(int xx,int yy){ x1 = xx; y1 = yy; public String[] next(string x2,string y2){ int x = Integer.parseInt(x2); int y = Integer.parseInt(y2); if(!xb){ x = x+5; if(x>x1)xb = true; else{ x = x-5; if(x<0)xb = false; if(!yb){ y = y+5; if(y>y1)yb = true; else{ y = y-5; if(y<0)yb = false; String[] s = new String[2]; s[0] = Integer.toString(x); s[1] = Integer.toString(y); return s; 31
(a(x,y):-[[/*inline*/string[] ss = Control.bound.next(me.nth(0),me.nth(1)); me.getarg(0).getatom().changename(ss[0]); me.getarg(1).getatom().changename(ss[1]); me.changename("az"); ]](X,Y)), (az(x,y):-[[/*inline*/sample.control.objects[0].resetdraw(); System.out.println("az"); Sample.control.addAtom(me.getArg(0).getAtom().toString(), me.getarg(1).getatom().tostring(), "1","0"); me.changename("a"); Thread.sleep(100); ]](X,Y)) 32
4.2: Boud 33
5 5.1 5.2 LMNtal sum 5.3 Runtime LMNtal 5.4 GUI 34
[1], : Programming with Logical Links, 19, 2002. [2] : Java LMNtal,,,2003. [3] : LMNtal Runtime Java,,,2003. [4] Cay S.Horstmann,Gary Cornell : CoreJAVA2 volume1, ASCII, 2000. [5] Sun,microsystems http://java.sun.com [6] Dennis Gannon, Randall Bramley, Geoffrey Fox, Shava Smallen, Al Rossi, Rachana Ananthakrishnan, Felipe Bertrand, Ken Chiu, Matt Farrellee, Madhu Govindaraju, Sriram Krishnan, Lavanya Ramakrishnan, Yogesh Simmhan, Alek Slominski, Yu Ma, Caroline Olariu, Nicolas Rey-Cenvaz : Programming the Grid: Distributed Software Components, P2P and Grid Web Services for Scientific Applications, 2002. http://www.extreme.indiana.edu/~gannon /ProgGrid/ProgGridsHTML.htm 35
LMNtal LMNtal Java 36
A A.1 2 [[/*inline_define*/ import java.util.*; import javax.swing.*; import javax.swing.uimanager; import java.awt.*; import java.awt.event.*; class Sample { public static Control control = new Control(); class Control { Object[] objects; int objectid; public static Bound bound; public Control(){ objects = new Object[100]; objectid = 0; addpanel(); bound = new Bound(240,200); public String addpanel(){ LMNtalpanel g = new LMNtalpanel(); Frame lmntalframe = new LMNtalframe(g); objects[objectid] = g; objectid++; lmntalframe.show(); return Integer.toString(objectid-1); 37
public void addline(string x1,string x2, String y1,string y2,string n){ Line line = new Line( Integer.parseInt(x1),Integer.parseInt(x2), Integer.parseInt(y1),Integer.parseInt(y2)); ((LMNtalpanel)objects[Integer.parseInt(n)]).addDraw(line); ((LMNtalpanel)objects[Integer.parseInt(n)]).repaint(); public void addatom(string x,string y,string s,string n){ Atomm atom = new Atomm( Integer.parseInt(x),Integer.parseInt(y),s); ((LMNtalpanel)objects[Integer.parseInt(n)]).addDraw(atom); ((LMNtalpanel)objects[Integer.parseInt(n)]).repaint(); public String addbutton(string a,string b){ JButton button = new JButton(a); ((LMNtalpanel)objects[Integer.parseInt(b)]).add(button); ((LMNtalpanel)objects[Integer.parseInt(b)]).repaint(); objects[objectid] = button; objectid++; return Integer.toString(objectid-1); public void addlistener(string id,abstractmembrane mem){ class LMNtalframe extends JFrame{ LMNtalpanel g; public LMNtalframe(LMNtalpanel g1){ settitle("lmntal"); setsize(240,200); g = g1; addwindowlistener(new WindowAdapter(){ public void windowclosing(windowevent E){ System.exit(0); 38
); Container contentpane = getcontentpane(); contentpane.add(g); class LMNtalpanel extends JPanel{ Draw ldraw,cdraw; public LMNtalpanel(){ public void paintcomponent(graphics g){ cdraw = ldraw; while(cdraw!= null){ cdraw.draw(g); cdraw = cdraw.ndraw; public void adddraw(draw draw){ draw.ndraw = ldraw; ldraw = draw; repaint(); public void resetdraw(){ ldraw = null; class ButtonListener implements ActionListener{ AbstractMembrane mem; JButton button; String label; public ButtonListener(JButton button1,abstractmembrane mem1){ button = button1; label = button.gettext(); mem = mem1; button.addactionlistener(this); public void actionperformed(actionevent evt){ Functor f1 = new Functor("buttonevent",1); 39
Functor f2 = new Functor(label,1); Atom a = mem.newatom(f1); Atom b = mem.newatom(f2); Link l1 = new Link(a,0); Link l2 = new Link(b,0); a.args[0] = l2; b.args[0] = l1; class Draw{ Draw ndraw; public void draw(graphics g){ class Line extends Draw{ int x1,x2,y1,y2; public Line(int xx1,int xx2,int yy1,int yy2){ x1 = xx1;x2 = xx2;y1 = yy1;y2 = yy2; public void draw(graphics g){ g.drawline(x1,x2,y1,y2); class Atomm extends Draw{ int x,y; String s; public Atomm(int xx,int yy,string ss){ x = xx;y = yy;s = ss; public void draw(graphics g){ g.setcolor(color.black); g.filloval(x,y,30,30); g.setcolor(color.blue); g.filloval(x+2,y+2,26,26); g.setcolor(color.black); g.drawstring(s,x+10,y+18); 40
]], (line(x1,y1,x2,y2):-[[/*inline*/ Sample.control.addLine(me.getArg(0).getAtom().toString(), me.getarg(1).getatom().tostring(), me.getarg(2).getatom().tostring(), me.getarg(3).getatom().tostring(),"0"); ]](X1,Y1,X2,Y2)), (atom(x,y,l):-[[/*inline*/ Sample.control.addAtom(me.getArg(0).getAtom().toString(), me.getarg(1).getatom().tostring(), me.getarg(2).getatom().tostring(), "0"); ]](X,Y,L)), line(10,10,30,10),line(30,10,30,30),line(10,10,10,30),line(10,30,30,30), atom(30,30,a) A.2 3 [[/*inline_define*/ import java.util.*; import javax.swing.*; import javax.swing.uimanager; import java.awt.*; import java.awt.event.*; class Sample { public static Control control = new Control(); class Control { Object[] objects; int objectid; 41
public static Bound bound; public Control(){ objects = new Object[100]; objectid = 0; addpanel(); bound = new Bound(240,200); public String addpanel(){ LMNtalpanel g = new LMNtalpanel(); Frame lmntalframe = new LMNtalframe(g); objects[objectid] = g; objectid++; lmntalframe.show(); return Integer.toString(objectid-1); n){ public void addline(string x1,string x2,string y1,string y2,string Line line = new Line(Integer.parseInt(x1),Integer.parseInt(x2), Integer.parseInt(y1),Integer.parseInt(y2)); ((LMNtalpanel)objects[Integer.parseInt(n)]).addDraw(line); ((LMNtalpanel)objects[Integer.parseInt(n)]).repaint(); public void addatom(string x,string y,string s,string n){ Atomm atom = new Atomm(Integer.parseInt(x),Integer.parseInt(y),s); ((LMNtalpanel)objects[Integer.parseInt(n)]).addDraw(atom); ((LMNtalpanel)objects[Integer.parseInt(n)]).repaint(); public String addbutton(string a,string b){ JButton button = new JButton(a); ((LMNtalpanel)objects[Integer.parseInt(b)]).add(button); ((LMNtalpanel)objects[Integer.parseInt(b)]).repaint(); objects[objectid] = button; objectid++; return Integer.toString(objectid-1); public void addlistener(string id,abstractmembrane mem){ 42
class LMNtalframe extends JFrame{ LMNtalpanel g; public LMNtalframe(LMNtalpanel g1){ settitle("lmntal"); setsize(240,200); g = g1; addwindowlistener(new WindowAdapter(){ public void windowclosing(windowevent E){ System.exit(0); ); Container contentpane = getcontentpane(); contentpane.add(g); class LMNtalpanel extends JPanel{ Draw ldraw,cdraw; public LMNtalpanel(){ public void paintcomponent(graphics g){ cdraw = ldraw; while(cdraw!= null){ cdraw.draw(g); cdraw = cdraw.ndraw; public void adddraw(draw draw){ draw.ndraw = ldraw; ldraw = draw; repaint(); public void resetdraw(){ ldraw = null; 43
class ButtonListener implements ActionListener{ AbstractMembrane mem; JButton button; String label; public ButtonListener(JButton button1,abstractmembrane mem1){ button = button1; label = button.gettext(); mem = mem1; button.addactionlistener(this); public void actionperformed(actionevent evt){ Functor f1 = new Functor("buttonevent",1); Functor f2 = new Functor(label,1); Atom a = mem.newatom(f1); Atom b = mem.newatom(f2); Link l1 = new Link(a,0); Link l2 = new Link(b,0); a.args[0] = l2; b.args[0] = l1; class Draw{ Draw ndraw; public void draw(graphics g){ class Line extends Draw{ int x1,x2,y1,y2; public Line(int xx1,int xx2,int yy1,int yy2){ x1 = xx1;x2 = xx2;y1 = yy1;y2 = yy2; public void draw(graphics g){ g.drawline(x1,x2,y1,y2); class Atomm extends Draw{ int x,y; 44
String s; public Atomm(int xx,int yy,string ss){ x = xx;y = yy;s = ss; public void draw(graphics g){ g.setcolor(color.black); g.filloval(x,y,30,30); g.setcolor(color.blue); g.filloval(x+2,y+2,26,26); g.setcolor(color.black); g.drawstring(s,x+10,y+18); class Bound{ int x1,y1; boolean xb,yb; public Bound(int xx,int yy){ x1 = xx; y1 = yy; public String[] next(string x2,string y2){ int x = Integer.parseInt(x2); int y = Integer.parseInt(y2); if(!xb){ x = x+5; if(x>x1)xb = true; else{ x = x-5; if(x<0)xb = false; if(!yb){ y = y+5; if(y>y1)yb = true; else{ y = y-5; if(y<0)yb = false; String[] s = new String[2]; s[0] = Integer.toString(x); s[1] = Integer.toString(y); return s; 45
]], (atom(x,y,l):-[[/*inline*/ Sample.control.addAtom(me.getArg(0).getAtom().toString(), me.getarg(1).getatom().tostring(), me.getarg(2).getatom().tostring(), "0"); ]](X,Y,L)), (a(x,y):-[[/*inline*/string[] ss = Control.bound.next(me.nth(0),me.nth(1)); me.getarg(0).getatom().changename(ss[0]); me.getarg(1).getatom().changename(ss[1]); me.changename("az"); ]](X,Y)), (az(x,y):-[[/*inline*/sample.control.objects[0].resetdraw(); System.out.println("az"); Sample.control.addAtom(me.getArg(0).getAtom().toString(), me.getarg(1).getatom().tostring(), "1","0"); me.changename("a"); Thread.sleep(100); ]](X,Y)), a(10,10) 46