最近のコンピューターでは、シグナリングと非シグナリングのNaNに基づくパターンを使用しています。NaNは非数を意味します。ゼロ除算(fp)により、NaNが作成されます。sNaNは例外をスローし、非シグナリングNaNは結果として提供されるだけであり、結果に対する将来の計算でもNaNが生成されます。Evaluateはシグナリングであり、TryEvaluateは非シグナリングです。
ここで、Ctx = Context [I、R]は、関数の入力[I]、結果[R]、および例外を保持するコンテキストブロックです。すべてオプションです。コンテキストの更新メソッドはコピー更新です。変化するアップデートではありません。スーパートレイトは、1つ以上の関数を評価し、更新されたコンテキストを次の関数に渡します。メインの評価関数は、例外が保持されている場合(評価をスキップ)にコンテキストを返します。Context [I、R]には、(I => R)を(Context [I、R] => Context [I、R])に変換する関数があります。したがって、通常の関数はコンテキストベースの関数に簡単に変換できます。
ご覧のとおり、コードはそれほど多くありません。特性は私のユーティリティパッケージに含まれており、消費者はほとんどコードなしで使用できます。ライブラリを使用すると、関連する作業のオーバーヘッドが大幅に増加します。
これをすべてのパーサーに使用します。X-Pathベースのパーサーは、一連のサブパーサーを呼び出すだけです。したがって、evaluate(Seq)メソッド。注:私はメソッドが嫌いです。私はできる限り関数を使う傾向があります。
おっと、前回ゴミを投稿したと思います。これがgithubリファレンスです。
https://github.com/tyohDeveloper/acme/tree/master/src/acme/util