On 14 Nov 2012, at 11:31, Alexei Matveev wrote: > I see interface of scm_apply_1() and scm_apply() are the same > and dont get the difference [1].
File libguile/eval.c in the distribution gives: /* Apply a function to a list of arguments. This function is exported to the Scheme level as taking two required arguments and a tail argument, as if it were: (lambda (proc arg1 . args) ...) Thus, if you just have a list of arguments to pass to a procedure, pass the list as ARG1, and '() for ARGS. If you have some fixed args, pass the first as ARG1, then cons any remaining fixed args onto the front of your argument list, and pass that as ARGS. */ Then scm_apply_1() does the first: SCM scm_apply_1 (SCM proc, SCM arg1, SCM args) { return scm_apply (proc, scm_cons (arg1, args), SCM_EOL); } Hans