add ch1 ex5
This commit is contained in:
parent
036be3e985
commit
f968bc59af
1 changed files with 21 additions and 1 deletions
|
@ -1,3 +1,23 @@
|
|||
#lang sicp
|
||||
|
||||
(+ 5 5)
|
||||
;Ben Bitdiddle has invented a test to determine whether the interpreter he is faced with is using applicative-order evaluation or normal-order evaluation. He defines the following two procedures:
|
||||
;(define (p) (p))
|
||||
;(define (test x y)
|
||||
;(if (= x 0) 0 y))
|
||||
;Then he evaluates the expression (test 0 (p))
|
||||
;What behavior will Ben observe with an interpreter that uses applicative-order evaluation? What behavior will he observe with an interpreter that uses normal-order evaluation? Explain your answer.
|
||||
;(Assume that the evaluation rule for the special form if is the same whether the interpreter is using normal or applicative order: The predicate expression is evaluated first, and the result determines whether to evaluate the consequent or the alternative expression.)
|
||||
|
||||
;--------------------------------------------------------------------------------------------------------------------------
|
||||
;Applicative-order evaluation --> evaluates the arguments of a function before applying the function itself.
|
||||
;Normal-order evaluation --> evaluates arguments only when they are needed (delay evaluation agrument until they are needed)
|
||||
|
||||
|
||||
(define (p) (p))
|
||||
(define (test x y)
|
||||
(if (= x 0) 0 y)
|
||||
)
|
||||
|
||||
(test 0 3) ;if x = 0 then return x but if it is not then return y. So that, it is doing what you are asking for --> return x which is 0
|
||||
(test 1 3) ;if x != 0 then return y --> return 3
|
||||
(test 0 (p)) ;nothing happened// not evaluated yet
|
Loading…
Add table
Reference in a new issue