Hi, Dan McMahill <[EMAIL PROTECTED]> writes:
> I can do something like > > SCM scm_myfn(SCM flags) > { > > myfn (scm_num2int (flags, SCM_ARG1, "myfn")); > > return SCM_BOOLEAN_T; > > } > > but I'm not sure of the best way to define the flags in scheme. Or > maybe this is not "the scheme way". What you describe above is doable and is an approach sometimes taken. See for instance the POSIX functions in Guile, e.g., `popen'. Personally, I prefer to pass a list of symbols rather than a single number in such situations. This might require some more work if you need to convert those flags to a C or'ed integer, but not so much because (i) symbols can be compared with `eq' which is fast, (ii) the list of flags may usually be small, and (iii) the number of values that can be taken by the flags is small as well. SCM_DEFINE (scm_func, "func", 0, 0, 1, (SCM flags), "My function takes any number of symbols.") #define FUNC_NAME "func" { int c_flags; for (c_flags = 0; scm_is_pair (flags); flags = SCM_CDR (flags)) { SCM f = SCM_CAR (flags); if (scm_is_eq (f, my_first_flag_sym)) c_flags |= MY_FIRST_FLAG; else if (scm_is_eq (f, my_second_flag_sym)) c_flags |= MY_SECOND_FLAG; else scm_wrong_type_arg (FUNC_NAME, 1, f); } /* ... */ } #undef FUNC_NAME But this is debatable and it also depends on the context. Thanks, Ludovic. _______________________________________________ Guile-user mailing list Guile-user@gnu.org http://lists.gnu.org/mailman/listinfo/guile-user