抽象的な問題:
私は一連の計算をしています。いずれのステップも失敗する可能性があります。ステップが失敗した場合は、プロセス全体をメッセージで中止する必要があります。Clojure、Haskellのいずれかのモナド、および失敗する計算シーケンス
ハスケル解決策:
どちらか+ IO Monads。
(既知の)Clojureのソリューション:
- スロー例外。
- 使用のClojure/algo.monads
質問:
は私が知っておくべきことが他のソリューションはありますか?この問題に対する標準的な「Clojure Way」は何ですか?
具体例私はに実行している:私はClojureScript経由のWebGLでセットアップGLSLシェーダにhttps://github.com/kovasb/gammaを使用してい
。
- VertexShaderオブジェクト
- コンパイルVertexShaderを割り当てます。典型的なプログラムのようなものが含まれます。
- FragmentShaderオブジェクトを割り当てます。
- コンパイルフラグシェーダ
- 割り当てオブジェクト。
- リンクプログラム
使用プログラム
- VertexBufferObjectsに
- アップロードVertexBufferObjectデータを割り当てTextureObject
- アップロードテクスチャ
- セットアップ制服を割り当てます。
実際に電話をかける。
これらのステップのいずれかが失敗することがあり、エラーを取得するには、
を(シェーダがコンパイルされません、これ以上BufferObjectsは...など、間違ったフォーマットを左)、失敗した場合に、私は他のすべてを終了させたい、とそれを修正する。これを処理する典型的な "Clojure Way"は何ですか?私はそれはあなたの特定の状況に適用される場合、some->マクロは、多くの場合、失敗する可能性がある計算の順序のためにClojureの中で使用されている(ここで、「失敗はわからないものの
これはニートマクロあります。もし私が間違っていれば私を訂正しなさい - いくつかはargをNEXT FORMに渡しますが、私はそれをキャプチャできません。つまり、 "x < - f(); y < - g(); z < - h(x、y) "は動作しません。なぜなら、hになるとyを渡すだけで、xは失われるからです。 –
'some->'と 'as-' 'を組み合わせて見ることができます:https://clojuredocs.org/clojure.core/as-%3E#example-568eeddae4b0f37b65a3c280 –