¥È¥Ã¥×   ÊÔ½¸ º¹Ê¬ ¥Ð¥Ã¥¯¥¢¥Ã¥× źÉÕ Ê£À½ ̾Á°Êѹ¹ ¥ê¥í¡¼¥É   ¿·µ¬ °ìÍ÷ ñ¸ì¸¡º÷ ºÇ½ª¹¹¿·   ¥Ø¥ë¥×   ºÇ½ª¹¹¿·¤ÎRSS

SLIM callback´ØÏ¢ ¥á¥â ¤ÎÊѹ¹ÅÀ

Top / SLIM callback´ØÏ¢ ¥á¥â

[[¸¦µæÆü»ï¤È¤¦¤á¤­]]


-¤¦¤¨¤Á¤ç¤³¤¬¤Þ¤È¤á¤¿¥Ú¡¼¥¸¤¬¤¢¤Ã¤¿¤±¤É¡¢¼«Ê¬ÍѤ˥á¥â

#contents

* ´ØÏ¢¥½¡¼¥¹¥Õ¥¡¥¤¥ë¡¦¥Õ¥©¥ë¥À [#ea9796b7]
-slim²¼¤Î
--src/ext/init_exts.c
--src/Makefile.am

* integer.cÆâ¤Ë¿·¤·¤¤´Ø¿ô¤òÄɲà [#w562fa44]
**integer_test¤òºîÀ®¡Ê½èÍýÆâÍƤÏinteger_rand¤Î¥³¥Ô¡¼¡Ë [#j742dc12]

 void integer_test(ReactCxt rc,
                   LmnMembrane *mem,
                   LmnAtom a0, LmnLinkAttr t0,
                   LmnAtom a1, LmnLinkAttr t1)
 {
   LmnWord n = rand() % a0; 
 
   lmn_mem_newlink(mem,
                   a1, LMN_ATTR_MAKE_LINK(0), LMN_ATTR_GET_VALUE(t1),
                   n, LMN_INT_ATTR, 0);
   lmn_mem_push_atom(mem, n, LMN_INT_ATTR); 
 
   lmn_mem_delete_atom(mem, a0, t0);
 }
**½é´ü²½´Ø¿ôinit_integer()¤Ëinteger_test¤òÄɲà [#c18b5f91]

 void init_integer(void)
 {
   lmn_register_c_fun("integer_set", integer_set, 3);
   lmn_register_c_fun("integer_srand", integer_srand, 1);
   lmn_register_c_fun("integer_rand", integer_rand, 2);
   lmn_register_c_fun("integer_of_string", integer_of_string, 2);
   lmn_register_c_fun("integer_test", integer_test, 2);   <-------¤³¤³
 
   srand((unsigned)time(NULL));
 }

**¥³¥ó¥Ñ¥¤¥ë [#d83c68cc]
-slim¥Ç¥£¥ì¥¯¥È¥êľ²¼¤Ç make & make install

**»È¤Ã¤Æ¤ß¤ë [#d302318f]

 random = H.
 '$callback'('integer_test', 100, H).
 ---->
 random(20).¤ä¤érandom(99).¤ä¤é

* ÊÌ¥Õ¥¡¥¤¥ë¤òºî¤Ã¤Æ¿·¤·¤¤´Ø¿ô¤òÄɲà [#w562fa44]
**ή¤ì [#qece7b38]
-src/ext/graph.c¤òºîÀ®
-src/ext/init_exts.c¤Ë½é´ü²½´Ø¿ô¤òÄɲÃ
-src/Makefile.am¤Ëgraph.c¤òÄɲÃ

**src/ext/graph.c¤òºîÀ® [#m7362a2b]

 /* Random graph generator */
 
 # include "../lmntal_ext.h" 
 
 void graph_rand(ReactCxt rc,
                   LmnMembrane *mem,
                   LmnAtom a0, LmnLinkAttr t0,
                   LmnAtom a1, LmnLinkAttr t1)
 {
   LmnWord n = rand() % a0; 
 
   lmn_mem_newlink(mem,
                   a1, LMN_ATTR_MAKE_LINK(0), LMN_ATTR_GET_VALUE(t1),
                   n, LMN_INT_ATTR, 0);
   lmn_mem_push_atom(mem, n, LMN_INT_ATTR);
 
   lmn_mem_delete_atom(mem, a0, t0);
 }
 
 void init_graph(void)
 {
   lmn_register_c_fun("graph_rand", graph_rand, 2);
 }

-src/ext/init_exts.c¤Ë½é´ü²½´Ø¿ô¤òÄɲÃ
**src/ext/init_exts.c¤Ë½é´ü²½´Ø¿ô¤òÄɲà [#vdabb560]

 #include "lmntal.h"
 
 void init_integer(void);
 void init_nlmem(void);
 void init_atomic(void);
 void init_io(void);
 void init_initial_ruleset(void);
 void init_nd_conf(void);
 void init_graph(void);  <------------¤³¤³¤È
 
 void init_builtin_extensions(void)
 {
   init_integer();
   init_nlmem();
   init_atomic();
   init_io();
   init_initial_ruleset();
   init_nd_conf();
   init_graph();  <------------------¤³¤³
 }

-src/Makefile.am¤Ëgraph.c¤òÄɲÃ
**src/Makefile.am¤Ëgraph.c¤òÄɲà [#t0b4254a]

 ext/init_exts.c ext/integer.c ext/atomic.c ext/nlmem.c ext/io.c ext/initial_ruleset.c \
 ext/nd_conf.c ext/graph.c \ <-------------------ext/·Ï¤Î¥Õ¥¡¥¤¥ë·²ÉÕ¶á¤ËÄɲÃ

-¥³¥ó¥Ñ¥¤¥ë
--slim¥Ç¥£¥ì¥¯¥È¥êľ²¼¤Ç make & make install
**¥³¥ó¥Ñ¥¤¥ë [#z160b3e0]
-slim¥Ç¥£¥ì¥¯¥È¥êľ²¼¤Ç make & make install

-»È¤Ã¤Æ¤ß¤ë
**»È¤Ã¤Æ¤ß¤ë [#j4253ad3]

 random = H.
 '$callback'('graph_rand', 100, H).
 ---->
 random(23).¤ä¤érandom(84).¤ä¤é

***²þÎÉ¡§3°ú¿ôʬ¤Þ¤È¤á¤ÆÍð¿ôÀ¸À® [#ib06d702]

 /* Random graph generator */
 
 # include "../lmntal_ext.h"
 
 /*
  * (N, H1, H2, H3):
  *
  * H* is bound to a random number between 0 and N-1.
  */
 void graph_rand(ReactCxt rc,
                   LmnMembrane *mem,
                   LmnAtom a0, LmnLinkAttr t0,
                   LmnAtom a1, LmnLinkAttr t1,
                   LmnAtom a2, LmnLinkAttr t2,
                   LmnAtom a3, LmnLinkAttr t3)
 {
   LmnWord n1 = rand() % a0;
   LmnWord n2 = rand() % a0;
   LmnWord n3 = rand() % a0; 
 
   lmn_mem_newlink(mem,
                   a1, LMN_ATTR_MAKE_LINK(0), LMN_ATTR_GET_VALUE(t1),
                   n1, LMN_INT_ATTR, 0);
   lmn_mem_push_atom(mem, n1, LMN_INT_ATTR);
 
   lmn_mem_newlink(mem,
                   a2, LMN_ATTR_MAKE_LINK(0), LMN_ATTR_GET_VALUE(t2),
                   n2, LMN_INT_ATTR, 0);
   lmn_mem_push_atom(mem, n2, LMN_INT_ATTR);
 
   lmn_mem_newlink(mem,
                   a3, LMN_ATTR_MAKE_LINK(0), LMN_ATTR_GET_VALUE(t3),
                   n3, LMN_INT_ATTR, 0);
   lmn_mem_push_atom(mem, n3, LMN_INT_ATTR); 
 
   lmn_mem_delete_atom(mem, a0, t0);
 } 
 
 void init_graph(void)
 {
   lmn_register_c_fun("graph_rand", graph_rand, 4);
 }