@KarlBielefeldt tarafından belirtildiği gibi, böyle bir soruna işlevsel yaklaşım, sorunu önceki bir durumdan yeni bir durum döndürmek olarak görmektir. Fonksiyonların kendileri herhangi bir bilgi tutmazlar, bu nedenle m durumunu her zaman n durumunu n olarak güncellerler .
Sanırım bu verimsiz olduğunu düşünüyorsunuz çünkü yeni durumu hesaplarken önceki durumun hafızada tutulması gerektiğini varsayıyorsunuz . Tamamen yeni bir durum yazmak veya eskisini yeniden yazmak arasındaki seçimin işlevsel bir dil açısından bir uygulama detayı olduğuna dikkat edin.
Örneğin, bir milyon tamsayı listem var ve onda birini bir birim artırmak istiyorum. Tüm listeyi onuncu konumunda yeni bir numarayla kopyalamak boşa harcanır, haklısınız; ancak bu işlemi dil derleyicisine veya yorumlayıcıya açıklamanın yalnızca kavramsal yoludur. Derleyici veya yorumlayıcı ilk listeyi almakta ve onuncu pozisyonun üzerine yazmakta serbesttir.
İşlemi bu şekilde tanımlamanın avantajı, derleyicinin birçok iş parçacığının aynı listeyi farklı konumlarda güncellemek istediği durum hakkında mantık yürütebilmesidir. İşlem "bu konuma git ve bulduklarının üzerine yaz" olarak tanımlanırsa, üzerine yazmaların çarpışmamasını sağlamaktan sorumlu olan derleyici değil, programcıdır.
Bütün bunlarla birlikte, Haskell'de bile, "devleti tutmak" bir sorun için daha sezgisel bir çözüm olan durumları modellemeye yardımcı olan bir Devlet monad var. Ama aynı zamanda "bulmak bazı sorunları fark lütfen bir veritabanına yazmak gibi, doğal olarak durum bilgisi " var Datomic gibi değişmez çözümler . Bunun bir kavram olduğunu anlayana kadar şaşırtıcı olabilir, ancak bunun gerçekleştirilmesi gerekmez.