DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> AJAX入門 >> AJAX詳解 >> sicp習題試解 (1.5)
sicp習題試解 (1.5)
編輯:AJAX詳解     
; ======================================================================
;
;          Structure and Interpretation of Computer Programs
;                  (trial answer to excercises)
;
;                  計算機程序的構造和解釋(習題試解)
;
;                                             created: code17 02/24/05
;                                             modifIEd:
; (保持內容完整不變前提下,可以任意轉載)
; ======================================================================

;; SICP No.1.5
;; 本題為理解題

;; (define (p) (p))
;;
;; 相當於定義了一個無限遞歸函數p, p作為operator,以0個Operant為參數。根據定義
;; 可知,(p)會被evalute為(p), 而(p)再evaluate為(p).... 無窮盡。
;; p自身作為一個procedure是沒有問題的,我們允許定義遞歸函數,但當p作用於Operant
;; 時,(p)是有問題的,因為它的evaluation是無限遞歸的。所以,可知,在scheme中,
;; ()的作用決不僅是優先級的控制工具,而是不可忽略的語義控制工具。p 是一個函數,
;; 而(p)是函數p作用於其參數(0個)後的返回值。
;;
;; Test-it:
;; Welcome to MzScheme version 209, Copyright (c) 2004 PLT Scheme, Inc.
;; > (define (p) (p))
;; > p
;; #<procedure:p>
;; > (p)
;; 交互解釋器在此失去反應

;; (define (test x y)
;;  (if (= x 0)
;;      0
;;      y))
;; (test 0 (p))
;;
;; 因此,測試函數在不同原則的evaluation順序下的結果就很容易推測了。在
;; normal-order evaluation原則下,只有當一個表達式的值被需要的時候才
;; evaluation, (test 0 (p)) 將被evaluate 為 (if (= 0 0) 0 (p)),
;; 因為判斷條件成立,最後表達式evaluate為0, 不需要計算(p)的值,從而
;; 避免了無限遞歸的發生; 而在applicative-order的原則下, 所有的
;; Operants必須在代入前evaluate,因此(p)的計算無法避免,結果是無限遞歸。
;;
;; Test-it:
;; > (test 0 (p))
;; 交互解釋器在此失去反應, 因為scheme使用applicative-order evaluation

;; 如果我們定義
;; (define (p) p)
;; 則是另外一個意思,它定義了一個有0個operant的函數p, 當它作用於其Operant
;; 時,返回置為其自身,這樣我們有(p)被evaluate為p,那麼((p))被evaluate為
;; (p) 然後再evaluate為p,那麼(((...(((p)))...)))
;;
;; Test-it:
;; > (define (p) p)
;; > p
;; #<procedure:p>
;; > (p)
;; #<procedure:p>
;; > ((p))
;; #<procedure:p>
;; > (((((((((((((((((((((((p)))))))))))))))))))))))
;; #<procedure:p>
XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved