48 Saat İçinde Kendinize Bir Şema Yazın üzerinde çalışıyorum (yaklaşık 85 saate kadar varım) ve Değişkenler ve Atamalar Ekleme kısmına geldim . Bu bölümde büyük bir kavramsal sıçrama var ve keşke doğrudan nihai çözüme atlamak yerine iki adımda iyi bir yeniden düzenleme ile yapılsaydı. Her neyse ...
Ben aynı amaca hizmet görünmektedir farklı sınıfların bir dizi kayıp kazanılmış ettik: State
, ST
, IORef
, ve MVar
. İlk üçü metinde belirtilirken, sonuncusu ilk üç hakkındaki birçok StackOverflow sorusunun tercih edilen cevabı gibi görünüyor. Hepsi ardışık çağrılar arasında bir durum taşıyor gibi görünüyor.
Bunların her biri nedir ve birbirlerinden nasıl farklıdırlar?
Özellikle bu cümleler bir anlam ifade etmiyor:
Bunun yerine, Haskell'in bizim için toplam durumu yönetmesine izin veren durum dizileri adı verilen bir özellik kullanıyoruz . Bu, değişkenleri almak veya ayarlamak için işlevleri kullanarak, başka herhangi bir programlama dilinde olduğu gibi değiştirilebilir değişkenleri ele almamızı sağlar.
ve
IORef modülü , IO monad içinde durum bilgisi olan değişkenleri kullanmanıza izin verir .
Bütün bunlar çizgiyi type ENV = IORef [(String, IORef LispVal)]
kafa karıştırıcı hale getiriyor - neden ikincisi IORef
? Onun type ENV = State [(String, LispVal)]
yerine yazarsam ne bozulur?