add ch1 ex5

This commit is contained in:
Juthatip McDevitt 2025-07-27 11:15:45 -05:00
parent 036be3e985
commit f968bc59af

View file

@ -1,3 +1,23 @@
#lang sicp #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