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

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

4
静的型付け機能コードの単体テスト
haskell、scala、ocaml、nemerle、f#、またはhaXeで記述された静的に型付けされた機能コードを単体テストするのが理にかなっています(最後は本当に興味のあることですが、より大きなコミュニティの知識を活用してください)。 私の理解から: 単体テストの1つの側面は、仕様を実行可能な形式にすることです。ただし、形式化された仕様を言語セマンティクスに直接マップする宣言スタイルを使用する場合、実際に仕様を実行可能な形式で別の方法で表現することもできますか? 単体テストのより明白な側面は、静的分析では明らかにできないエラーを追跡することです。型安全機能コードは、静的アナライザーが理解するものに非常に近いコードを作成するための優れたツールであることを考えると、多くの安全性を静的分析にシフトできるように思われます。ただし、コードxでy(両方とも座標)の代わりに使用するような単純なミスはカバーできません。OTOHこのような間違いは、テストコードの作成中にも発生する可能性があるため、努力する価値があるかどうかはわかりません。 ユニットテストでは冗長性が導入されます。つまり、要件が変更された場合、それらを実装するコードとこのコードをカバーするテストの両方を変更する必要があります。もちろん、このオーバーヘッドはほぼ一定であるため、実際には問題ではないと主張することができます。実際、Rubyのような言語では実際には利点と比較されませんが、静的に型指定された関数型プログラミングが地上ユニットテストの多くを対象としていることを考えると、ペナルティなしで単純に削減できる一定のオーバーヘッドのように感じます。 このことから、このプログラミングスタイルでは単体テストはやや時代遅れであると推測します。もちろん、そのような主張は宗教的な戦争につながる可能性があるため、簡単な質問に要約します。 このようなプログラミングスタイルを使用する場合、単体テストをどの程度使用し、その理由は何ですか(コードでどの程度の品質を得たいと考えていますか)。または、逆に、静的アナライザーでカバーされているため、ユニットテストのカバレッジを必要とせずに、静的に型指定された機能コードのユニットを修飾できる基準はありますか?

6
開発環境への関数型プログラミングの導入[終了]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 これは長い話ですが、できる限りベストを尽くして要約します。私たちは、さまざまな種類の資金のためのソフトウェアを書く.NETショップです。たとえば、健康保険金請求管理ソフトウェア、年金管理ソフトウェア、401(k)ソフトウェア、およびその他の金融タイプのものを作成します。 今、私たちは新しい領域に入ります:デリバティブと定量分析タイプの仕事です。これは、私が言われた次の8〜12か月で落ちてくるものです。 今、私は自分自身でいくつかの関数型プログラミングを学びました。主に、この本を通してさまざまな言語の表面的な目線を見ただけですが、深く掘り下げたことはありません。今、私たちは.NETショップなので、F#が良い選択だと思っていました。なぜなら、.NETライブラリと既存の知識を潜在的に活用できるからです。 私の質問は、どこから始めればいいですか?Haskell、Erlang、Scala、F#などと一緒に行くべきかどうかを判断しようとするのは非常に困難です。これらはすべて非常に興味深く、能力があるように見えます。 誰も同じような状況がありましたか?そうだとすれば、機能性へのジャンプを行った経験は何でしたか?私はこれが一種の大きな質問であることを知っていますが、現在関数型のメソッドを使用している開発者は知りませんので、グーグルを絶えず変え、最高の関数型言語のどこでも炎の戦争を見つけること以外に私は他にどこにもありません。

2
美しいアーランコード[閉鎖]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新する Software Engineering Stack Exchangeのトピックになるようにします。 4年前に閉鎖されました。 私は今まで遊んでいたおもちゃプロジェクトよりもErlangについてもっと学ぼうとしています。この目的のために、私はProgramming Erlangといくつかのアーカイブを読んでいます Armstrong on Softwareの。 また、他の言語では不釣り合いに難しいと思われるErlangで作成できるものの種類を紹介するサンプルコード(できれば製品版)を読みたいと思います。を除いて(私は仮定する)Yawsに、言語の理解を深めたり、さまざまな言語構成体の慣用的な使用法を確認したりするために読み通せる美しいErlangコードの公開例はありますか? 私は特にそうではない「仕事を取得します」というコードを探していますが疑わしい慣行、または「ここにあなたが書く方法ですの線に沿っ例使用factorialErlangでの」。 同様に、この言語を学習するための優れた文献(言及されている「プログラミングアーラン」以外)をお勧めできますか?好みとしては、あなた自身がそれを学習するために使用したものですが、コミュニティ標準の本がいくつかある場合は、それらも入れてください。

2
組み込みソフトウェアの関数型プログラミング[終了]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新することがありますので、上のトピックソフトウェア工学スタックExchange用。 5年前に閉鎖されました。 昨夜、F#と関数型プログラミングについて友人と話し合っていたところ、彼から興味深い質問が寄せられました。組み込みソフトウェアをどのように機能させますか?つまり、これはステートレスコードの点ではかなり自然に似ているように見えますが、埋め込みにはメモリが非常に不足していることも伴うため、その点で機能的なストーリーはわかりません。 組み込み機能付きの言語またはパッケージに関する提案はありますか?

1
Freeモナドとリアクティブエクステンションはどのように相関しますか?
私はLINQがRx.NETに進化したC#のバックグラウンドから来ましたが、FPには常に興味がありました。F#でモナドといくつかのサイドプロジェクトを紹介した後、次のレベルに進む準備ができました。 さて、Scalaの人々からの無料のモナドに関するいくつかの講演と、HaskellまたはF#での複数の記事の後、理解がIObservableチェーンに非常に類似していることを理解するための通訳付き文法が見つかりました。 FRPでは、チェーン内に留まる副作用や障害を含む、より小さなドメイン固有のチャンクから操作定義を作成し、一連の操作と副作用としてアプリケーションをモデル化します。無料のモナドでは、私が正しく理解していれば、ファンクターとして操作を行い、coyonedaを使用してそれらを持ち上げることで同じことを行います。 針をアプローチのいずれかに向けて傾ける両方の違いは何ですか?サービスまたはプログラムを定義するときの基本的な違いは何ですか?

4
Monadsはどのようなプログラミング上の問題を解決しますか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 3年前に閉店しました。 私はモナドがどのように、何であるかを説明記事をたくさん読んだunitし、bindそれは目がいくつかのつまり完全に無視して、出血との奇妙なアナロジーに触れます(少なくとも私にとっては)それらのいくつかは、抽象ので圏論にまっすぐ急落仕事を、ブリトー、ボックスなど。 数週間の研究と多くの揚げたニューロンの後、(私は思う)モナドがどのように機能するかを理解しています。しかし、私の理解を逸するものがまだ1つあります。実際に触れている投稿はほとんどありません(IOと状態を除く)。 どうして? モナドが重要なのはなぜですか?なぜそんなに重要なのですか?彼らが解決している問題は何ですか?これらの問題はMonadsでのみ解決できますか、それとも他の方法がありますか?

3
関数型プログラミングで管理可能なコードを書く方法は?
私は関数型プログラミング(JavaScriptとNode.jsを使用)を開始しましたが、見た目からは、作成しているコードは、オブジェクト指向のパラダイムの一種。 OOPを使用すると、コードを簡単に管理し、拡張可能にするためのプラクティスに精通しています。しかし、関数型プログラミングでも同様の慣習があるのは確かです。

5
FP思考に慣れている人は命令型コードをどのように読むべきですか?
私は約5か月前に大学を卒業し、過去4か月間地元の新興企業で働いています。大学にいる間、私はHaskellやF#などを自分で勉強しました。私たちは大学でJavaを教えられましたが、すぐに関数型プログラミングに触れるようになり、命令型プログラミングよりもはるかに多くの時間を費やしました。その結果、私の脳は機能的思考のために配線されています。私が参加した会社はPythonを使用しており、コードは非常に重要です。私は命令型コードを読むのに非常に苦労しています。変異を追跡することはできません。for-if-else-for -...のネストが4レベルを超える深さになると、コードで何が起こっているかを完全に把握できなくなります。さらに、Pythonは動的言語であるため、コードには型がありません。それ' コードベースの一部(おそらく「適度に複雑な」)を理解しようとしてから数週間が経ちましたが、これまでのところ理解できるほどの進展はありませんでした。そのコードを理解する方法についての実用的なテクニックをいくつか教えてください。前もって感謝します! 編集: コードに実際にはあまりコメントがなく、名前もあまり直感的ではないことを言及する必要があります。

5
Haskellから得た知識とスキルをエクスポートするために最も互換性があり、広く使用されている生産言語は何ですか?
私はHaskellが好きで、シンプルでシンプルです。Haskellは本番ソフトウェアで使用されていますが、私が見たものから特に広く展開されているわけではありません。業界で同様に素晴らしいものを使用する雪だるまの機会を得るために、生産プロジェクトに関して最も類似しており、まだ広く使用されている言語は何ですか? また、最初の部分と同じ言語が多数のプラットフォームで利用可能ですか?そうでない場合、プラットフォームを幅広く展開するのに最適な代替手段は何ですか?大規模な群れや家族ではなく、1つの言語でTo Doリストを作成したいです。確固たる証拠はプラスになります。

4
基本的なハードウェアと機能的パラダイムがあまりにも異なるため、一般的に効率的ではないでしょうか?
SOからの質問に触発された:https : //stackoverflow.com/questions/6623391/how-to-gain-control-of-a-5gb-heap-in-haskell FPの多くの長所と短所については長い議論の余地がありますが、現時点では、最新のハードウェアでのFPの主な効率に範囲を絞りたいと思います。 定説: 機能的パラダイムは不変性とステートレス(?)を意味しますが、機能的プログラムを実行するハードウェアはステートフルな有限オートマトンです。「純粋な機能」プログラムを「ステートフルなハードウェア」表現に変換すると、プログラマーはほとんど制御できず、オーバーヘッド(?)が発生し、ハードウェア機能の使用が制限されます(?)。 私は疑問の声明で正しいか間違っていますか? FPは、現代の汎用コンピューターアーキテクチャでの主要なパフォーマンスペナルティを意味する/しないことを証明できますか? 編集: いくつかのコメントに応じて既に述べたように、質問は実装のパフォーマンスと詳細に関するものではありません。これは、プリンシパルオーバーヘッドの有無に関するものであり、ステートフルオートマトンでFPを実行するともたらされる可能性があります。

3
関数型プログラミングとテキストアドベンチャー
これは主にFPに関する理論的な質問ですが、私のポイントを説明するためにテキストアドベンチャー(古い学校のZorkなど)を取り上げます。FPを使用してステートフルシミュレーションをどのようにモデル化するかについて、ご意見をお聞かせください。 テキストアドベンチャーには、本当にOOPが必要です。たとえば、すべての「部屋」はRoomクラスのインスタンスであり、基本的なItemクラスとItem<Pickable>持ち運びできるものなどのインターフェイスを持つことができます。 FPでのワールドモデリングの動作は異なります。特に、ゲームの進行(オブジェクトの移動、敵の敗北、スコアリングの増加、プレイヤーの位置の変更)に応じて変化する必要があるワールドに不変性を適用する場合。私Worldはそれをすべて備えた単一の大きなオブジェクトを想像します。探索できる部屋は何か、それらはどのようにリンクされているか、プレイヤーは何を運んでいるか、どのレバーがトリガーされたか。 純粋なアプローチは、基本的にこの大きなオブジェクトを任意の関数に渡し、それらによって返される(おそらく変更される)ことだと思います。例えば、私は新しい部屋に変更されてそれをmoveToRoom取得Worldして返す関数を持っています。World.player.locationWorld.rooms[new_room].visited = True これがより「正しい」方法であっても、そのために純粋さを強制しているようです。プログラミング言語によっては、この潜在的に非常に大きなWorldオブジェクトをやり取りするのに費用がかかる場合があります。また、すべての関数がWorldオブジェクトにアクセスする必要がある場合があります。たとえば、部屋は浸水する可能性があるため、他の部屋でトリガーされたレバーに応じてアクセス可能またはそうでない場合がありますが、プレイヤーがライフジャケットを持っていれば、とにかく入ることができます。モンスターはプレイヤーが別の部屋でいとこを殺害したかどうかによって攻撃的であるかもしれません。この手段roomCanBeEnteredの機能は、アクセスする必要があるWorld.player.invetoryとWorld.rooms、describeMonsterアクセスする必要があるWorld.monstersので、(基本的に、あなたがしなければなりません負荷全体を渡します)。これは、特にFPのプログラミングスタイルが優れている場合でも、グローバル変数を呼び出すように思えます。 この問題をどのように解決しますか?

8
関数型言語の構文が人間の言語により近いのはなぜですか?
私は関数型プログラミングに興味があり、Haskellと直接対決することにしました。私の頭が痛い...しかし、私は最終的にそれを取得します...しかし、私は1つの好奇心を持っていますが、なぜ構文はとても謎めいています(別の言葉がないのですか)? それがより表現力がなく、人間の言語により近い理由はありますか? FPは数学の概念のモデリングが得意であり、簡潔な表現手段の一部を借用していることを理解していますが、それでも数学ではありません...それは言語です。

2
ジョーアームストロングによるバナナモンキージャングルの問題を説明するサンプルコード[終了]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 2年前に閉店。 仕事中のコーダーの本で、ジョー・アームストロングは次のように述べています。 再利用性の欠如は、関数型言語ではなくオブジェクト指向言語で発生すると思います。オブジェクト指向言語の問題は、それらが持ち歩くこの暗黙の環境をすべて持っているためです。バナナが欲しかったのに、バナナとジャングル全体を持ったゴリラが手に入れた ここではあまりわかりません。問題がバナナを取得することである場合、関数 'getBanana'の背後にあるすべてのロジックをカプセル化できます。猿とジャングルはこの文脈にどのように関係していますか。誰かの書き込みがあるという事実を証明、と言う、方法を理解しやすくして、問題を説明するコードスニペットでしたBananaオブジェクトが必要とするMonkeyとJungle、開始されるようにしてくださいオブジェクトを?

3
カレー機能と可変機能を同時に使用することはできますか?
動的に型付けされた関数型プログラミング言語でカリー化関数と可変関数の両方を使用可能にすることを考えていますが、可能かどうかは疑問です。 擬似コードは次のとおりです。 sum = if @args.empty then 0 else @args.head + sum @args.tail これはすべての引数を合計することになっています。次に、それsum自体が数値として扱われる場合、結果はになり0ます。例えば、 sum + 1 +数値でのみ機能すると仮定して、1に等しくなります。ただし、sum == 0true であっても、sum引数がいくつ与えられても(したがって、「部分的に適用」と「可変」が同時に)、たとえば g = sum 1 2 3 その後gに等しく6、しかし、我々はまだ、さらに適用することができますg。たとえば、g 4 5 == 15trueです。この場合、オブジェクトgをリテラル6で置き換えることはできません。整数として扱われた場合は同じ値を生成しますが、内部には異なるコードが含まれているためです。 この設計を実際のプログラミング言語で使用すると、混乱やあいまいさが生じますか?

6
どの機能機能がもたらすメリットについて、OOPを少し混乱させる価値がありますか?
HaskellとF#で関数型プログラミングを学んだ後、OOPパラダイムはクラス、インターフェース、オブジェクトで後戻りしているように見えます。同僚が理解できるFPのどの側面を仕事に持ち込めますか?使用できるようにチームを再訓練することについて、上司と話す価値のあるFPスタイルはありますか? FPの可能な側面: 不変性 部分適用とカレー ファーストクラス関数(関数ポインター/機能オブジェクト/戦略パターン) 遅延評価(およびモナド) 純粋な機能(副作用なし) 式(対ステートメント-コードの各行は、副作用の代わりに、または副作用を引き起こすことに加えて、値を生成します) 再帰 パターンマッチング それは、プログラミング言語がサポートしている限り、その言語がサポートする制限まで何でもできる、すべての人にとって自由なものですか?または、より良いガイドラインがありますか?

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