14

私を含む多くのhaskellプログラマーは、特に複雑なパーサーを書くときは、無意味なスタイルが好きです。これらにより、コードが読みやすくなり、冗長性が低くなります。しかし、場合によっては、それが逆になることもあります(たとえば、のインスタンスMonadや友人を悪用しているときなど(->) a)。

無意味なスタイルが役立つと思うときとそうでないときの基本的なガイドラインを教えてください。たとえば、代わりに部分的なコンポジションを使用する必要がある場合は、常にラムダを使用します(のようなものflip ((.) . take) . drop)。

4

2 に答える 2

14

これは明らかに個人のスタイルの問題です。ポイントフリースタイルは自分の考えを明確にするためのツールだと思いますし、それがその目的にかなうので(->) aあれMonad(->)Arrowそれは良いことだと思います。

できることとできないことが考えられます。

  • カリー化された構成で構成しないでください。分析するには複雑すぎます。たとえば、(sort .) . (++)is best written \xs ys -> sort (xs ++ ys).
  • 標準Control.*モジュールの任意のコンビネータを使用してください。たとえば、curry (negate *** (+1))using (->)as anArrowおよびap (zipWith (+)) tailusing (->) [a]as aと記述しMonadます。

共通のコントロール型のコンビネータを使用する理由は、単に意味を明確にするためではなく、コンビネータが存在し、意味のない定義を作成するためだけでなく、問題を解決するためにも役立つことが多いことを思い出させるためです。

すべてのことと同様に、やりすぎないように注意する必要があります。結合関数が多すぎる無意味な定義は、すぐに複雑になる可能性があります。

于 2011-03-14T21:58:15.660 に答える
12

疑わしい場合は、 で関数を構成して(.)ください。(.) . (.)フリップとスワップとsに足を踏み入れないでください。

于 2011-03-14T21:48:05.310 に答える