私は Haskell を学んでいて、視線アルゴリズムを実装する最も慣用的な方法を見つけようとしています。
私が見つけたデモ コードは状態モナドを使用していますが、状態を再帰的に渡す方が簡単なように思えます (私は単なる初心者です)。ここで何が欠けていますか?パフォーマンスの問題はありますか?
コードの検索: http://www.finalcog.com/bresenham-algorithm-idiomatic-haskell
ありがとう、
クリス。
私は Haskell を学んでいて、視線アルゴリズムを実装する最も慣用的な方法を見つけようとしています。
私が見つけたデモ コードは状態モナドを使用していますが、状態を再帰的に渡す方が簡単なように思えます (私は単なる初心者です)。ここで何が欠けていますか?パフォーマンスの問題はありますか?
コードの検索: http://www.finalcog.com/bresenham-algorithm-idiomatic-haskell
ありがとう、
クリス。
どこでも状態を渡すのは少し冗長になる可能性があります。また、状態モナドはほとんどの haskell コーダーによく知られているため、あなたが何をしているかを知ることができます。モナドの外で自分自身をハンドロールすると、コードが何をするかを識別するのが難しい場合があります。
状態の変化をカプセル化するのに state モナドはきちんとしていると思います。コードのどの部分がステートフルであるか (つまり、状態を変更または依存するか) は、純粋なものの残りの部分と比べて明らかです。
大規模なプログラムの場合、モナド内の配管を渡す状態を非表示にする方が適切です。その場合、エラーのリスクは少なくなります。
状態を明示的に渡すのではなく、モナドを使用して状態を渡す利点は、使用できるモナド用に定義された多くの便利なコンビネータがあることです。