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

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

1
ClojureとScalaのパターンマッチング
これら2つの言語のパターンマッチングの主な違いは何ですか?構文ではなく、機能、実装の詳細、ユースケースの範囲、必要性について言及しています。 Scalaアプリケーション(Lift and Playなど)は、言語のパターンマッチングの能力について誇らしげに語っています。一方、Clojureにはライブラリcore.matchがあり、破壊機能が組み込まれていますが、これも強力なようです。 *注:私がこの質問をすることに触発された理由は、実験としてプログラマがScalaとClojureの両方を使用してlispインタープリターを作成したブログ投稿でした。彼は、Clojureの試合が一定の長さの後に壊れたと言ったが、その理由を説明できなかったが、私は本当に知りたいと思っている。この投稿はここで見つけることができます:http : //www.janvsmachine.net/2013/09/writing-simple-lisp-interpreter-in-clojure.html

2
関数型プログラミングとステートフルアルゴリズム
Haskellで関数型プログラミングを学んでいます。それまでの間、私はオートマタ理論を研究しており、この2つがうまく調和しているように思えるので、オートマタで遊ぶための小さなライブラリを書いています。 これが私に質問をさせた問題です。状態の到達可能性を評価する方法を研究しているときに、いくつかのパスがいくつかの状態を共有する可能性があり、それらを複数回評価する可能性があるため、単純な再帰アルゴリズムは非常に非効率であるという考えを得ました。 たとえば、ここで、aからgの到達可能性を評価する場合、dとcを通るパスをチェックする際にfの両方を除外する必要があります。 だから私の考えは、多くのパスで並行して動作し、除外された状態の共有レコードを更新するアルゴリズムは素晴らしいかもしれないということですが、それは私にとってはやり過ぎです。 いくつかの単純な再帰の場合、引数として状態を渡すことができることがわかりました。ループを回避するために通過した状態のリストを転送するため、ここで行う必要があります。しかし、リストを逆方向に渡す方法はありcanReachますか?たとえば、関数のブール結果と一緒にタプルで返すのですか?(これは少し強制的に感じますが) 例題の妥当性に加えて、この種の問題を解決するために利用できる他のテクニックは何ですか?これらはと何が起こるかのようなソリューションがあるように持っていることを一般的に十分でなければならないような気がしますfold*かmap。 これまでのところ、learnyouahaskell.comを読んで何も見つかりませんでしたが、まだモナドに触れていないことを考慮してください。 (興味があれば、コードレビューにコードを投稿しました)

1
機能的リアクティブ/リレーショナルプログラミング–違いはありますか?
私が使用してきた反応ココア(GitHubによる)、機能性反応性今しばらくの間、ココアライブラリで使用するためのプログラミングAPIを、ちょうど読みました「タールピットのアウト」、おそらくその背後にある概念を提示することを紙、私は少し混乱しています。 この論文は(私が理解しているように)関数関係プログラミングを提示します。データ間の関係は、必要な「偶発的な」ロジックと状態の量を減らすためにFRPシステムによって強制される条件で作成されます。 私の質問は、これらの2つの概念-FR(eactive)PとFR(elational)Pは本質的に同じものですか(前者は後者の実装にすぎません)、または2つのコアの違いはありますか?残念ながら、現時点では、この分野に関する私の知識は、それらを十分に差別化するのに十分ではありません。 違いがある場合は、名前が示すように、データの変更に反応しているように見えます。確かに、Reactive Cocoa(およびC#のRx)には、データの変更でトリガーされるシグナルを作成するという概念があり、時間をかけて継続的に値を変更するために使用できます。 これは違いですか?そうでない場合、何ですか? (不適切なタグ付けはご容赦ください。関連するタグが見つからず、まだ作成できません。可能な場合は、タグをより適切なものに更新してください。)

2
関数型リアクティブプログラミング—フェイは十分に表現力がありますか?
だから私はかなり多くのajax呼び出しとコールバックイズムの他の関与でかなり関与したjavascript / htmlクライアントをやっています。私はこの目的のためにFayを使用することを考えています。私はエルムを知っています。それを試してみて、FRPの要素が好きだった。今、私はフェイで同様の構造が可能かどうかを知りたいと思っています。 この時点でFayにFRPの具体的な例はありますか? 関連する技術: Arrowlets、javascriptの矢印付きFRP FlapJax、別のJavaScriptの代替 Bacon.js、javascriptのFRP Baconを使用した解決策の1つ。デモ。

1
Java 8で関数型を削除する理由
JDK 8 Lambda Expert Group(EG)がJavaプログラミング言語に新しい関数タイプを含めないことにした理由を理解しようとしています。 メーリングリストを調べると、関数型の削除に関する議論のスレッドが見つかりました。 文の多くは私にとって曖昧です。おそらくコンテキストがないためであり、場合によっては型システムの実装に関する知識が限られているためです。 ただし、このサイトで安全に定式化できると思われるいくつかの質問があり、それらの意味をよりよく理解するのに役立ちます。 メーリングリストで質問をすることはできますが、スレッドは古く、すべての決定がすでに下されているので、私は無視される可能性があります。とりわけ、これらの人がすでに計画で遅れていることがわかります。 関数型の削除をサポートし、SAM型の使用を推奨するという彼の答えで、Brian Goetzは次のように述べています。 具体化なし。関数型を具体化することの有用性について長いスレッドがありました。具体化しないと、関数の型はぐらついています。 彼が言及しているスレッドが見つかりませんでした。今、私は、構造関数型の導入がJavaのほとんど名義型システムに特定の複雑さを暗示しているかもしれないことを理解できます。理解できないのは、具体化されたSAM型の具体化の違いです。 彼らは両方とも同じ具体化の問題の対象ではありませんか?関数型が具体化の観点からパラメータ化されたSAM型とどのように異なるかを誰もが理解していますか? 別のコメントで、ゲッツは次のように述べています。 タイピングには、名義型と構造型の2つの基本的なアプローチがあります。名義のアイデンティティはその名前に基づいています。構造型のアイデンティティは、それが構成されているものに基づいています(「int、intのタプル」または「intからfloatへの関数」など)。ほとんどの言語は、ほとんど名義的またはほとんど構造的です。「辺り」を除いて、名義型と構造型をうまく組み合わせた言語は多くありません。Javaはほぼ完全に名義です(いくつかの例外を除きます:配列は構造型ですが、下部には常に名義要素型があります;ジェネリックには名義型と構造型も混在しており、これは実際には多くのソースの一部ですジェネリックに関する人々の苦情の報告。)構造型システム(関数型)をJavaに移植する s名義型システムは、新しい複雑さとエッジケースを意味します。関数型の利点はこれだけの価値がありますか? 型システムの実装の経験がある方。彼がここで言及しているこれらの複雑さやエッジケースの例を知っていますか? 正直に言って、JVMに完全に基づいているScalaのようなプログラミング言語が、基盤となるプラットフォームの具体化の問題があっても、関数やタプルなどの構造型をサポートしていると考えると、これらの申し立てに混乱します。 誤解しないでください。関数型はSAM型よりも優れているべきだと言っているのではありません。彼らがこの決定をした理由を理解したいだけです。

10
可変変数を使用せずに有用なJavaプログラムを作成する方法
私は読んでいた関数型プログラミングについての記事をどこライター状態 (take 25 (squares-of (integers))) 変数がないことに注意してください。実際、3つの関数と1つの定数しかありません。変数を使用せずにJavaで整数の2乗を書いてみてください。おそらく、それを行う方法はありますが、それは確かに自然なことではなく、上記の私のプログラムほど読みやすくはありません。 Javaでこれを達成することは可能ですか?最初の15個の整数の2乗を出力する必要がある場合、変数を使用せずにforループまたはwhileループを記述できますか? Mod通知 この質問は、コードゴルフコンテストではありません。関係する概念を説明する(理想的には以前の回答を繰り返さずに)答えを探しています。さらに別のコードだけではありません。

2
シミュレーションおよびモデリング用のFP
シミュレーション/モデリングプロジェクトを開始しようとしています。OOPがこの種のプロジェクトに使用されていることは既に知っています。しかし、Haskellを勉強することで、コンポーネントのシステムのモデリングにFPパラダイムを使用することを検討しました。詳しく説明します。 データセット(温度や圧力、PDE、境界条件などのパラメーター)で特徴付けられるタイプAのコンポーネントと、異なるデータセット(異なるまたは同じパラメーター、異なるPDEおよび境界条件)。また、各コンポーネントに適用される関数/メソッドが同じであると仮定しましょう(たとえば、Galerkinメソッド)。オブジェクトの可変状態は、定数でないパラメーターに使用されます。 OOPアプローチを使用する場合、各タイプのデータをカプセル化する2つのオブジェクト、PDEを解決するメソッド(ここではコードの再利用に継承が使用されます)、およびPDEのソリューションを作成します。 一方、FPアプローチを使用する場合、各コンポーネントは、PDEのソリューションを取得するためにデータパーツとデータに作用する関数に分割されます。非定数パラメーターは、他の何かの関数として渡されるか(たとえば、時間)、ある種の可変性(可変性のエミュレーションなど)で表現されます。 結論として、FPアプローチの実装は、OOPアプローチと比較して、実際にはシンプルで管理しやすい(pdeを解決するために異なるタイプのコンポーネントまたは新しいメソッドを追加する)でしょうか? 私はC ++ / Fortranのバックグラウンドを持っていますが、プロのプログラマーではないので、間違いがあれば修正してください。

5
ConwayのGame of Lifeを実装する機能プログラミングの方法は何ですか[非公開]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 私は最近、ConwayのGame of LifeをJavascript(実際はcoffeescriptですが同じこと)で実装しました。javascriptは関数型言語として使用できるので、私はその範囲の終わりにとどまろうとしていました。結果に満足できませんでした。私はかなり優れたオブジェクト指向プログラマーであり、私の解決策は同じ古いものを叩きました。長い質問は短い:それを行う(擬似コード)機能スタイルは何ですか? これが私の試みの擬似コードです。 class Node update: (board) -> get number_of_alive_neighbors from board get this_is_alive from board if this_is_alive and number_of_alive_neighbors < 2 then die if this_is_alive and number_of_alive_neighbors > 3 then die if not this_is_alive and number_of_alive_neighbors == 3 then alive class NodeLocations at: (x, y) …

3
より高いレベルの関数型プログラミングに進む方法[終了]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 4年前に閉鎖されました。 これがこの質問にふさわしくない場合はまずおaび申し上げますが、th.CSはStackOverflowでもふさわしくないのではないかと思います。 私は関数型プログラミングが大好きで、F#の中級レベルの人間であり、Haskellの基本概念をかなりよく理解していると思います。 今、私は本当にこれを次のレベルに持っていき、ファンクターやものについてのすべての話が何であるかを理解したいです。どこから始めればいいのかわかりません。 ラムダ計算について何かお読みになりましたか?カテゴリー理論?私は少し知っていますが、これが正しい/最も早い啓発方法だとは思いません。 たぶん、あなたは私にそれについていくつかのヒントを与えることができます。 PS:私は数学を恐れず、練習問題に簡単にイライラすることはありませんが、この方法でフィードバックをすぐに得ることができるので、コードを置くことができるイントロ/テキストを好むでしょう。

5
関数型プログラミングはまったく違うのですか、それとも実際にはもっと難しいのですか?
関数型プログラミングはまったく違うのですか、それとも実際にはもっと難しいのですか? プログラミングをまったく学んだことがなく、関数型プログラミングを教えられた人のことを言ってください。vsプログラミングをまったく学んだことがなく、命令型プログラミングを教えられた人。彼はどちらが厳しいでしょうか?または同じ? 私の質問:今の問題は入力をキャメルケースにすることだと言って、 そのようにqwe_asd_zxc_rty_fgh_vbnなるqweAsdZxcRtyFghVbn 手順は次のとおりです。 に沿って分割する _ 最初の項目をスキップして配列をループします エントリごとに最初の文字を大文字にします 結果を結合する 機能的な方法は次のとおりです。 _返品が見つからない場合input input最初に沿ってカットします_(取得するqweおよびasd_zxc_rty_gfh_cvb) の最初の文字を大文字にし、headそれを連結しますf(tail) あなたが持っている場合は[OK]を機能的なバックグラウンドをと手続きプログラミングにおける豊富な経験を持って、私はお願いしたいと思います:それは、手続きの方法を見つけ出すにお時間がかかりますか、それは機能的な方法を把握するためにあなたのために長い時間がかかりますか? あなたが持っている場合は、手続き-背景をが、機能、プログラミングで長年の経験を持って、私は同じ質問をしたいと思います:それは、手続きの方法を見つけ出すにお時間がかかりますか、それは、機能を把握するために、あなたのために時間がかかります仕方?

4
関数型プログラミング—不変性
私はFPで不変データを扱うことを理解しようとしています(特にF#ですが、他のFPも大丈夫です)、ステートフル思考(OOPスタイル)の古い習慣を破ります。ここでの質問に対する選択された回答の一部は、OOPのステートフルな表現とFPの不変な表現(たとえば、プロデューサーとコンシューマーのキュー)によって解決される問題に関する記述の検索を繰り返しました。何か考えやリンクは大歓迎ですか?前もって感謝します。 編集:質問をもう少し明確にするために、FPで複数のスレッド(例:プロデューサーとコンシューマー)で不変の構造(例:キュー)を同時に共有する方法

4
商用ソフトウェアでの関数型プログラミング
私は最近、同僚と関数型プログラミングについて議論していました。FPにはいくつかの明らかな利点(単純なコード、数学的に簡単に推論できるなど)があることに2人で合意しましたが、どちらも商用ソフトウェアで使用されるのか、使用されるのかを考えました。 機能的に書かれたオープンソースやアカデミックなプロジェクトがたくさんあることは知っています(たとえば、Stack Overflowでこの質問を見たことがあります)が、少なくとも部分的に書かれた他の商用ソフトウェアをリストできる人はいないかと思います関数型言語(およびどの言語)で。

2
機能的なコンピューターを構築できますか?
FPがやったように、結局、すべてのプログラムは構造化されています。つまり、どれだけ純粋に機能するかは問題ではありません。常にアセンブリに変換されるため、実際に実行されるのは命令、状態、ループです。FPをエミュレートしています。 ハードウェア初心者として、私の質問は次のとおりです。機能スタイルで実際に計算するコンピューターアーキテクチャを使用しないのはなぜですか。たとえば、コンピューターは「concat」、「map」、「reduce」などのプリミティブな「機能チップ」で構成できます。プログラムは、目的の結果を計算するために、これらのチップ間でデータを流す方法をコンピューターに伝えるだけです、連結言語など。 これは本当に意味をなさないが、私が考えていることを説明するかもしれない。

3
クラス内の属性を事前に初期化することをお勧めしますか、それとも途中で追加することですか?
これが絶対に二日酔いの質問である場合は申し訳ありませんが、ベストプラクティスがどこにあるのか興味があり、Googleで良い答えを見つけることができないようです。 Pythonでは、通常、空のクラスをスーパーキャッチオールデータ構造コンテナー(JSONファイルのようなもの)として使用し、途中で属性を追加します。 class DataObj: "Catch-all data object" def __init__(self): pass def processData(inputs): data = DataObj() data.a = 1 data.b = "sym" data.c = [2,5,2,1] これにより、コンテナオブジェクトは基本的に何でも保存できるため、非常に大きな柔軟性が得られます。したがって、新しい要件が生じた場合は、DataObjオブジェクトに別の属性として追加します(コードで渡します)。 しかし、最近、コードの読み取りが非常に難しくなるため、これはひどい慣行であると私(FPプログラマー)に感銘を受けました。すべてのコードを調べて、DataObjが実際に持っている属性を把握する必要があります。 質問:柔軟性を犠牲にすることなく保守性を高めるために、これをどのように書き直すことができますか? 関数型プログラミングから採用できるアイデアはありますか? 私はそこにベストプラクティスを探しています。 注:1つの考えは、遭遇することが予想されるすべての属性でクラスを事前初期化することです。例えば class DataObj: "Catch-all data object" def __init__(self): data.a = 0 data.b = "" data.c = [] def processData(inputs): data = …

4
非OOPパラダイムは、カプセル化などの概念をサポートしていますか?
オブジェクト指向プログラミングの重要な概念の1つはカプセル化です。ただし、最近のソフトウェアの世界は、関数型プログラミングなどの他のパラダイムに傾倒しているようです。 それは私に、カプセル化と他のOOP原則についてはどう思いますか?彼らは間違っていますか? OOPが間違って適用されているのですか?たとえば、アランケイはOOPSLA'97基調講演で言ったことで注目されています。 Joe Armstrong-「オブジェクトは関数とデータ構造を分割できない単位でバインドします。関数とデータ構造はまったく異なる世界に属しているため、これは根本的なエラーだと思います。」

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