問題タブ [evaluation-strategy]
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.
computer-vision - How to calculate the mean IU score in image segmentation?
How to compute the mean IU (mean Intersection over Union) score as in this paper?
Long, Jonathan, Evan Shelhamer, and Trevor Darrell. "Fully Convolutional Networks for Semantic Segmentation."
python - def f(x) が評価される回数を数える簡単な方法は?
f(x)
コードをあまり変更せずに評価される回数を数えようとしていますが、それほど難しいことではないようですが、理解できないようです。
lambda-calculus - ラムダ計算、正規順序、正規形、
ラムダ計算では、項が正規形を持っている場合、通常の次数削減戦略は常にそれを生成します。
上記の命題を厳密に証明するにはどうすればよいのでしょうか。
evaluation - call-by-need 評価をどのように誤解していますか?
まず第一に、私はこれらのことや何かを勉強したことがないので、とてもばかげた質問をしているかもしれません.
私は必要に応じた評価でラムダ計算を実装して遊んでいます。関連するビットは、28ページで説明されている自然なセマンティクスのようです。
とにかく、この評価戦略について私が理解していないのは、私が理解している限り、実際の置換は変数を評価するときにのみ起こるということです。これらは値であるため、抽象化はそれ自体に評価され、アプリケーションは新しいエントリをキャッシュに追加するだけです。
しかし、それを考えると、次のような用語を正確に評価するにはどうすればよいですか
(λx.λy.x y) λa.a
リンクされた論文に記載されている自然なセマンティクスによれば、最初の評価ステップは、エントリx -> λa.a
をキャッシュに追加し、アプリケーションの左辺で抽象化の本体を評価することですλy.x y
。しかし、これは値なので、評価は終了します。その時点で、閉じていない項と空でないヒープがあります。この用語が に評価される必要があることは正確にわかっていますがλy.(λa.a) y
。
私は何を誤解していますか?この評価戦略を実際に使用する言語では、これはどのように機能しますか?
javascript - Typescriptで非短絡状態を行うには?
タイプスクリプトで短絡しない方法で状態を評価する方法は? &
Typescript はブール型またはブール型を許可しません|
。非短絡チェックが必要な理由は、 function で showErrors を呼び出すためですisValueValid
。
この関数を考えると
それから私の状態で
こんな風にできるのに
しかし、私はそれを isValueValid 関数内で呼び出すように感じます。実際には、エラーが発生するたびに、デフォルトで show errors を呼び出すことを常に考えています。
c++ - std::conditional などの C++ メタ関数の評価戦略 (eager、lazy、...) は何ですか?
C++14 ドラフト n4140 読み取り
T
列挙型でなければならない
のためにtemplate <class T> struct underlying_type
。
書き方が悪い
いつT
任意の型になることができますか? 私は UB に足を踏み入れ、コンパイラーは私の $HOME を削除しますか?
python - Pythonの非厳密な名前による引数?
質問
関数の引数を非厳密 ( by-name で渡す) として宣言する方法はありますか?
これが直接不可能な場合:同様のことを達成するのに役立つヘルパー関数またはデコレータはありますか?
具体例
これは、実験するための少しおもちゃの例です。
1
括弧付きの算術式 (簡単にするために、数値を単一のリテラル値に置き換えたもの) の次の古典的な文法に対処できる、小さなパーサー コンビネーター ライブラリを構築したいとします。
パーサー コンビparse
ネーターを、トークンのリストと現在の位置を取得し、解析エラーをスローするか、結果と新しい位置を返すことができるメソッドを持つオブジェクトとして定義するとします。(連結) と(代替)ParserCombinator
を提供する基本クラスを適切に定義できます。次に、定数文字列を受け入れるパーサー コンビネーターを定義し、 and を実装します。+
|
+
|
これまでのところ、すべて問題ありません。ただし、文法の非終端記号は相互に再帰的に定義されており、考えられるすべてのパーサーの組み合わせのツリーを熱心に展開することはできないため、パーサー コンビネーターのファクトリを使用して、次のようなものにラップする必要があります。
これにより、EBNF に非常に近い方法で文法を書き留めることができます。
そして実際に動作します:
ただし、p(lambda: ...)
すべての行で少し面倒です。それを取り除く慣用的な方法はありますか?無限相互再帰の熱心な評価をトリガーせずに、何らかの方法でルールの RHS 全体を「名前で」渡すことができれば素晴らしいでしょう。
私が試したこと
コア言語で利用できるものを確認しました。「短絡」できるのは と のみのようです。間違っている場合は修正してくださいif
。and
or
私は、他の非おもちゃの例のライブラリがこれをどのように行うかを調べてみました。
たとえば、 funcparserlib は明示的な前方宣言を使用して、相互再帰を回避します ( github README.md サンプル コードの
forward_decl
andの部分を見てください)。value.define
いくつかの
parsec.py
特別な@generate
デコレータを使用し、コルーチンを使用したモナド解析のようなことをしているようです。それはすべて非常に素晴らしいことですが、私の目標は、Python で利用可能な基本的な評価戦略に関してどのようなオプションがあるかを理解することです。
のようなものも見つけましたがlazy_object_proxy.Proxy
、そのようなオブジェクトをより簡潔な方法でインスタンス化するのに役立たないようです。
では、引数を名前で渡し、相互に再帰的に定義された値の爆発を回避するより良い方法はありますか?