問題タブ [maybe]
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.
haskell - エラーハンドリングとモナド?
Haskel の Maybe-idiom を適用する方法を理解しようとしています.. http://en.wikibooks.org/wiki/Haskell/Understanding_monads/Maybe を読んでいます。Maybe
この値が>>=
演算子を介して伝播すること。
URL の例:
次に、政府データベースのルックアップの結果を 3 回目のルックアップで使用したい場合 (たとえば、登録番号を調べて、自動車税がかかっているかどうかを確認したい場合)、getRegistrationNumber 関数を拡張できます。
または、do-block スタイルを使用します。
質問:
エラーハンドリングはどのように処理すればよいですか? ほとんどのコードは、どこで問題が発生したかを知ることで恩恵を受けると思います。「電話帳にも政府データベースにも John Doe が見つからなかった」と報告するだけでなく、どのリソースに問題があったかを報告する必要があります。
list - haskell-多分機能していないリストを含む関数
私は次の機能を持っています:
この関数は2つのリストを取ります。wsは、0に変更したいxsの値のインデックスです。
何らかの理由で、それはある場合には機能し、他の場合には機能しません:
[1,2,0,0]-正解
[1,2,0,4]-正解
[1,1,2,1,3]-[1,1,2,0,3]である必要があります
誰かがこれがなぜであるか説明できますか?
前もって感謝します!
haskell - たぶん期待されている do ブロックのコンパイル エラー
これが私のコードです:
これが私が得ているエラーです(指定された行で):
なにが問題ですか?私<-
はIOアクションを実行し、結果をmに入れると思いますか? なぜMaybe
then を期待するのですか?
f# - ネストされたブールテストのF#計算式?
F#モナド(ワークフロー)について十分に理解しているので、コード内でそれらを実装することが理にかなっている場所がいくつかあります。
たとえば、複数のネストされたif / thenを持つ関数があります。つまり、関数は、データが途中で特定の「テスト」に合格する限り継続する必要があります。
私は「たぶん」モナドに精通していますが、私が見たすべての例では、let!
バインディングを操作するようにコード化されていますが、これは私が行っていません。let
バインドではなく、ネストされたブール型テスト用に調整された「多分」ワークフローの例を誰かが提供してくれることを期待しています。
list - 標準 Haskell 関数 :: (a -> Maybe a) -> a -> [a]
関数が定義されています
この機能は当たり前のように思えるので、標準ではないことが信じられません。いくつかのモジュールで定義されていますか (私はすでに Data.Maybe をチェックしています)?
haskell - Maybe a、IO a、MaybeT IO a の操作
私は、Maybe a、IO a、MaybeT IO a のさまざまな組み合わせを含むプロンプト - レスポンス スタイルのシステムを作成していますが、考慮すべき点がたくさんあります。無効な入力がない (したがって MaybeT にラップされない) IO アクション、(MaybeT IO a を返す) IO アクションではないが失敗する可能性があるため、Maybe a を返すもの、および Maybe a を返すものがあります。それはただの単純な値であり、すべてを適切なタイプにするために、<$>, Just, fmap, MaybeT, lift, =<<,
との過度の組み合わせを覚えておく必要があるように思われ始めています。return
これを管理したり、必要な場所で値を取得するためにどの関数を使用する必要があるかを判断したりする簡単な方法はありますか? それとも、時間の経過とともにうまくいくことを祈る必要がありますか? これが私の例です:
型ヒントを削除したとしても、C# や Python で同じことを行うためのより短い関数を記述できる可能性があります。
haskell - MaybeT コンパイル エラー
エラー:
そしてコード:
誰かが MaybeT トランスフォーマーで私を助けてくれるなら、私はそれを感謝します. これを機能させる方法がわかりません。
haskell - Maybe's を使用して一連の ADT から値を取得する
私はいくつかの ADT を持っていますが、それぞれに別の ADT が含まれている場合と含まれていない場合があります。下位レベルからデータを取得する必要があり、削除できると確信している非常に反復的なコードを書いています。Real World Haskell と "Learn You a Haskell For Great Good" でいくつかのサンプル コードを見てきましたが、よくわかりません。これは、ADT の省略された無関係な詳細の例です。
StreetAddress から郵便番号を取得するには、次のようにしました。
オブジェクトの連鎖が深まるにつれて、コードの反復性も増します。もっと良い方法があるはずです。アイデア?参照?StackOverflow で同様の質問を見つけることができませんでしたが、ここにあるに違いないと思います...これは、尋ねられたに違いない単純な問題のようです。
ありがとう、ティム
haskell - スナップフレームワーク-多分片付けを繰り返す
私は(限られた)Haskellの知識をSnap Webフレームワークに適用し、何を構築できるかを確認しています。(おそらく存在しない)パラメーターを取得し、それをintに解析しようとしています。明らかに「たぶん」は私が欲しがっているものです。
以下のコードでAppHandler
は、次のように定義されていHandler App App
ます(チュートリアルでは現在何も見つかりませんが、2つのレベルの状態を持つモナドだと思います)。でB8
ありByteString.Char8
、readInt
戻りますMaybe(Int,ByteString)
以下のコードは機能しますが、おそらく呼び出しを連鎖させる方法があるはずです(おそらく、私はすでにモナドにいるので、MaybeTを介して)。次のステップは、解析されたIDに基づいてデータベースから行をフェッチすることであるため、連鎖は特に意味があります。もちろん、それは「多分a」も返します。明らかに、これは非常に一般的なパターンです。
runMaybeTを適用してみましたが、率直に言ってどのタイプを変更する必要があるのかがよくわからず、エラーがなくなることを期待してランダムに変更していました。それは変化し、行から行へと動き回ったが、そうではなかった。
Haskellを探索し始めたときよりもはるかに高いレベルで完全に失われているので、これを進歩として扱っています...
編集:kosmikusの答えを歩いて、うまくいけば私はそれを理解しました...
私はこれに向かって少しずつ努力していたと思いますがgetParam
、他のステップと同じブロック内に強制しようとし続けました。
3行目では、getParamの呼び出しがAppHandlerで行われています。であるraw_paramがありMaybe ByteString
ます。5行目では、ネストされたdoにいるので、バインディング(?)はMaybeモナド内で行われ、param
aByteString
またはgetのいずれかになり、残りのdoブロックは*Nothing
を短絡します。同様に、6行目では、pはIntであるか、または短絡しています。
6行目にp
はInt(たとえば42)が含まれており、7行目は。を返しJust 42
ます。になる4行目に戻りAppHandler (Just 42)
ます。現時点でAppHandlerが何であるかを気にする必要はありません-タイプはすべて満足しています。
これもタイプチェックであり、これを考え抜こうとしている人に役立つかもしれないいくつかのバリエーションがあります。
この場合、非実行バリエーションは実際には単純に見えます。考える必要があるのは、<$>
私が正しく読んでいる場合は、fmap
を適用しfst
てMaybe (Int,ByteString)
取得できるようにすることだけですMaybe Int
。
*正しく理解していれば、後続の各行にアクセスする必要がありますが、Nothingを返すだけなので、実際にはgotoスタイルのショートカットではありません。 Edit2:以下のkosmikusのコメントを参照してください-怠惰+右ネストは、各行を評価する必要がないことを意味します。
haskell - Haskell でのファジー パターン マッチング ディスパッチ
ツリー上で解析コードを書いています。(つまり、スタンフォードの nlp 依存関係ツリー)
基本的に私はこのような機能を持っています:
私が望むのは、ノードから出てくるエッジがある場合、最初のルールにディスパッチするnsubj
ことdobj
です。他に何があるかは気にしません。
エッジが正しい順序で存在する必要があり、さらにエッジが存在する場合は一致しないため、明らかに私の例の関数はこれを行いません。
1 つのアプローチとして、表現力を高めるためにガードを使用することが考えられます。
しかし、それはかなり面倒で、ターゲット ノードのハンドルさえ取得できません。
私のようなグラフにパターン マッチング パーサーを記述する標準的な方法はありますか? それとも、Maybe モナドに基づく何らかの魔法があるのでしょうか..?