در erlang هر متغییر فقط یک بار می تواند مقداردهی شود، عملگر = در بار اول نقش binding را بازی می کند و متغییر شما را به مقدار expression محاسبه شده سمت راست عملگر = bind می کند ولی در دفعات بعدی نقش عملگر pattern matching را بازی می کند و توقع دارد مقدار سمت راست و چپ عملگر = برابر باشد.
در مورد بالا حتما در دستورات قبلی متغییر X به یک مقدار (غیر از عدد 3) bind شده است و حالا وقتی می خواهید یک مقدار جدید به آن بدهید این خطا را می دهد.