From d8388032e6e749f7cab7a18d840bc6462826dccc Mon Sep 17 00:00:00 2001 From: Ramakrishnan Muthukrishnan <vu3rdd@gmail.com> Date: Sun, 27 May 2012 21:55:57 +0530 Subject: [PATCH] Better explanation of the unless procesure if it is not defined in a lazy way. --- src/sicp/ex4_25.rkt | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/sicp/ex4_25.rkt b/src/sicp/ex4_25.rkt index 20c4136..7a01051 100644 --- a/src/sicp/ex4_25.rkt +++ b/src/sicp/ex4_25.rkt @@ -2,9 +2,21 @@ #| -The call (factorial 5) will never call 'unless' and will be recursively call 'factorial' for ever. +The call (factorial 5) will never call 'unless' and will be recursively call 'factorial' for ever. 'n' goes +negative and the factorial won't notice it, as it will never get to evaluate the function body of `unless'. It will work in a normal order language because none of the arguments of 'unless' are evaluated until they are used inside. +#lang lazy +(define (unless predicate if-exp else-exp) + (if (not predicate) + if-exp + else-exp)) + +(define (factorial n) + (unless (= n 1) + (* n (factorial (- n 1))) + 1)) + |# \ No newline at end of file -- 2.45.2