... राज्य को पहली जगह कैसे अद्यतन करता है? ऐसा लगता है कि कुछ भी नहीं कर रहा है ...
आह, अब मैं आपका प्रश्न समझता हूं। आप सोच रहे हैं कि put
(और get
) काम, है ना?
var s; // mutable state
function get() { return s; }
function put(x) { s = x; }
function tick() {
var n = get();
put(n + 1);
return n;
}
मुझे आशा है कि यह दिखाता है कि, जबकि n
परिवर्तन नहीं होता है, आंतरिक स्थिति अभी भी अपडेट कर दिया जाएगा:
हो सकता है कि जावास्क्रिप्ट में एक उदाहरण (वास्तविक परिवर्तनशील राज्य के साथ एक भाषा) में मदद मिलेगी। यदि आप दो बार tick()
निष्पादित करते हैं, तो राज्य को दो बार बढ़ाया जाएगा।
वापस हास्केल करने के लिए, यहाँ State
इकाई के के (प्रासंगिक भागों) पूरी परिभाषा है:
newtype State s a = State { runState :: s -> (a, s) }
instance Monad (State s) where
return a = State $ \s -> (a, s)
m >>= k = State $ \s -> let
(a, r) = runState m s
in runState (k a) r
get = State $ \s -> (s, s)
put s = State $ \_ -> ((), s)
अब मैन्युअल >>=
, return
, get
इनलाइन करने से आगे भी अपने tick
उदाहरण का विस्तार करने के लिए प्रयास करें और put
। उम्मीद है कि यह और स्पष्ट होगा कि राज्य कैसे काम करता है।
स्रोत
2009-11-25 12:14:56
मैंने आपको पूरे 5 सेकंड तक हराया! यह अजीब बात है कि मैं अपने आप के बारे में चीजों को समझने के बाद/मैंने प्रश्न पूछे हैं। मैं प्रतिक्रियाओं की सराहना करता हूं! :) – Rayne