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

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

1
関数型プログラミング言語で分岐限定を実装する方法は?
すべての関数f:D-> Rのセットで分岐および境界検索を作成しようとしています。ここで、ドメインサイズは小さく(| D |〜20)、範囲ははるかに大きくなります(| R |〜2 ^ 20 )。最初に、私は次の解決策を思いつきました。 (builder (domain range condlist partial-map) (let ((passed? (check condlist partial-map))) (cond ((not passed?) nil) (domain (recur-on-first domain range condlist partial-map '())) (t partial-map)))) (recur-on-first (domain range condlist partial-map ignored) (cond ((null range) nil) (t (let ((first-to-first (builder (cdr domain) (append ignored …

6
関数型プログラミングはオブジェクト指向のスーパーセットですか?
私がより機能的なプログラミングをすればするほど、タマネギのレイヤーが以前のレイヤーをすべて包含しているように見える、抽象化のレイヤーが追加されたように感じます。 私はこれが本当かどうかわからないので、私が長年取り組んできたOOP原則から外れると、誰もそれらがどれほど正確に機能するかを説明できます:カプセル化、抽象化、継承、多態性 私たちは皆、タプルを介してカプセル化されていると言うことができると思いますか、タプルは技術的に「関数型プログラミング」の事実としてカウントされますか、それとも単に言語のユーティリティですか? Haskellが「インターフェース」の要件を満たすことができることは知っていますが、メソッドが機能するかどうかは確かではありませんか?ファンクターが数学的な基礎を持っているという事実は、おそらく機能的な期待に基づいて構築されていると思いますか? 機能的にOOPの4つの原則を満たしている、または満たしていないと思う方法を詳しく説明してください。 編集:私は機能的パラダイムとオブジェクト指向パラダイムの違いをうまく理解しており、最近では両方を実行できるマルチパラダイム言語がたくさんあることを認識しています。私は本当に、完全なfp(haskellのような純粋主義者と考えてください)がリストされた4つのことのどれを行うことができるか、またはなぜそれらのいずれもできないのかの定義を探しています。すなわち、「カプセル化はクロージャを使用して行うことができます」(またはこの信念に誤りがある場合は、理由を述べてください)。

6
純粋な関数型プログラミング言語は、割り当てステートメントなしでどのように管理しますか?
有名なSICPを読んだとき、著者は第3章でSchemeに代入文を導入することにかなり消極的であるように見えました。私はテキストを読み、彼らがそう感じる理由を理解します。 Schemeは私が知っている最初の関数型プログラミング言語であるため、割り当てなしで実行できる関数型プログラミング言語(もちろんSchemeではない)があることに驚いています。 本が提供する例を使用してみましょうbank account。割り当てステートメントがない場合、これをどのように行うことができbalanceますか?変数を変更する方法は?いわゆる純粋な関数型言語が存在することを知っているので、私はそう尋ねます。チューリング完全理論によれば、これもできるはずです。 私はC、Java、Pythonを学び、書いたすべてのプログラムで多くの割り当てを使用しました。本当に目を見張るような体験です。これらの関数型プログラミング言語で割り当てがどのように回避されるか、またそれらがこれらの言語に与える深刻な影響(もしあれば)を簡単に説明してくれることを本当に期待しています。 上記の例は次のとおりです。 (define (make-withdraw balance) (lambda (amount) (if (>= balance amount) (begin (set! balance (- balance amount)) balance) "Insufficient funds"))) これによりが変更されましbalanceたset!。私には、クラスメンバーを変更するクラスメソッドによく似ていますbalance。 私が言ったように、私は関数型プログラミング言語に精通していないので、それらについて何か間違ったことを言ったら、気軽に指摘してください。


2
純粋な言語のガベージコレクションはどの程度違いますか?
Haskellのような純粋な言語では、すべてのデータは不変であり、既存のデータ構造は一切変更できません。さらに、不変データおよび関数型プログラミングパターンに関する多くのアルゴリズムは、本質的に大量のガベージをmap生成します(たとえば、中間リストの作成のチェーン)。 ガベージコレクターは、他の方法ではできない純度に直面して、どのような戦略と手法を採用していますか?純粋なコンテキストではない不純な言語のGCでうまく機能するものは何ですか?純粋な言語はGCに対して他にどのような新しい問題を引き起こしますか?

5
オブジェクト指向プログラムを機能的なものにリファクタリングする方法は?
機能的なスタイルでプログラムを作成する方法に関するリソースを見つけるのが困難です。オンラインで議論された最も高度なトピックは、構造型付けを使用してクラス階層を削減することでした。ほとんどはmap / fold / reduce / etcを使用して命令型ループを置き換える方法を扱っています。 私が本当に見つけたいのは、自明ではないプログラムのOOP実装、その制限、およびそれを機能的なスタイルにリファクタリングする方法についての詳細な議論です。アルゴリズムやデータ構造だけでなく、いくつかの異なる役割と側面を持つもの-ビデオゲームかもしれません。ちなみに、私はTomas PetricekによるReal-World Functional Programmingを読みましたが、もっと欲しいと思っています。

2
Chris Okasakiの1996年の論文と1999年の本、Purely Functional Data Structuresの内容の違いは何ですか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 4年前に閉鎖されました。 純粋に機能的なデータ構造を読みたい。私は簡単に論文(PDFとして無料で入手可能)を見つけましたが、書籍も入手できることを確認します。ですから、これらの2つの出版物の違いがあれば、それが何かを知りたいと思います。

7
関数型言語では異なるコメントが必要ですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 関数型プログラミングを始めたばかりで、コードをコメントする正しい方法について疑問に思っています。 名前と署名はすでにあなたが知る必要があるすべてをあなたに伝えるはずなので、短い関数をコメントすることは少し冗長に思えます。大きな関数は一般的に小さな自己記述関数で構成されているため、大きな関数のコメントも少し冗長に見えます。 機能的なプログラムにコメントする正しい方法は何ですか?反復プログラミングと同じアプローチを使用する必要がありますか?

13
関数型プログラミングに対するあなたの最も強い意見は何ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または詳細な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 8年前に閉鎖されました。 関数型プログラミングは、最も古いプログラミングパラダイムの1つです。ただし、より一般的なパラダイムと比較して、業界ではあまり使用されていません。しかし、それは主に学界で強調されてきました。 関数型プログラミングに対するあなたの最も強い意見は何ですか?

4
機能的なスタイルの例外処理
関数型プログラミングでは、例外をスローしたり、観察したりすることは想定されていません。代わりに、誤った計算はボトム値として評価する必要があります。Python(または関数型プログラミングを完全に奨励していない他の言語)Noneでは、None何かが「純粋のまま」に失敗したときはいつでも返すことができますしたがって、最初にエラーを観察する必要があります。つまり、 def fn(*args): try: ... do something except SomeException: return None これは純度に違反しますか?もしそうなら、それは純粋にPythonでエラーを処理することが不可能であることを意味しますか? 更新 彼のコメントで、Eric LippertはFPの例外を処理する別の方法を思い出しました。実際にPythonでそれが行われるのを見たことはありませんが、1年前にFPを勉強したときに、Pythonで遊んでみました。ここで、任意のoptional-decorated関数はOptional、通常の出力および指定された例外のリストに対して空の値を返します(指定されていない例外でも実行を終了できます)。Carry遅延評価を作成します。各ステップ(遅延関数呼び出し)Optionalは、前のステップから空でない出力を取得して単純に渡すか、それ以外の場合はnewを渡して評価しますOptional。最終的に、最終値はnormalまたはEmptyです。ここでは、try/exceptブロックはデコレータの後ろに隠されているため、指定された例外は戻り値型シグネチャの一部と見なすことができます。 class Empty: def __repr__(self): return "Empty" class Optional: def __init__(self, value=Empty): self._value = value @property def value(self): return Empty if self.isempty else self._value @property def isempty(self): return isinstance(self._value, BaseException) or self._value is Empty def __bool__(self): …

5
C#で不変オブジェクト間の循環参照をモデル化する方法は?
次のコード例には、部屋を表す不変オブジェクトのクラスがあります。北、南、東、および西は、他の部屋への出口を表します。 public sealed class Room { public Room(string name, Room northExit, Room southExit, Room eastExit, Room westExit) { this.Name = name; this.North = northExit; this.South = southExit; this.East = eastExit; this.West = westExit; } public string Name { get; } public Room North { get; } public Room South { …

5
パフォーマンス:Javascriptでの再帰と反復
私は最近、Javascriptの機能面と、SchemeとJavascriptの関係に関する後者の記事(例:http : //dailyjs.com/2012/09/14/functional-programming/)を読みました。 OOの側面はプロトタイピングベースの言語であるSelfから継承されますが、機能的な言語です。 しかし、私の質問はより具体的です:Javascriptの再帰と反復のパフォーマンスに関するメトリックがあるかどうか疑問に思っていました。 一部の言語では(設計の反復によりパフォーマンスが向上する)、インタープリター/コンパイラーが再帰を反復に変換するため、差は最小限に抑えられますが、少なくとも部分的には機能的であるため、おそらくJavascriptのケースではないでしょう言語。


6
関数型プログラミングでは、副作用のないローカル可変変数は依然として「悪い習慣」と見なされますか?
内部でのみ使用される関数内に可変ローカル変数を持っていますか(たとえば、少なくとも意図的に副作用がないなど)、まだ「非機能的」と見なされますか? たとえば、「Scalaをvar使用した関数型プログラミング」のコーススタイルチェックでは、使用法が不適切であると見なされます。 私の質問、関数に副作用がない場合、命令型のコードを書くことはまだ推奨されていませんか? たとえば、アキュムレータパターンでテール再帰を使用する代わりに、入力が変更されない限り、ローカルforループを実行し、ローカルミュータブルListBufferを作成して追加することの何が問題になっていますか? 答えが「はい、副作用がなくても常に落胆している」場合、その理由は何ですか?

5
オブジェクト指向プログラミングのパラダイムは、反モジュラーおよび反並列であるため、時代遅れですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 CMUの教授であるRobert Harperが投稿した論争の的となっている記事Teaching FPを新入生に読みました。彼は、CMUが「最新のCSカリキュラムには適さない」ため、入門コースでオブジェクト指向プログラミングを教えることはもはやないと主張しました。 そして彼はそれを主張した: オブジェクト指向プログラミングは、その性質上、反モジュラーかつ反平行であるため、導入カリキュラムから完全に排除されます。 OOPを反モジュラーおよび反並列と見なす理由

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