SICP 問題 4.53
permanent-set!でpairsに成功する組み合わせを束縛するが,
(amb)で必ず失敗するので全ての成功する組み合わせをpairsに束縛する.
失敗継続が呼ばれ,if-failの第二引数のpairsが評価される.
この時permanent-set!で束縛されているのでバックトラックで戻らず,今まで代入した成功パターンすべてが表示される.
;;; Amb-Eval input: (let ((pairs '())) (if-fail (let ((p (prime-sum-pair '(1 3 5 8) '(20 35 110)))) (permanent-set! pairs (cons p pairs)) (amb)) pairs)) ;;; Starting a new problem ;;; Amb-Eval value: ;;; Amb-Eval value: ((8 35) (3 110) (3 20))