問題タブ [purely-functional]

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 に答える
606 参照

function - 関数型プログラミングのすべての純粋関数は連続的ですか?

Haskell 関数のセットはすべての数学関数のサブセットにすぎないことを知っています。これはプログラミング言語であるため、その関数はすべて計算可能でなければなりません。しかし、数学的な観点から、すべての Haskell 関数 (および一般的な純粋関数) は連続的であるというのは本当ですか?

0 投票する
3 に答える
633 参照

functional-programming - 「純粋な OCaml」は、文献と慣習において「純粋に機能する」と同等ですか?

私の理解では、「純粋な OCaml」は OCaml の標準であるすべてのものを意味し、 「純粋に」機能的ではない機能を含みますが、「純粋な機能的」は通常の属性を意味します。つまり、副作用がない、例外処理がないなどです。その意味では、"純粋な OCaml" 実装は、たとえば、C を使用した OCaml または C++ 実装に反対するものと言われています。

しかし、私は最近、これについて、特定のサークルでは「純粋な OCaml」が OCaml の「純粋に機能するサブセット」を意味すると非常に主張する誰かと議論しました。

この 2 つの意味は、コミュニティで実際に使用されていますか? そのような曖昧さは存在しますか?「Pure OCaml」を第二の意味で使用している、高く評価されているソースへのポインタはありますか?

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

functional-programming - アプリケーションがスタックを変更した場合、関数型プログラミングの「純粋」とはどういう意味ですか?

純粋関数:

  1. 特定の入力に対して常に同じ結果を返す
  2. 副作用を生じさせない

これにより、プログラムの動作を変更せずに式を値に置き換えることができる参照透過性が得られます。

これは、プログラムの実行環境でエンティティの破壊的な変更 (更新) を除外する場合、プログラムは純粋に機能していると言えることを示しています。

このコメンテーターは次のように書いています。

アプリケーション自体がミューテーションのプロトコル (スタック) であることを考慮して、FP 設定の「純粋」が実際に意味するものに取り組んでいます。

私の質問は、アプリケーションがスタックを変更した場合、関数型プログラミングの「純粋」とはどういう意味ですか?

0 投票する
3 に答える
186 参照

clojure - Clojure の STM を「機能的」とみなすことはできますか?

純粋関数:

  1. 特定の入力に対して常に同じ結果を返す
  2. 副作用を生じさせない

これにより、プログラムの動作を変更せずに式を値に置き換えることができる参照透過性が得られます。

これは、プログラムの実行環境でエンティティの破壊的な変更 (更新) を除外する場合、プログラムは純粋に機能していると言えることを示しています。

ソフトウェア トランザクション メモリを見ると、同時実行コンピューティングで共有メモリへのアクセスを制御するためのデータベース トランザクションに類似した同時実行制御メカニズムが見られます。しかし、それ自体で特に機能するものは何もありません。

私の質問は、Clojure の STM を「機能的」と見なすことができるかということです。

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

clojure - 変更可能な状態を回避する、clojure を使用した関数型プログラミング

したがって、私の質問は、プログラムが実行する必要がある特定のアクションで可変状態を回避できるかどうかについてです。

いくつかのコンテキスト: 約 1 週間前、Clojure でプログラミングを学び、関数型プログラミングを独学することにしました。(日中は、主に C# を使用して Web 開発者として働いています。

私の経験では、言語を学ぶ最良の方法は、プロジェクトから始めることです。とにかく必要なものを作成することにしました。それは、XML ファイルからテキスト スニペットを読み取り、他のテキスト ファイルを検索して置換する (そして矛盾を検出する) ための小さなツールです。

ファイルを必要なマップのリストに解析したところまで来ましたが、ここに問題があります。私のプログラムには何もする必要がありません。そして、ユーザーが (javax.swing-button をクリックすると、私のプログラムはすべてを忘れてしまいます。

関数型プログラマーはこれをどのように解決しますか?

私が思いついた可能な解決策:

-モナド。(複雑さを構築するのに最適ですが、関数の実行が停止すると消えます。

-ユーザーがボタンをクリックするたびにディスクからファイルを再度読み取る: ばかげているようです。

-ファイルのコンテンツをフォーム コントロール内に保存します。不正行為のように思えます (また、単に間違っています。

-ファイルが解析されると、結果のデータ構造への参照を使用してクロージャーを作成し、これを新しいイベント ハンドラーにインストールします。

これを ^dynamic 変数なしではできない状況として正しく識別したかどうか、誰が教えてくれますか?

どんなポインタでも大歓迎です.)))))

編集:コード例を求めているのではありません。はいまたはいいえの答えで十分です。次に何を調べるかについてのヒントかもしれません。質問:clojureプログラムが計算したデータを記憶する方法はありますか、グローバル変数、アトム、ref、またはエージェントを使用せずに、アイドル状態で (次の Java イベントハンドラーが起動されるまで)?

そして、私が尋ねている理由は、関数型スタイルで適切な方法でプログラミングすることを学びたいということであり、基本的には軌道から外れていないかどうかを確認しています.

これまでのすべての有益な回答に感謝します。間違いなく本を読むためのヒントを得ました。それはいつも素晴らしいことです。

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

awk - awk を決定論的に実行する

awk を検証可能な決定論的方法で実行する方法を探しています。つまり、結果は入力のみによって決定される必要があります。言い換えれば、プログラムに出力があることを考えると、それが再現可能かどうかを知りたいのです。

これは、システム時間や/dev/random.

gawk のサンドボックス フラグを調べましたが、これは役に立たないと思います。