ฉันกำลังทำงานผ่านเขียนเองโครงการใน 48 ชั่วโมง (ฉันถึงประมาณ 85hrs) และผมเคยไปเป็นส่วนหนึ่งเกี่ยวกับการเพิ่มและการกำหนดตัวแปร ในบทนี้มีการกระโดดข้ามแนวความคิดครั้งใหญ่และฉันหวังว่ามันจะทำในสองขั้นตอนโดยมีการปรับโครงสร้างที่ดีระหว่างนั้นแทนที่จะกระโดดตรงไปที่ทางออกสุดท้าย อย่างไรก็ตาม…
ผมเคยหายไปด้วยจำนวนของชั้นเรียนที่แตกต่างกันที่ดูเหมือนจะตอบสนองวัตถุประสงค์เดียวกัน: State
, ST
, และIORef
MVar
สามข้อแรกถูกกล่าวถึงในข้อความในขณะที่คำถามสุดท้ายน่าจะเป็นคำตอบที่ได้รับความนิยมสำหรับคำถาม StackOverflow จำนวนมากเกี่ยวกับสามข้อแรก พวกเขาทั้งหมดดูเหมือนจะมีสถานะระหว่างการวิงวอนติดต่อกัน
สิ่งเหล่านี้คืออะไรและแตกต่างกันอย่างไร?
โดยเฉพาะประโยคเหล่านี้ไม่สมเหตุสมผล:
แต่เราใช้คุณลักษณะที่เรียกว่าเธรดสถานะโดยให้ Haskell จัดการสถานะรวมให้เรา สิ่งนี้ช่วยให้เราปฏิบัติกับตัวแปรที่เปลี่ยนแปลงได้เหมือนกับที่เราทำในภาษาโปรแกรมอื่น ๆ โดยใช้ฟังก์ชันเพื่อรับหรือตั้งค่าตัวแปร
และ
โมดูล IORef ช่วยให้คุณสามารถใช้ตัวแปร stateful ภายใน monad
ทั้งหมดนี้ทำให้สายtype ENV = IORef [(String, IORef LispVal)]
สับสน - ทำไมต้องเป็นครั้งที่สองIORef
? อะไรจะพังถ้าฉันจะเขียนtype ENV = State [(String, LispVal)]
แทน