Rest allows you to create and use function with variably sized parameters. It is very useful in passing the params of one function to another. Insead of counting how many params the function has and adding them all in a loop, rest will push them all at once for you.
(procedure (SomeProcedure aFixedParam params)
(SomeOtherProcedure(rest params)) /* this would be call SomeOtherProcedure starting with params */
// Then in another function, you could call it like this...
(SomeProcedure(someParam anotherParam oneMoreParam))
See Also: Variables