タグ付けされた質問 「haskell」

Haskellは、強力な静的型付け、遅延評価、広範な並列処理と同時実行のサポート、独自の抽象化機能を備えた関数型プログラミング言語です。

30
モナドとは何ですか?
最近Haskellを手短に見てきたが、モナドが本質的に何であるかに関して、簡潔で簡潔で実用的な説明は何だろうか? 私が遭遇したほとんどの説明は、かなりアクセスしにくく、実用的な詳細に欠けていることがわかりました。

6
Hindley-Milnerのどの部分を理解していないのですか?
私はかつて不滅の言葉をフィーチャーした販売用のTシャツがあったことを誓います: のどの部分 分かりませんか? 私の場合、答えは...すべてです! 特に、Haskellの論文ではこのような表記がよく見られますが、その意味がわかりません。それがどういう数学の分野になるのか私にはわからない。 もちろんギリシャ語のアルファベットの文字と「∉」などの記号を認識します(これは通常、何かがセットの要素ではないことを意味します)。 一方、「⊢」は今まで見たことがありません(Wikipediaは「パーティション」を意味する可能性があると主張しています)。ここでのビンキュラムの使用についてもよく知りません。(通常は、分数を表し、それはしません表示され、ここでケースのように。) このシンボルの海が何を意味するのかを理解するためにどこから始めればよいかを誰かが少なくとも教えてくれれば、それは役に立ちます。

15
Haskellを使い始める
この質問の答えはコミュニティの努力です。この投稿を改善するには、既存の回答を編集してください。現在、新しい回答や相互作用を受け入れていません。 数日間、Haskellの関数型プログラミングパラダイムに頭を抱えました。私はチュートリアルを読んだり、スクリーンキャストを見てこれを行いましたが、実際には何も固執していないようです。さて、さまざまな命令型/オブジェクト指向言語(C、Java、PHPなど)を学ぶ上で、エクササイズは私にとって良い方法でした。しかし、Haskellで何ができるか本当にわからないので、利用できる新しい概念がたくさんあるので、どこから始めればよいのかわかりません。 では、どのようにしてHaskellを学びましたか?本当に「氷を砕く」理由は何ですか?また、演習を始めるための良いアイデアはありますか?

6
モナドはエンドファンクターのカテゴリーの単なるモノイドですが、何が問題なのですか?
誰が最初に次のことを言ったのですか? モナドはエンドファンクターのカテゴリーの単なるモノイドですが、何が問題なのですか? そして、それほど重要ではないメモで、これは本当ですか?もしそうなら、説明を提供できますか(願わくば、Haskellの経験があまりない人でも理解できると思います)。


18
Project Eulerとの速度比較:C vs Python vs Erlang vs Haskell
私はProject Eulerからの問題#12をプログラミング演習として使用し、C、Python、Erlang、およびHaskellでの(確かに最適ではない)実装を比較しました。実行時間をいくらか長くするために、最初の問題で述べたように、500ではなく1000を超える除数で最初の三角形の数値を検索します。 結果は次のとおりです。 C: lorenzo@enzo:~/erlang$ gcc -lm -o euler12.bin euler12.c lorenzo@enzo:~/erlang$ time ./euler12.bin 842161320 real 0m11.074s user 0m11.070s sys 0m0.000s Python: lorenzo@enzo:~/erlang$ time ./euler12.py 842161320 real 1m16.632s user 1m16.370s sys 0m0.250s PythonとPyPy: lorenzo@enzo:~/Downloads/pypy-c-jit-43780-b590cf6de419-linux64/bin$ time ./pypy /home/lorenzo/erlang/euler12.py 842161320 real 0m13.082s user 0m13.050s sys 0m0.020s アーラン: lorenzo@enzo:~/erlang$ erlc euler12.erl lorenzo@enzo:~/erlang$ time erl …

13
時間関数は関数型プログラミングにどのように存在できますか?
私は関数型プログラミングについてあまり知らないことを認めざるを得ません。私はそれをあちこちから読んだので、関数型プログラミングでは、関数が何度呼び出されても、同じ入力に対して同じ関数が同じ出力を返すことがわかりました。これは、関数式に含まれる入力パラメーターの同じ値に対して同じ出力に評価される数学関数とまったく同じです。 たとえば、次のことを考慮してください。 f(x,y) = x*x + y; // It is a mathematical function 何回使ってf(10,4)もその価値は常にあります104。そのため、記述した場所はどこでも、式全体の値を変更せずに、でf(10,4)置き換えることができます104。このプロパティは、式の参照透過性と呼ばれます。 ウィキペディアが言うように(リンク)、 逆に、関数コードでは、関数の出力値は関数に入力された引数にのみ依存するため、引数xに対して同じ値で関数fを2回呼び出すと、同じ結果f(x)が両方生成されます。 (現在の時間を返す)時間関数は関数型プログラミングに存在できますか? はいの場合、どのようにして存在できますか?関数型プログラミングの原則に違反していませんか?これは、関数型プログラミングの特性の1つである参照の透過性に特に違反しています(正しく理解していれば)。 または、いいえの場合、関数型プログラミングの現在の時刻をどのように知ることができますか?

8
Haskellの大規模デザイン?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 3年前休業。 ロックされています。質問はトピックから外れていますが、歴史的に重要であるため、この質問とその回答はロックされています。現在、新しい回答や相互作用を受け入れていません。 特にHaskellで、大規模な関数型プログラムを設計/構造化する良い方法は何ですか? 私はたくさんのチュートリアルを行ってきました(Write Yourself a Schemeが私のお気に入りで、Real World Haskellがすぐ近くにあります)-ほとんどのプログラムは比較的小さく、単一目的です。さらに、それらのいくつかは特にエレガントであるとは見なしません(たとえば、WYASの膨大なルックアップテーブル)。 私は今、より多くの可動部分を備えたより大きなプログラムを書きたいと思っています-さまざまなソースからのデータの取得、クリーニング、さまざまな方法での処理、ユーザーインターフェイスでの表示、永続化、ネットワーク経由の通信など。このようなコードを読みやすく、保守しやすく、変化する要件に適応できるようにするための最良の構造はどれですか。 大規模なオブジェクト指向の命令型プログラムに関するこれらの質問に対処する非常に多くの文献があります。MVCやデザインパターンなどのアイデアは、OOスタイルでの関心の分離や再利用性などの幅広い目標を実現するための適切な処方箋です。さらに、新しい命令型言語は「成長するにつれて設計する」スタイルのリファクタリングに役立ちますが、私の初心者の意見では、Haskellはあまり適していないようです。 Haskellに相当する文献はありますか?エキゾチックな制御構造の動物園は、この目的のために関数型プログラミング(モナド、矢印、アプリケーションなど)でどのように利用するのが最適ですか?おすすめのベストプラクティスは何ですか。 ありがとう! 編集(これはドン・スチュワートの回答のフォローアップです): @donsは言及しました:「モナドはタイプで主要な建築デザインをキャプチャします。」 私の質問は、純粋な関数型言語での主要なアーキテクチャ設計についてどのように考えればよいのでしょうか。 いくつかのデータストリームといくつかの処理ステップの例を考えてみましょう。データストリームのモジュラーパーサーを一連のデータ構造に書き込むことができ、各処理ステップを純粋な関数として実装できます。1つのデータに必要な処理手順は、その値や他のデータによって異なります。一部の手順の後には、GUIの更新やデータベースクエリなどの副作用が伴う必要があります。 データと解析ステップを適切に結び付ける「正しい」方法は何ですか?さまざまなデータ型に対して正しいことを行う大きな関数を書くことができます。または、モナドを使用して、これまでに処理されたものを追跡し、各処理ステップでモナドの状態から次に必要なものをすべて取得することもできます。または、大部分が別個のプログラムを作成してメッセージを送信することもできます(このオプションはあまり好きではありません)。 彼がリンクしたスライドには、「デザインを型/関数/クラス/モナドにマッピングするためのイディオム」という箇条書きが必要です。イディオムとは何ですか?:)

10
Haskellは実世界で何に使用されていますか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 6年前休業。 Haskellには多くの誇大宣伝がありますが、実際のアプリケーションでそれがどのように使用されているかについての情報を取得することは困難です。Haskellの最も人気のあるプロジェクト/使用法は何ですか、なぜこれらの問題の解決に優れているのですか?

15
機能的なGUIプログラミングは可能ですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 2年前休業。 最近FPバグを見つけて(Haskellを学ぼうとしている)、これまでに見たもの(ファーストクラスの関数、遅延評価、その他すべての利点)に本当に感動しました。私はまだ専門家ではありませんが、基本的なアルゴリズムを強制的に実行するよりも「機能的に」推論する方が簡単だと気づき始めています(また、必要なところに戻るのに苦労しています)。 ただし、現在のFPが横ばいに見えるのは、GUIプログラミングです。Haskellのアプローチは、命令型のGUIツールキット(GTK +やwxWidgetsなど)をラップし、「do」ブロックを使用して命令型のスタイルをシミュレートするようです。私はF#を使用していませんが、.NETクラスでOOPを使用して同様のことを行うと私は理解しています。明らかに、これには十分な理由があります。現在のGUIプログラミングはすべてIOと副作用に関するものであるため、純粋な関数型プログラミングは現在のほとんどのフレームワークでは不可能です。 私の質問は、GUIプログラミングへの機能的アプローチを持つことは可能ですか?これが実際にどのように見えるか想像できません。このようなことを試みる実験的またはその他のフレームワーク(または関数型言語用にゼロから設計されたフレームワーク)を知っている人はいますか?それとも、GUIパーツにOOPを使用し、ロジックにFPを使用する、ハイブリッドアプローチのみを使用するソリューションですか?(私は好奇心から求めているだけです。FPは「未来」だと思いたいのですが、GUIプログラミングはかなり大きな穴のように思えます。)

1
GHCにおける自動専門化の推移性
GHC 7.6 のドキュメントから: そもそも、SPECIALIZEプラグマは必要ないことがよくあります。モジュールMをコンパイルすると、GHCのオプティマイザー(-O付き)は、Mで宣言された各トップレベルのオーバーロード関数を自動的に考慮し、Mで呼び出されるさまざまな型に特化します。オプティマイザーは、インポートされた各INLINABLEオーバーロード関数も考慮します。 Mで呼び出されるさまざまな型に特化しています。 そして さらに、関数fにSPECIALIZEプラグマが指定されると、GHCは、それらがSPECIALIZEプラグマと同じモジュールにある場合、またはINLINABLEである場合、fによって呼び出されるすべての型クラスオーバーロード関数の特殊化を自動的に作成します。など、推移的に。 したがって、GHCはプラグマなしでマークされた一部/ほとんど/すべての(?)関数を自動的に特殊化する必要があります。明示的なプラグマを使用すると、特殊化は推移的です。私の質問は、自動専門化は推移的ですか?INLINABLE 具体的には、ここに小さな例があります: Main.hs: import Data.Vector.Unboxed as U import Foo main = let y = Bar $ Qux $ U.replicate 11221184 0 :: Foo (Qux Int) (Bar (Qux ans)) = iterate (plus y) y !! 100 in putStr $ show $ foldl1' (*) ans …
392 haskell  ghc 

6
無料のモナドとは何ですか?
私が見てきた用語無料モナドがポップアップし、すべての 今 と 、その後いくつかの時間のために、誰もがちょうど彼らが何であるかの説明を与えることなく、それらを議論/使用するようです。だから:無料のモナドは何ですか?(私はモナドとHaskellの基本に精通していると思いますが、カテゴリー理論については非常に大まかな知識しか持っていません。)

7
なぜモナドが必要なのですか?
私の控えめな意見では、「モナドとは何ですか?」という有名な質問に対する答えです。、特に最も投票されたものは、モナドが本当に必要な理由を明確に説明せずに、モナドとは何かを説明しようとします。問題の解決策として説明できますか?
366 haskell  monads 

7
[終了]から読んで学ぶための良いHaskellソース
現在のところ、この質問はQ&A形式には適していません。事実、参考文献、専門知識によって回答が裏付けられることを期待していますが、この質問は、討論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 7年前休業。 Haskellを使用していて、質の高い最新のHaskellと見なすことができるオープンソースプログラムには、どのようなものがありますか?コードベースが大きいほど良いです。 彼らのソースコードから学びたいです。小さなコードの例から学習するポイントを過ぎているように感じます。多くのことが起こっている場合(ログ、I / O、構成など)に、コードの構造、モナドの相互作用を確認したいと思います。

4
プログラミングの文脈で「代数」とはどういう意味ですか?
関数型プログラミングとPLTサークルで「代数」という用語を何度も聞いたことがあります。特に、オブジェクト、コモナード、レンズなどについて議論する場合はそうです。この用語をグーグルで検索すると、これらの構造の数学的説明が記載されたページが表示されますが、これは私にはほとんど理解できません。誰もがプログラミングの文脈で合同代数が何を意味するか、それらの重要性は何であるか、そしてそれらがオブジェクトとコモナードとどのように関連するか説明できますか?

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