ȥå   Խ ʬ Хåå ź ʣ ̾ѹ   ñ측 ǽ   إ   ǽRSS

SLIM callbackϢ

Last-modified: 2010-05-07 () 16:18:32 (5115d)
Top / SLIM callbackϢ

Ȥ᤭

  • 礳ޤȤ᤿ڡäɡʬѤ˥

Ϣե롦ե

  • slim
    • src/ext/init_exts.c
    • src/Makefile.am

integer.c˿ؿɲ

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_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ɲ

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));
}

ѥ

  • slimǥ쥯ȥľ make & make install

ȤäƤߤ

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

̥եäƿؿɲ

ή

  • src/ext/graph.c
  • src/ext/init_exts.c˽ؿɲ
  • src/Makefile.amgraph.cɲ

src/ext/graph.c

/* 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˽ؿɲ

#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.amgraph.cɲ

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

ȤäƤߤ

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

ɡ3ʬޤȤ

/* 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);
}