そういえば下の手続きは繰り返しで書けるのか。 ScmObj Scm_VaList(va_list elts) { ScmObj ret; ret = va_arg(elts, ScmObj); if (SCM_NULLP(ret)) { va_end(elts); return ret; } return Scm_Cons(ret, Scm_VaList(elts)); }ええと、SCM_APPEND1 とか使えばなんとかなりそげ #define VA_NEXT va_arg(elts, ScmObj) ScmObj Scm_VaList(va_list elts) { ScmObj tmp, ret = SCM_NIL, end; for(tmp = VA_NEXT; !SCM_NULLP(tmp); tmp = VA_NEXT) { SCM_APPEND1(ret, end, tmp)