2015-11-02 8 views
11

इस कार्यक्रम पर विचार करें:क्यों डीबग.लॉग एल्म में उल्टा क्रम में प्रिंट करता है?

three: 3 
two: 2 
one: 1 

क्यों क्रम उलट है:

import Graphics.Element exposing (..) 
import Debug 


main : Element 
main = 
    let 
    one = Debug.log "one" 1 
    two = Debug.log "two" 2 
    three = Debug.log "three" 3 
    in 
    show "Hello" 

यह ब्राउज़र की सांत्वना के लिए निम्न बाहर प्रिंट?

+2

एक चलो खंड निर्देशों की एक सूची नहीं है लेकिन घोषणाओं का एक सेट है, संकलक उनके "निष्पादन आदेश" को निर्धारित करने के लिए स्वतंत्र है। आम तौर पर, जब प्रोग्रामिंग कार्यात्मक रूप से, आपको आम तौर पर निष्पादन आदेश से परेशान नहीं होना पड़ता है लेकिन अवधारणाओं और डेटा के संबंध में परेशानी नहीं होती है। – thSoft

उत्तर

27
main = 
    let 
    one = Debug.log "one" 1 
    two = Debug.log "two" 2 
    three = Debug.log "three" 3 
    in 
    show "Hello" 

वास्तव में करने के लिए

var main = function() { 
    var three = A2($Debug.log, 
    "three", 
    3); 
    var two = A2($Debug.log, 
    "two", 
    2); 
    var one = A2($Debug.log, 
    "one", 
    1); 
    return $Graphics$Element.show("Hello"); 
}(); 

सूचना क्रम फ़्लिप किया जा रहा है कि कैसे नीचे संकलित हो जाता है। हम एक और मूल्य है, जिसमें कुछ और पर निर्भर है परिचय तो बंधन है, निम्नलिखित बजाय होता है:

main = 
    let 
    one = Debug.log "one" 1 
    two = Debug.log "two" 2 
    three = Debug.log "three" 3 
    four = Debug.log "four" three + one 
    in 
    show "Hello" 

में

var main = function() { 
    var three = A2($Debug.log, 
    "three", 
    3); 
    var two = A2($Debug.log, 
    "two", 
    2); 
    var one = A2($Debug.log, 
    "one", 
    1); 
    var four = A2($Debug.log, 
    "four", 
    three) + one; 
    return $Graphics$Element.show("Hello"); 
}(); 

लंबी और यह की कमी इसलिए है कि मूल्यों जो 'नहीं कर रहे है बदल जाता है एक ही दायरे में किसी अन्य मूल्य पर निर्भर टी संसाधित नीचे-नीचे मिलता है। जब एक मूल्य एक ही दायरे के भीतर किसी अन्य मूल्य पर निर्भर करता है, तो इसे अलग से संभाला जाता है और नीचे रखा जाता है।

यह एक कार्यान्वयन विस्तार है।

+4

"ऐसा क्यों होता है" के लिए एक उत्कृष्ट उत्तर। जवाब देने के लिए "मुझे क्यों परवाह करना चाहिए": नहीं। यह एक अशुद्ध कार्य है; यह नियम तोड़ता है। – mgold

संबंधित मुद्दे