Exercise 4.53. With permanent-set! as described in exercise 4.51 and if-fail as in exercise 4.52, what will be the result of evaluating (let ((pairs '())) (if-fail (let ((p (prime-sum-pair '(1 3 5 8) '(20 35 110)))) (permanent-set! pairs (cons p pairs)) (amb)) pairs)) ———————————————————————————————————————————————————————————————————————— ((8 35) (3 110) (3 20)) First, p is taken from prime-sum-pair, which creates a choice point for the list elements it chose from each list. This result is then consed onto the front of pairs permanently. The expression then immediately fails, which causes the next choices in prime-sum-pair to be tried, leading to all the results being eventually consed onto pairs. Finally there are no more choices remaining in prime-sum-pair, so the entire first expression of the if-fail finally fails. At this point the second expression is returned. So permanent-set!, which creates a persistence across backtracking, and if-fail, which allows an explicit failure continuation to be provided, together give a way to run the computation of an ambiguous expression to its end and then return a value which makes use of all the results.