You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
32 lines
679 B
32 lines
679 B
2 years ago
|
|
||
|
Exercise 4.52: Implement a new construct called
|
||
|
if-fail that permits the user to catch the failure of an expression.
|
||
|
If-fail takes two expressions. It evaluates the first expression as
|
||
|
usual and returns as usual if the evaluation succeeds. If the evaluation
|
||
|
fails, however, the value of the second expression is returned, as in the
|
||
|
following example:
|
||
|
|
||
|
|
||
|
;;; Amb-Eval input:
|
||
|
(if-fail
|
||
|
(let ((x (an-element-of '(1 3 5))))
|
||
|
(require (even? x))
|
||
|
x)
|
||
|
'all-odd)
|
||
|
|
||
|
;;; Starting a new problem
|
||
|
;;; Amb-Eval value:
|
||
|
all-odd
|
||
|
|
||
|
;;; Amb-Eval input:
|
||
|
(if-fail
|
||
|
(let ((x (an-element-of '(1 3 5 8))))
|
||
|
(require (even? x))
|
||
|
x)
|
||
|
'all-odd)
|
||
|
|
||
|
;;; Starting a new problem
|
||
|
;;; Amb-Eval value:
|
||
|
8
|
||
|
|