問題タブ [continuation]
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.
python - 長い文字列を優雅に分割する方法
ほら、このサイトで提供されている、私の質問の側面を扱った多くの回答を見てきました。[前述の]回答は通常、基本的すぎて役に立たない既存の例を提供します-少なくとも私にとっては。でもねえ、多分私はそれを過度に複雑にしています。
元の長い行は次のとおりです。
これは、「長い行の継続」エチケットを実装するための私の試みです(私が見つけた2007年のpyconハンドアウトで概説されているようにここ):
私の試みは、(a) パーサーによって正しく解釈されますか、および/または (b) 有益な貢献者によって、より「きれい」または効率的になりますか? ありがとうございました。
haskell - callCC は厳密な関数型言語でどのように実装されていますか?
次の Haskell の関数の例quux
と、継続モナド および の定義を考えてみましょうcallCC
。
私がこの例を理解しているように。do ブロックは次のように考えることができます。
k
そして、 whichの定義から\a -> cont $ \_ -> h a
、上記では\x -> runCont ((\_ -> return 25) x) c
、アンダースコアで無視される引数に渡されていることがわかります。アンダースコア引数は決して使用されないため、最終的にreturn 25
は事実上「無視」されます。そのため、遅延評価から評価されることはありません。
callCC
したがって、この実装は基本的に遅延評価に強く依存していると言えます。callCC
厳密な (非遅延) 関数型言語でこれを行うにはどうすればよいでしょうか?
c# - C# await continuations は新しいスレッドを作成しますか?
質問のとおりです。await
コードを呼び出すだけで新しいスレッドが作成される可能性があるかどうかを知りたいです。
コンソールアプリの実行中だとしましょう。
command-line - Redis コマンドライン (redis-cli) 継続文字とは?
マップフィールドの1つが変更されたときにキー値ストアを更新し、その値が変更されたときに別のキーから値を抽出するredisの「ストアドプロシージャ」をluaで構築しようとしています。この lua(redis) スクリプトを作成しましたが、動作します。
しかし、それを redis-cli に入力しようとすると、スクリプトのすべての行を 1 つの長い行に連結しない限り、エラーが発生することがわかりました。確かに、redis-cli で認識される「継続文字」(?) があるのですが、見つかりません。
redis-cli の継続文字を知っている人はいますか?
haskell - CPSを通訳者に適用しようとしている
CPS を使用して、Python インタープリターでの制御フローの実装を簡素化しようとしています。具体的には、return
/ break
/continue
を実装するときは、状態を保存して手動で巻き戻す必要があり、面倒です。この方法で例外処理を実装するのは非常に難しいと読んだことがあります。私が望むのは、各eval
関数が制御フローを次の命令または別の命令に完全に向けることができるようにすることです。
私よりも経験豊富な何人かは、これを適切に処理する方法として CPS を調べることを提案しました。インタープリターでの制御フローを単純化する方法は本当に気に入っていますが、これを達成するために実際にどれだけの作業を行う必要があるかはわかりません。
AST で CPS 変換を実行する必要がありますか? この AST をより小さな下位レベルの IR に下げてから、それを変換する必要がありますか?
どこでも成功の継続を受け入れるようにエバリュエーターを更新する必要がありますか? (私はそう仮定しています)。
私は、CPS 変換を一般的に理解していると思います。目標は、すべての式を含む AST 全体を通して継続をスレッド化することです。
Cont
また、ホスト言語が Haskell であるため、モナドがどこに収まるかについても少し混乱しています。
編集: 問題の AST の要約版を次に示します。これは、Python ステートメント、式、および組み込み値の 1 対 1 のマッピングです。
ステートメントを評価するには、次を使用しますeval
。
式を評価するには、次を使用しますevalExpr
。
全体の動機となったのは、休憩を実装するために必要な悪ふざけでした。break の定義は合理的ですが、while の定義に対して行うことは少し多すぎます。
ここで実行できる単純化は他にもあると確信していますが、核となる問題は、状態をどこかに詰め込み、手動で巻き戻すことです。CPS によって簿記 (ループ出口ポイントなど) を状態に詰め込み、必要なときにそれらを使用できるようになることを願っています。
私はステートメントと式が分かれているのが嫌いで、CPS 変換の作業が増えるのではないかと心配しています。
ruby - Sinatra エラー - スレッド間で呼び出された継続
私はRubyにまったく慣れていないので、私の質問には非常に簡単な答えがあるかもしれません. しかし、stackoverflow で答えが見つかりませんでした。次の非常に単純な Sinatra アプリがあります。
シナトラが始まります:
そして最初のリクエストを処理します:
しかし、2番目のリクエストでエラーで失敗します:
RuntimeError - スレッド間で呼び出された継続:
明らかに、私は基本的なものを欠いています。ご意見をお聞かせください。
f# - Mono での F# 末尾呼び出しの最適化の問題
モノの F# に関する問題があります。私は大学で関数型プログラミングのこのコースを行っています。このコースでは F# を使用しており、エディターとして Xamarin を使用しています。
問題は、効率を得るためのツールとして末尾再帰のレッスンを行ったことです。しかし、関数の末尾再帰を記述できない場合は、スタックではなくヒープを使用するように、継続的に使用する必要がありました。
これは、F# 3.1 を使用する mono 3.10.0 では機能しないようです。System.StackOverflowException が発生します。継続的にヒープを使用する必要があるため、これを取得することは不可能です。