問題タブ [pointfree]
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 - 無意味なコードを理解するのに役立ちます
Pointfreeをいじっていると、理解できないようなコードが提示されました。
私の主な問題は、ここでどのように機能するかがわからないことjoin
です。モナドラッピングの1つのレイヤーを「削除」することを理解しています(m (m a)
to m a
)。のようなもの[1..10] >>= (\x -> [x * x])
になると思いますが、「余分なレイヤー」がどのように導入されるかはよくわかりません。私はそれを取得しますがjoin x = x >>= id
、それが各値を「複製」し(*)
て2つの引数を取得する方法にまだこだわっています。これは約30分間私を悩ませてきました.私はすべてのパズルのピースを持っているように感じますが、それらを組み合わせることができないようです.
PS 心配しないでください。私はこの無意味なバージョンを実際には使用しません。これは純粋な好奇心であり、Haskell をよりよく理解しようとする試みです。
scala - Scala でのポイント フリー スタイルの事例
これは、ここで FP を理解している人にとっては非常に明白に思えるかもしれませんが、Scala のポイントフリー スタイルは何の役に立つのでしょうか? このトピックで本当に私を売り込むのは、ポイントフリースタイルが、非ポイントフリースタイルで同じ問題を解決するコードよりも、ある次元 (パフォーマンス、エレガンス、拡張性、保守性など) でいかに優れているかを示す図です。
haskell - Haskell での関数合成に関する混乱
ghci の次の関数定義を検討してください。
どこ、 。2 つの関数の合成 (右結合) を表します。これは私が呼び出すことができます
そして、それは私に望ましい結果をもたらします。どうやら、リスト [3.14, 3.14] を関数「sum」に渡し、その「結果」を cos などに渡します。ただし、これをインタープリターで行うと
また
それから私はトラブルに遭遇します。これを次のように変更すると、望ましい結果が得られます。
また
(.) の型は、'sum y' も関数であるため、次の形式に問題がないことを示唆しています (そうではありませんか? 結局、Haskell ではすべてが関数なのでしょうか?)。
さらに興味深いのは、2 つ (または多数) の引数 (リスト [3.14, 3.14] を 2 つの引数 x と y として渡すことを考えてください) で動作させることができることです。次のように記述する必要があります。
HaskellWiki には、「PointFree」フォームhttp://www.haskell.org/haskellwiki/Pointfreeと呼ばれるこのフォームに関するいくつかの議論があります。この記事を読んで、この形式は 2 つのラムダ式の合成とは異なるのではないかと疑っています。これらのスタイルの両方を区切る線を引こうとすると、混乱してしまいます。
f# - 関数型プログラミングで関数をポイントフリー スタイルで定義する。短所/長所は何ですか?
フォームの何かを書くたびに
私は自分自身に尋ねることになります
代わりは。2 番目の形式ではなく、最初の形式で記述する利点はありますか?
また、最初の形式と 2 番目の形式で関数定義をどのように呼び出しますか?
haskell - インタラクションをポイントフリーにするにはどうすればよいですか?
上記のコードで、インタラクション関数をポイントフリースタイルで作成するにはどうすればよいですか。
haskell - 2つのモナディック値をペアにして、それを返します
私はParsecで遊んでおり、2つのパーサーを1つに結合して、結果をペアにした後、別の関数をフィードして、解析結果を操作し、次のように記述します。
だから私はこれを書いた:
と
どこかに実装されている(<&>)に似たものはありますか?それとも、これはポイントフリーで書くことができますか?試してみfmap (,)
ましたが、タイプに合わせるのが難しいようです。
debugging - なぜこのタイプチェックをしないのですか?
compress xs@(_:_:_) = (ifte <$> ((==) <$> head <*> head.tail) <$> ((compress.).(:) <$> head <*> tail.tail) <*> ((:) <$> head <*> compress.tail) ) xs
タイプエラーが発生しますが、理由がわかりません。と同等である必要があります
compress xs@(_:_:_) = (ifte (((==) <$> head <*> head.tail) xs) (((compress.).(:) <$> head <*> tail.tail) xs) (((:) <$> head <*> compress.tail) xs))
、そうではありません。
注:ifte = (\ x y z -> if x then y else z)
、<$>
および<*>
はからControl.Applicative
です。
編集:エラーは次のとおりです。
私は、99のHaskell問題の問題8に対する無意味な解決策を書き込もうとして、この問題に遭遇しました。私は自分が書いた意味のある解決策を修正することによってそれをやろうとしていました。
haskell - ポイントフリー スタイルと $ の使用
$
使用スタイルとポイントフリー スタイルをどのように組み合わせますか?
明確な例は、次のユーティリティ関数です。
書くだけconcat $ replicate
でエラーが発生します。同様に、関数ではなく値を期待しているconcat . replicate
ため、書くこともできません。concat
では、上記の関数をポイントフリー スタイルにするにはどうすればよいでしょうか。
haskell - ポイントフリースタイルの単純な Haskell 関数
Haskell で関数をポイントフリー表記に変換する方法を理解しようとしています。この例を見ましたが、探しているものよりも複雑です。その背後にあるロジックを理解しているように感じますが、コードでいくつかの簡単な例を実行しようとすると、コンパイル エラーが発生します。この関数をポイントフリー スタイルで書きたいと思います。
f x = 5 + 8/x
私は次のように再配置しましたf x = (+) 5 $ (/) 8 x
だから、私はそれが次のようなものかもしれないと思った:
しかし、これを ghci で実行すると、次のメッセージが表示されます。
「... のインスタンスがありません」というメッセージがわかりません。この関数をポイントフリー スタイルで記述するにはどうすればよいですか?
haskell - ポイントフリースタイルのHaskellの要素数
与えられた述語を満たすリスト内の要素の数を計算する関数を定義したいと思います。
例えば:
2を返す必要があります。
短く書くことができます:
fパラメータなしで書くことは可能ですか?