Exercise 4.26. Ben Bitdiddle and Alyssa P. Hacker disagree over the importance of lazy evaluation for implementing things such as unless. Ben points out that it's possible to implement unless in applicative order as a special form. Alyssa counters that, if one did that, unless would be merely syntax, not a procedure that could be used in conjunction with higher-order procedures. Fill in the details on both sides of the argument. Show how to implement unless as a derived expression (like cond or let), and give an example of a situation where it might be useful to have unless available as a procedure, rather than as a special form. ———————————————————————————————————————————————————————————————————————— Unless can be trivially implemented as a derived expression by simply reversing the arguments and using if. The earlier stream programming simulation exercises provide an example where unless as a procedure would be convenient. If a program produces three streams, one of which is a binary signal that determines which of the other two streams will be output, this could be implemented as (stream-map unless a b c), if unless were an ordinary procedure. This could still be implemented using a lambda in ordinary Scheme: (stream-map (lambda (a b c) (unless a b c)) a b c). If the streams are lazy, then the version using lambda does more work, and may not always give the same result (unless the language is lazy "all the way down").