Aunque Scheme es impuro porque permite la asignación destructiva, usarlo al estilo de la programación funcional pura evita variables globales y sufrir de "efectos secundarios", haciéndolo más seguro en presencia de procesos concurrentes (thread-safe), amén de facilitar considerablemente la verificación de programas, al menos en comparación con el estilo imperativo.