-1

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

4

2 に答える 2

3

私の経験では、言語を学ぶ最良の方法は、プロジェクトから始めることです。

同じパラダイム (命令型プログラミングなど) にとどまっている場合は、これが当てはまる場合があります。どれだけ「関数型プログラミング手法」を使用しても、命令型の考え方は残りがちです。命令的な考え方から機能的な考え方への移行は、非常に不快な場合があります。

その考え方を変え始めるには、Clojure the BraveLiving Clojureなどの基本から始めます。4clojureClojure Koansの練習を開始します。

Clojure は可変性を排除しませんが、デフォルトで可変性を排除しません。つまり、目的を達成するために何かを変更することが絶対に必要かどうかを検討するよう強制します。可変性が必要であると判断したら、VarsRefsAgents、およびAtomsを選択できます。それぞれに利点と欠点があります。

RxJSからは素晴らしいですでは、なぜ私は先に進んだのですか? ClojureScript に関する媒体:

公平を期すために、他のオブジェクト指向言語を学ぶのに比べて本当に難しいです。学習曲線は急勾配です。最初の 1 か月間は、読み書きも話すこともできず、うめき声​​や指さしに頼らなければならない日本を旅行しているように感じていました。

参照: IBM で Clojure を教える - Steve Shogren

于 2016-04-04T18:16:12.610 に答える
0

あなたの質問に対する Clojure 固有の答えは、ほぼ確実に を使用する^dynamicのではなく、agentatom、またはrefsを使用することです。

しかし、あなたの質問は実践的というよりも哲学的なものだと思いますか? サイモン ペイトン ジョーンズとのこのインタビューは、この質問に対する私のお気に入りの説明です。純粋な (最も純粋な意味での) 関数型プログラムには副作用がないため、役に立ちません。ただし、Simon がインタビューで述べているように、関数型言語はすべて、プログラムの純粋に機能的な側面を汚染しないように、限定的で制御された副作用を導入する方法を提供します。Haskell は、その型システム (モナド、モノイド、圏論) を通じてそれを行います。Clojure は、エージェント、アトム、および参照を通じてそれを行います。Elm はシグナルを通じてそれを行います。Erlang は、プロセスとメッセージ キューを通じてそれを行います。等々...

于 2016-04-05T11:33:22.783 に答える