次の定義を検討してください。ラケットを使用しています。
(define fact/k
(lambda (n k)
(cond
((zero? n) (call/cc (lambda (f) (k f))))
(else (* n (fact/k (sub1 n) k))))))
(define five (call/cc (lambda (k) (fact/k 5 k))))
次のように呼び出した場合
(5 1)
それは何も与えません。それを行った後、5 を直接呼び出すと 120 になります。
$5
120
しかし、再試行すると (5 1)、120 は手順ではないと言って失敗します。
(zero? n) ベース ケースでキャプチャされた継続に対する最初の 5 つのポイントを理解しています。しかし、上記の動作をどのように説明できるかわかりません。
別のパラメーターで別の実行
$ (5 4)
5ドル
480