タグ付けされた質問 「functional-programming」

関数型プログラミングは、プログラムの状態ではなく入力によって出力が決定される関数の連鎖評価によって計算問題を解決しようとするパラダイムです。このプログラミングスタイルでは、副作用と可変データは廃止され、通常は厳密に分離されます。

5
純粋に機能的な言語はモジュール性をどのように処理しますか?
私は、オブジェクト指向のバックグラウンドから来ました。そこでは、クラスを使用して、少なくともオブジェクトを作成するために使用するか、継承で使用できるコードの簡単なリサイクルを可能にする抽象化層を作成することができます。 たとえば、動物のクラスを持つことができ、そこから猫と犬を継承し、すべてが同じ特性を多く継承し、それらのサブクラスから動物の品種または名前を指定できるオブジェクトを作成できますそれの。 または、クラスを使用して、わずかに異なるものを処理または含む同じコードの複数のインスタンスを指定できます。検索ツリーまたは複数の異なるデータベース接続のノードとそうでないもの。 私は最近関数型プログラミングに移行しているので、私は疑問に思い始めて いました。つまり、クラスとオブジェクトの概念のない言語です。



5
短所リストが関数型プログラミングに関連付けられているのはなぜですか?
ほとんどの関数型言語は、最も基本的なリストタイプとして、一重リンクリスト(「コン」リスト)を使用していることに気付きました。例には、Common Lisp、Haskell、およびF#が含まれます。これは、ネイティブリストタイプが配列であるメインストリーム言語とは異なります。 何故ですか? Common Lisp(動的に型指定される)の場合、短所はリスト、ツリーなどのベースにもなるほど十分に一般的であるという考えがあります。これは小さな理由かもしれません。 ただし、静的に型付けされた言語の場合、正当な理由を見つけることができず、反論さえ見つけることができます。 機能的なスタイルは不変性を促進するため、リンクリストの挿入の容易さはあまり利点ではありませんが、 機能的なスタイルは不変性を促進し、データ共有も促進します。配列はリンクリストよりも「部分的に」共有しやすいため、 同様に、通常の配列でパターンマッチングを行うこともできますし、さらに優れています(たとえば、右から左に簡単に折りたたむことができます)。 さらに、ランダムアクセスが無料で得られます。 そして(実用的な利点)言語が静的に型付けされている場合、通常のメモリレイアウトを使用して、キャッシュの速度を上げることができます。 では、なぜリンクリストを好むのでしょうか?

11
Pythonで関数型プログラミングができる場合、特定の関数型プログラミング言語が必要ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 8年前に閉鎖されました。 ジェネレーターとラムダを使用して、Pythonで関数型プログラミングを行うことができます。Rubyでも同じことを実現できます。 質問は次のとおりです。Erlang、Haskell、Schemeなどの特定の関数型プログラミング言語が必要なのはなぜですか?これらの特定の関数型プログラミング言語が提供するものと異なるものはありますか?関数型プログラミングにPythonを使用できないのはなぜですか?

5
関数型プログラミングがよく合わない一般的な問題は何ですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 関数型プログラミングは宣言的なパラダイムです。FPの長所の1つは、副作用が回避されることです。いくつかの問題では、FPは適切ではないと言われています。 関数型プログラミングが適合しない一般的な問題は何ですか?

3
関数型プログラミングの概念に関する標準的なチュートリアルまたは本はありますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 手続き型/オブジェクト指向プログラミングのバックグラウンドから来て、私はSchemeプログラムを手続き型で書く傾向があります。プログラマーの心をリセットするために、SchemeやLispを機能的な方法で一から学ぶことに興味があります。 ベストプラクティス、設計方法論、および関数型プログラミングの概念に関するその他の有用な情報を説明するための事実上の標準であるチュートリアルまたは本はありますか?その本は特別なものですか?

4
関数型プログラミングは、依存性注入パターンの実行可能な代替手段ですか?
私は最近、C#での関数型プログラミングというタイトルの本を読んでいます。関数型プログラミングの不変でステートレスな性質は、依存性注入パターンと同様の結果を達成し、特にユニットテストに関してはより良いアプローチである可能性があります。 両方のアプローチの経験がある人なら誰でも、主な質問に答えるために自分の考えや経験を共有できれば感謝しています。

5
関数型プログラミング:並行性と状態に関する正しいアイデア?
FP支持者は、パラダイムが可変状態を回避するため、並行性は簡単であると主張しています。わかりません。 FPを使用して、純粋な機能と不変のデータ構造を強調するマルチプレイヤーダンジョンクロール(ローグライクゲーム)を作成していると想像してください。部屋、廊下、ヒーロー、モンスター、戦利品で構成されるダンジョンを生成します。私たちの世界は、事実上、構造とそれらの関係のオブジェクトグラフです。物事が変化すると、世界の表現はそれらの変化を反映するように修正されます。私たちのヒーローはネズミを殺したり、短剣を拾ったりします。 私にとって、世界(現在の現実)はこの状態の考え方を持ち、FPがこれをどのように克服するのか見逃しています。ヒーローが行動を起こすと、機能が世界の状態を修正します。すべての決定(AIまたは人間)は、現在の世界の状態に基づいて行う必要があるようです。並行性はどこで許可しますか?複数のプロセスが並行して世界の状態を修正することはできません。1つのプロセスの結果が期限切れの状態に基づいていることはありません。世界の現在のオブジェクトグラフで表される現在の状態を常に処理しているように、すべての制御は単一の制御ループ内で行われるべきだと感じています。 明らかに、並行性に完全に適した状況があります(つまり、状態が互いに独立している孤立したタスクを処理する場合)。 私の例では並行性がどのように役立つかを確認できず、それが問題になる可能性があります。私は何らかの形で主張を誤って伝えているかもしれません。 誰かがこの主張をよりよく表現できますか?

5
関数型プログラミングは数学と強く関係していますか?
この質問は 、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 8年前に移行され ました。 関数型プログラミングの多くは数学的な概念で描かれているので、関数型プログラミングは数学にとても関連していますか?命令的な背景を持つプログラマーのための関数型プログラミングを学び、理解するための強力な数学の基礎を持つ必要がありますか?

4
関数をパラメーターとして取る関数は、それらの関数へのパラメーターもパラメーターとして取る必要がありますか?
多くの場合、データアクセスを簡単にモックでき、アクセスするデータを決定するパラメーターを受け入れる署名を提供するため、このような関数を作成していることに気付きます。 public static string GetFormattedRate( Func<string, RateType>> getRate, string rateKey) { var rate = getRate(rateKey); var formattedRate = rate.DollarsPerMonth.ToString("C0"); return formattedRate; } または public static string GetFormattedRate( Func<RateType, string> formatRate, Func<string, RateType>> getRate, string rateKey) { var rate = getRate(rateKey); var formattedRate = formatRate(rate); return formattedRate; } 次に、私はそれを次のように使用します: using FormatterModule; …

4
関数型プログラミングの値を「記憶」する
関数型プログラミングを学ぶというタスクを自分で引き受けることにしました。これまでのところ、それは爆発でした、そして、私はそれがそうであったように「光を見ました」。残念ながら、私は質問を跳ね返すことができる機能的なプログラマーを実際には知りません。Stack Exchangeの紹介。 Web /ソフトウェア開発コースを受講していますが、講師は関数型プログラミングに精通していません。彼は私がそれを使って大丈夫であり、彼が私のコードをよりよく読むことができるように彼がそれがどのように機能するかを理解するのを助けるように私に尋ねた。 これを行う最善の方法は、値を累乗するなどの単純な数学関数を示すことだと判断しました。理論的には、事前に作成された関数を使用して簡単にそれを行うことができますが、これは例の目的に反します。 とにかく、私は値を保持する方法を理解するのに少し苦労しています。これは関数型プログラミングなので、変数を変更することはできません。これを命令的にコーディングすると、次のようになります。 (以下はすべて擬似コードです) f(x,y) { int z = x; for(int i = 0, i < y; i++){ x = x * z; } return x; } 関数型プログラミングでは、確信が持てませんでした。これは私が思いついたものです: f(x,y,z){ if z == 'null', f(x,y,x); else if y > 1, f(x*z,y-1,z); else return x; } これは正解?zどちらの場合も値を保持する必要がありますが、関数プログラミングでこれを行う方法がわかりませんでした。理論的には、私がやった方法はうまくいきますが、それが「正しい」かどうかはわかりませんでした。それを行うより良い方法はありますか?

3
コードを書くとき、コンパイルされたマシンコードについて考える必要がありますか?
たとえば、次のコードがあります。 auto z = [](int x) -> int { if (x > 0) { switch (x) { case 2: return 5; case 3: return 6; default: return 1; } } return 0; }; そして、後でこれを数回呼び出します。asmコードでは、ラムダを使用した外部呼び出しが表示されます。メタプログラミングで勝つかもしれませんが、asmのデバッグとパフォーマンスで負けるのですか?パフォーマンスとデバッグの単純さを確実にするために、最新の言語機能、マクロ、およびその他のメタプログラミングの側面を避ける必要がありますか?

5
エンティティコンポーネントシステムアーキテクチャは、定義上オブジェクト指向ですか?
エンティティコンポーネントシステムアーキテクチャは、定義上、オブジェクト指向ですか?それは私にとってより手続き的または機能的だと思われます。私の意見では、オブジェクト指向言語で実装することを妨げるものではありませんが、堅実なオブジェクト指向の方法で実装することは慣用的ではありません。 ECSはデータ(E&C)を動作(S)から分離しているようです。証拠として: アイデアは、エンティティにゲームメソッドを埋め込まないことです。 そして: コンポーネントは、特定の目的に必要な最小限のデータセットで構成されます。 システムは、特定のコンポーネントを持つエンティティのセットを使用する単一目的の機能です これはオブジェクト指向ではないと思います。オブジェクト指向になることの大部分は、データと振る舞いを組み合わせることだからです。 証拠として: 対照的に、オブジェクト指向のアプローチは、プログラムの残りの部分から直接アクセスできない場所にデータを配置することをプログラマに促します。代わりに、データにバンドルされている一般にメソッドと呼ばれる特別に記述された関数を呼び出すことにより、データにアクセスします。 一方、ECSは、行動からデータを分離することのすべてのようです。

3
Clojureには継続/コルーチン/などがありますか?
私はPythonでプログラミングを始めましたが、コルーチンやクロージャーなどの概念に本当に戸惑っていました。 今、私はそれらを表面的なレベルで知っていると思いますが、その「啓発」の瞬間を一度も感じたことがないので、Clojureを学ぶことにしました。私はスチュアート・ハロウェイの本を買ったが、それは良いが、インデックスを見ると、コルーチンや継続のような言葉はなかった。私はそれらをグーグルで検索しましたが、何もありません。 だから、私の質問は: Clojureには、スタックオーバーフローなしでピンポンのようなタスクを実行するための継続またはコルーチンがありますか? Pythonの例(標準のPythonは、この対称コルーチンの完全な機能を備えたバージョンをサポートしていません): def ping(): while 1: print "ping" function to switching to pong def pong(): while 1: function to switching to ping print "pong"

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.