Az SML-ben a val deklarációval létrehozott dolgot nem változónak, inkább névnek (name) vagy azonosítónak (identifier) nevezzük, hogy megkülönböztessük az imperatív nyelvek változófogalmától. Az SML-beli név a matematikai változó fogalmának felel meg, ezért szokták változónak (variable) is nevezni, de ez, mint írtam, félrevezető. Ha mindenképpen változónak akarjuk nevezni, nevezzük funkcionális változónak. A funkcionális változó nem frissíthető (szemben az imperatív nyelvek frissíthető változójával), és nem értékadással, hanem a deklaráció által létrehozott kötéssel kap értéket.
A név tehát az SML-ben a deklaráció jobb oldalán álló érték megnevezésére, azonosítására szolgál, azaz az érték egy szinonimája. Az mosml értelmező a nevet a hozzá kötött értékkel együtt egy táblában tárolja; ha a deklarációban egy kifejezést kötünk egy névhez, akkor az mosml a mohó kiértékelésnek megfelelően azonnal kiértékeli a kifejezést, és az eredményül kapott értéket írja be a táblába. Egy név szinonima-volta azt jelenti, hogy valahányszor a név előfordul egy kifejezésben, az értelmező a nevet azonnal lecseréli a hozzá kötött értékre. Mutatóról, hivatkozásról tehát ilyen esetben szó nincs.
Lássuk akkor a példákat arra, hogy mi történik a háttérben! A val v1 = v2 deklaráció hatására az mosml bejegyzi a táblába a v1 nevet és hozzá köti a v2 értékét (nem egy mutatót, nem a v2 nevet, hanem a v2 névhez kötött értéket). Nyilvánvaló, hogy ha a v2-nek nincs értéke, a deklaráció nem értékelhető ki, az mosml hibát jelez. Ha az mosml ezután a val v1 = 4 deklarációt értékeli ki, akkor a táblába a v1 név mellé a 4 értéket írja be, és a továbbiakban a v1-et a 4 szinonimájaként használja. Fontos, hogy a v1 korábbi előfordulásait a változás nem érinti, a v1-et tartalmazó korábbi kifejezésekbe ugyanis a v1 korábbi értéke (azaz a v2 akkori értéke) már ,,beépült''.
Az SML-ben is vannak frissíthető változók, mert az SML nem tisztán funkcionális nyelv. Mivel a Deklaratív programozás tárgy a deklaratív, azaz a logikai és a funkcionális programozási stílussal szeretné ,,megfertőzni'' a hallgatókat, az SML imperatív ficamairól az előadásokon inkább szemérmesen hallgatunk. A kérdésre a választ mégsem akarom elsumákolni, ezért röviden összefoglalom a dolgot. Akinek ez nem elég, az mosml-lel együtt letöltött és az mosml-honlapon is megtalálható General.sig-ben és a Moscow ML Language Overview-ban utánanézhet.
Frissíthető változót az mosml-ben úgy hozhatunk létre, hogy a deklarációban a ref kulcsszóval rögtön azt is megadjuk, hogy az adott névnek mi lesz a kezdőértéke és ebből következően a típusa. Példa: