Bidirectional. The caller passes a value; the procedure can modify it and the caller sees the modification. Use when the caller provides an initial value that the procedure enriches or transforms.