問題タブ [continuation-passing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - スプレーのディレクティブは継続にどのように対応していますか?
スプレーのディレクティブが継続渡しスタイル (CPS)にどのように対応するかわかりません。
より具体的には、継続は(Haskell では) ですが、スプレーディレクティブ( whereの型を持つ) を使用(a -> r) -> r
すると、この型 ( ) がどこにあるのかわかりません。(a -> r) -> r
Route->Route
type Route = RequestContext => Unit
どちらも似ていませんがRoute->Route
、 ディレクティブはCPSとどのように関連していますか?type Route = RequestContext => Unit
(a -> r) -> r
誰かがスプレーのディレクティブがスタイルを渡す継続にどのように対応するかを示すことができますか?
scheme - コレクタ関数はSchemeでどのように機能しますか?
私は、Scheme でのコレクター関数の使用法を理解するのに苦労しています。私は本「The Little Schemer」(Daniel P. Friedman と Matthias Felleisen 著) を使用しています。いくつかの説明を含む包括的な例は、私を大いに助けてくれます。コレクター関数を使用する関数の例は、次のスニペットです。
...呼び出しの例を使用して(identity '(a b c) self)
、 being とself-function
beingを呼び出します(define self (lambda (x) x))
。このidentity
関数は指定された list を返すl
ため、指定された呼び出しの出力は になります(a b c)
。使用されている正確な言語は、R5RS レガシー言語です。
javascript - この継続渡しスタイルを理解する
関数ファクトは、継続渡しスタイルで階乗を見つけるために定義されています。
と呼ばれ、
ここでブレークポイントを使用した後、この関数を呼び出した後、プログラムが次のように実行されることがわかりました
n = 4、事実 (4、外側)、その後
n = 4、ファクト (3、インナー (t0))、その後
n = 3、ファクト (2、インナー (t0))、その後
n = 2、事実(1、内側(t0))、そして
私の楽しみ(1)
この後、myFun(1) から 1 の値がどのように t0 に渡されるのか理解できません。
f# - F# で codata の例を使用してこの継続渡しを行う方法はありますか?
'a
コンパイル時に解決できないというエラーメッセージは、私には明らかです。上記の作業を行うことが可能かどうかという質問に対する答えは、関数をデータ型に直接追加することを除けば、いいえであると推測しています。しかし、インターフェイスを使用したり、ジェネリック パラメーターを完全に削除したりすることもできます。
編集:マークの返信は実際に私が尋ねたことを行いますが、適切に説明しなかったので質問を拡張させてください. 私がやろうとしているのは、上記の手法を使用して、この投稿で行われたことを模倣することです。これの動機は、インライン化された関数は構成可能性が低いため、回避することです。一般的な引数を特殊化せずにラムダとして渡すことはできません。
ジェネリック引数を持つユニオン型をクロージャーに渡すことで回避できるかもしれないと思っていましたが...
この最後の行で型エラーが発生します。これを回避する方法はありますか?ただし、構成可能性に制限があるため、関数をインライン化しないことをお勧めします。