Call-by-Value Parameters

If a parameter is passed by value, the system evaluates the actual parameter when the procedure is invoked and assigns the value to the formal parameter. Changes made to the value of the formal parameter do not affect the value of the actual parameter. Similarly, any changes made to the value of the actual parameter after procedure invocation do not affect the value of the formal parameter.

An advantage to using call-by-value parameters is that they never result in the accidental creation of a thunk. (Thunks are defined in the discussion of call-by-name parameters that follows.) Another advantage is that they simplify program structure. Because the actual parameter and the formal parameter do not affect each other, new values can be assigned to either without creating unexpected side effects.