2012-09-11 15 views
5

प्रश्न What's the explanation for Exercise 1.6 in SICP? के अलावा। तो डॉ रैकेट (आर 5 आरएस) सीमित समय में "अगर" के साथ वर्ग-इटर फ़ंक्शन का मूल्यांकन करता है, स्पष्ट रूप से सामान्य ऑर्डर मूल्यांकन दिखाता है। लेकिन अगर मैं व्यायाम 1,5एसआईसीपी व्यायाम 1.5 और 1.6

(define (p) (p)) 
(define (test x y) 
    (if (= x 0) 
     0 
     y)) 
(test 0 (p)) 

से उदाहरण का उपयोग यह अनंत लूप में चला जाता है, मुझे लगता है कि "अगर" अनुप्रयोगी क्रम मूल्यांकन का उपयोग करता है बना रही है। तो मैं गलत कहां हूं?

उत्तर

8

क्या होता है कि if कभी नहीं पहुँच जाता है: ठीक मूल्यांकन के अनुप्रयोगी आदेश की वजह से test को दोनों बहस से पहले वास्तव में बुला testका मूल्यांकन करने के लिए, और अभिव्यक्ति (p) इच्छा पाश हमेशा के लिए।

यदि सामान्य प्रक्रिया का उपयोग करके उसी प्रक्रिया का मूल्यांकन किया गया तो यह शून्य लौटाएगा, यही वह उदाहरण है जो इस उदाहरण को प्रदर्शित करने की कोशिश कर रहा है।

3

पहली पंक्ति में एक #lang योजना निर्देश के साथ DrRacket का उपयोग करना, मैं इसे इस तरह से कोशिश की ...

;say "hi" to Ben Bitdiddle 

(define (q) (display "Hello?...Ben?) 

(define (test x y) 
(if (= x 0) 
    0 
    y)) 

तब मैं मूल्यांकन के माध्यम से कदम DrRacket 5.3 डिबग उपकरण का उपयोग।
यह स्पष्ट रूप से आवेदक-आदेश मूल्यांकन है।

Eval विंडो शो -> हैलो? ... बेन? 0 cuz DrRacket के बाद "if" दर्ज करने से पहले कॉल (q) का मूल्यांकन करता है।

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