A primitive procedure is a Scheme-callable procedure that is implemented in C. Primitive procedures are created in MzScheme with the function scheme_make_prim_w_arity, which takes a C function pointer, the name of the primitive, and information about the number of Scheme arguments that it takes; it returns a Scheme procedure value.
The C function implementing the procedure must take two arguments: an integer that specifies the number of arguments passed to the procedure, and an array of Scheme_Object * arguments. The number of arguments passed to the function will be checked using the arity information. (The arity information provided to scheme_make_prim_w_arity is also used for the Scheme arity procedure.) The procedure implementation is not allowed to mutate the input array of arguments, although it may mutate the arguments themselves when appropriate (e.g., a fill in a vector argument).
The function scheme_make_closed_prim_w_arity is similar to scheme_make_prim_w_arity, but it takes an additional void * argument; this argument is passed back to the C function when the closure is invoked. In this way, closure-like data from the C world can be associated with the primitive procedure.