私はこれを取得します
> (myfunction number? '(18 16 2015 2))
4
> (a-continuation 2014)
2018
しかし、この「私の知る限り」の説明はまだ機能するはずです。
(私は、継続がその引数に 1 を追加することを期待していました。私は間違っていたので、これも自分自身に説明しようとしています。)
継続部分を除くとmyfunction
、述語がいくつの要素を保持しているかをカウントする関数ですwhat?
。
REPL/interaction ウィンドウで少し遊んでみると、
> (myfunction number? '(1))
1
> (a-continuation 1)
2
> (a-continuation 2)
3
> (myfunction number? '(1 2 3 4 5 6 7 8 9 10))
10
> (a-continuation 1)
11
> (a-continuation 2)
12
> (a-continuation 3)
13
> (myfunction even? '(1 2 3 4 5 6 7 8 9 10))
5
> (a-continuation 1)
6
> (a-continuation 2)
7
> (a-continuation 3)
8
このパターンから、継続がmyfunction
見つかった要素の数をその引数に追加することが推測できます。
これがなぜそうであるかについての私の説明です:
それぞれcall/cc
を、キャプチャされた継続を呼び出すことによって後で埋めることができる「穴」と見なす場合、最初のものは
(+ 1 <hole>)
二番目
(+ 1 (+ 1 <hole>))
など、述語が成立するたびに 1 つずつ追加の「チェーン」を作成します。
(つまり、最も内側の呼び出しだけでなく、継続が継続するのを「待っている」再帰全体をキャプチャします。)
そう
(myfunction number? '(18 16 2015 2))
のように見えるものを作成します
(+ 1 (+ 1 (+ 1 (+ 1 <hole>))))
継続を呼び出すと、
(a-continuation 2014)
あなたが評価する
(+ 1 (+ 1 (+ 1 (+ 1 2014))))
もちろん2018年です。
(免責事項:これは完全に間違っている可能性があります。 )