問題タブ [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.

0 投票する
1 に答える
1045 参照

haskell - Haskell 関数をポイントフリーにする

私は Haskell の初心者で、ポイントフリー関数で遊んでいます。私は2つの関数に問題があります.ラムダボットのソリューションは完全に判読できず、コードが難読化されていたため、関数を簡素化する方法がある場合に備えてここで質問しています.

最初の関数は、リストから重複を削除します。

この関数のポイントフリー バージョンをfoldrandで作成しようとしまし>>=たが、成功しませんでした。

2 番目の関数は、リストを元の要素を含むタプルのリストにマップし、それらがリスト内でどのくらいの頻度で発生したかを示します。

どこでcount a = length.filter(==a)。読みやすさを維持しながら、この関数のポイントフリー バージョンを作成できるかどうかはわかりませんが、確認したいと思います。

2 つの機能をポイントフリーにするための助けをいただければ幸いです。

0 投票する
1 に答える
363 参照

haskell - eta リダクションで関数の型を変更できるのはいつですか?

次の場合、正確には何が起こっているのでしょうか。

以前はどうしてこれに気づかなかったのだろうか?show ではなく「map fromIntegral」で実際に問題が発生しました。私のコードは pointfree 形式ではコンパイルされませんが、eta リダクションなしでは問題なく動作します。

eta リダクションが Haskell コードの意味を変更できる場合の簡単な説明はありますか?

0 投票する
2 に答える
1358 参照

haskell - ポイントフリー表記で絶対誤差関数を表現するより良い方法はありますか?

意味のある記法で:

absoluteError x y = abs (x-y)

ポイントフリー表記の不明確な例:

absoluteError' = curry (abs . uncurry (-))

0 投票する
1 に答える
298 参照

haskell - sq をポイントフリーに変更すると型が変わるのはなぜですか

重複の可能性:
この ghci セッションの型で何が起こっているのですか?

Haskell を少し練習してポイントフリーについて学ぶために、数を 2 乗する関数をいじっていました。

だから私は定義することから始めました

そのため、sq を dup に関して書き換えることができました (今のところ、dup ポイントを無料にすることを心配する必要はありません)。

そしてsqのタイプをチェックすると、私が期待しているものがわかります

だから私はxを削除して取得します

私は何が欠けていますか?

0 投票する
2 に答える
610 参照

f# - F#でポイントフリースタイルを使用する非対称演算子の部分機能アプリケーション?

F#に引数名がない最初の引数に関して、モジュラス演算子などの非対称演算子の部分関数アプリケーションを作成するにはどうすればよいですか?私の最初の試みは

let mod10 = (%) 10もちろんこれは

mod10(x) = 10 mod x希望の代わりに

mod10(x) = x mod 10。確かに私は書くことができました

let mod10 x = (%)x 10しかし、引数に名前を付ける必要はないので、使用できるプレースホルダーはありますか?

let mod10 = (%)_ 10

0 投票する
1 に答える
1165 参照

haskell - イータリデュースの理解

関数上でhlintを実行すると、weightDeltaEtaが減少することが示唆され続けます。別の関連するイータ削減の質問を読みましたが、この場合に理解を移すことができないようです。

自由な構文を指すように「減らす」ために私が行おうとするすべての変更は、それを壊してしまいます。変更はどこで行われるのでしょうか。また、将来的にeta reduceの提案を回避するための直感やトリックはありますか?

0 投票する
4 に答える
9673 参照

haskell - このフィボナッチ関数はどのようにメモ化されますか?

このフィボナッチ機能はどのようなメカニズムでメモ化されていますか?

そして、関連するメモで、なぜこのバージョンはそうではないのですか?

0 投票する
2 に答える
1183 参照

haskell - Haskell の引数の数とポイントフリー

複数のパターンマッチングでは、ポイントフリーであっても、異なる数の引数は不可能です!

たとえば、機能しません。しかし

します。機能の一部でのみポイントフリーを使用できる場合もあるので...

なんで?GHCには難しすぎる?:'(

0 投票する
2 に答える
947 参照

haskell - ポイントフリーの表​​記、再帰、およびパターンマッチング

それで、私はポイントフリープログラミングについて多くのことを聞き続け、それを理解するために少し実験をすることにしました。これには、先​​のとがった関数を使用して数値の階乗を計算し、それをポイントのない形式に変換することが含まれていました。私はなんとかそれを行うことができましたが、ポイントフリーの結果は、ポイントされた結果よりもはるかに読みにくくなっています。

自由な表記法を示すために不可欠なものが欠けていますか、それとも特定の変換が得られるのと同じくらい読みやすいですか?私には、fact関数の大部分はゼロでのパターンマッチングであるように見えます。実際、パターンマッチングは、私がHaskellを愛する最大の理由の1つです。ただし、ポイントフリー表記は、リスト内包表記などの非常に便利な他のいくつかのこととともに、それを完全に禁止しているようです。

0 投票する
1 に答える
854 参照

performance - ポイントフリー スタイルのパフォーマンスへの影響

F# を使用して関数型プログラミングを学習する最初の一歩を踏み出しましたが、Forward Pipe (|>) 演算子と Forward Composition (>>) 演算子に出くわしました。最初は、最終的な実行コードに影響を与えるのではなく、単なる砂糖だと思っていました (パイプが型推論に役立つことは知っていますが)。

しかし、私はこの SO 記事に出くわしました: 関数型プログラミングにおける「ポイントフリー」スタイルの利点と欠点は何ですか? これには2つの興味深い有益な答えがあります(物事を単純化する代わりに、「ポイントフリー」または「ポイントレス」スタイルを取り巻くワームの缶全体を開いた)これら(および他の読み物)からの私の持ち帰りは、ポイントフリーですが議論されている分野です。ランバと同様に、ポイントフリー スタイルは、用途に応じて、コードを理解しやすくしたり、はるかに難しくしたりできます。意味のある名前を付けるのに役立ちます。

しかし、私の質問は最初の回答に対するコメントに関するものです。

「コンポジションは、パイプライン処理のように中間値を生成する必要がないことをコンパイラーに明らかにすることで、GC の負荷を軽減する可能性があるように思えます。いわゆる「森林破壊」の問題をより扱いやすくするのに役立ちます。」

ガッシュは次のように答えます。

「コンパイルの改善に関する部分はまったく真実ではありません。ほとんどの言語では、ポイントフリー スタイルは実際にパフォーマンスを低下させます。Haskell が最適化に大きく依存しているのは、これらのコストを耐えられるものにする唯一の方法だからです。せいぜい、これらのコンビネータがインライン化され、同等の意味のあるバージョンが得られます。」</p>

誰でもパフォーマンスへの影響を拡大できますか? (一般的に、特に F# の場合) 私は、それが記述スタイルのものであり、コンパイラが両方のイディオムを同等のコードに分解すると想定していました。