SeijiWiki
SLIM callback´ØÏ¢ ¥á¥â
¤ò¥Æ¥ó¥×¥ì¡¼¥È¤Ë¤·¤ÆºîÀ®
³«»Ï¹Ô:
[[¸¦µæÆü»ï¤È¤¦¤á¤]]
-¤¦¤¨¤Á¤ç¤³¤¬¤Þ¤È¤á¤¿¥Ú¡¼¥¸¤¬¤¢¤Ã¤¿¤±¤É¡¢¼«Ê¬ÍѤ˥á¥â
#contents
* ´ØÏ¢¥½¡¼¥¹¥Õ¥¡¥¤¥ë¡¦¥Õ¥©¥ë¥À [#ea9796b7]
-slim²¼¤Î
--src/ext/init_exts.c
--src/Makefile.am
* integer.cÆâ¤Ë¿·¤·¤¤´Ø¿ô¤òÄɲà [#w562fa44]
**integer_test¤òºîÀ®¡Ê½èÍýÆâÍƤÏinteger_rand¤Î¥³¥Ô¡¼¡Ë [#...
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_GE...
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_str...
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_GE...
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¤Ë½é´ü²½´Ø¿ô¤òÄɲà [#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¤òÄɲà [#t0b4254a]
ext/init_exts.c ext/integer.c ext/atomic.c ext/nlmem.c e...
ext/nd_conf.c ext/graph.c \ <-------------------ext/·Ï¤Î...
**¥³¥ó¥Ñ¥¤¥ë [#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_GE...
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_GE...
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_GE...
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);
}
½ªÎ»¹Ô:
[[¸¦µæÆü»ï¤È¤¦¤á¤]]
-¤¦¤¨¤Á¤ç¤³¤¬¤Þ¤È¤á¤¿¥Ú¡¼¥¸¤¬¤¢¤Ã¤¿¤±¤É¡¢¼«Ê¬ÍѤ˥á¥â
#contents
* ´ØÏ¢¥½¡¼¥¹¥Õ¥¡¥¤¥ë¡¦¥Õ¥©¥ë¥À [#ea9796b7]
-slim²¼¤Î
--src/ext/init_exts.c
--src/Makefile.am
* integer.cÆâ¤Ë¿·¤·¤¤´Ø¿ô¤òÄɲà [#w562fa44]
**integer_test¤òºîÀ®¡Ê½èÍýÆâÍƤÏinteger_rand¤Î¥³¥Ô¡¼¡Ë [#...
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_GE...
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_str...
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_GE...
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¤Ë½é´ü²½´Ø¿ô¤òÄɲà [#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¤òÄɲà [#t0b4254a]
ext/init_exts.c ext/integer.c ext/atomic.c ext/nlmem.c e...
ext/nd_conf.c ext/graph.c \ <-------------------ext/·Ï¤Î...
**¥³¥ó¥Ñ¥¤¥ë [#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_GE...
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_GE...
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_GE...
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);
}
¥Ú¡¼¥¸Ì¾: