1

次の定義を検討してください。ラケットを使用しています。

(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

4

1 に答える 1