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

関数型プログラミング言語

2
Haskell委員会がI / Oを表すモナドを選んだのはなぜですか?
クリーン言語が使用一意の種類を純粋に機能的な設定でI / Oを処理します。Haskell委員会がなぜモナドを使用したのですか?委員会が調査したが、反対した決定した状態を処理するための他の提案がありましたか? 注:私は、モナドと他の形式のコンピューティングとの間の聖戦を探していません。I / Oに関する委員会の選択だけにトピックを保ちましょう。

12
関数型プログラミング入門のスキームvs Haskell?
私はCおよびC#でのプログラミングに満足しており、将来C ++を検討します。関数型プログラミングを別のプログラミングパラダイムとして検討することに興味があるかもしれません。私はこれを楽しみのためにやっています。私の仕事はコンピュータープログラミングに関係しておらず、大学のコンピューターサイエンスコースでかなり早い時期に教えられた関数型プログラミングの使用にやや影響を受けています。ラムダ計算は確かに私の数学的な能力を超えていますが、関数型プログラミングを処理できると思います。 HaskellとSchemeのどちらが関数型プログラミングの入門として役立つでしょうか?私はemacsをテキストエディタとして使用しますが、Emacs Lispの学習を必要とする将来、より簡単に設定できるようにしたいと考えています。しかし、私の理解では、Emacs LispはSchemeとはかなり異なり、機能的というよりも手続き的です。 Schemeを追求すれば、すでに購入した「The Little Schemer」の本を使用している可能性があります(限定的なリーフィングから少し奇妙に思えます)。または、私がHaskellを追求する場合、「Learn Good a Haskell for Great Good」を使用します。また、チャンネル9でErik Meijer博士によるHaskellの紹介ビデオも見ました。 提案、フィードバック、または入力を歓迎します。 ありがとう。 PS BTW C#開発に使用しているVisual Studio 2010があるため、F#にもアクセスできますが、言語を選択するための主要な基準とは思われません。

7
Haskellの型システムは、関数型プログラミングを理解する上での障害ですか?[閉まっている]
私は関数型プログラミングを理解する目的でHaskellを勉強していますが、他の言語(Groovy、Python、JavaScriptを中心に)で得た洞察を適用することを期待しています。 Haskellを選んだのは、非常に純粋に機能的であり、状態への依存を許さないという印象を持っていたからです。 私は非常に厳格な型システムをナビゲートすることに興味があったので、Haskellを学ぶことを選択しませんでした。 私の質問はこれです:強い型システムは非常に純粋な関数型言語の必要な副産物ですか、またはこれはHaskellに特有の無関係な設計選択ですか?

2
プログラムの設計への表示的意味論の適用
デノテーショナルセマンティクス(DS)について少し読んだことがあり、型と関数が数学に強く明確にマッピングされているコンピュータープログラムの設計プロセスに非常に興味があります。 DSに基づいたプログラムの設計を詳細に議論するリソースはありますか?私は対象のいくつかの表面的な治療を見てきました。 私はHaskell、Scala、Common Lisp、および少しのSchemeに精通しているので、これらの言語を使用するリソースは大歓迎です。
30 scala  haskell  scheme 

8
遅延評価の概念が役立つのはなぜですか?
思わ遅延評価式のが彼らのコードが実行される順序を失うコントロールにプログラマを引き起こす可能性があります。これがプログラマーに受け入れられる、または望まれる理由を理解するのに苦労しています。 式がいつどこで評価されるかが保証されていない場合、このパラダイムを使用して、意図したとおりに動作する予測可能なソフトウェアを構築するにはどうすればよいですか?

3
Haskell対WebサービスのErlang
関数型言語を使用して実験プロジェクトを開始することを検討しており、ErlangとHaskellの間で決定しようとしています。 Haskellの強力な型システムと純度が好きです。本当に信頼できるコードを簡単に書くことができると感じています。そして、Haskellの力は、私がやりたいことのいくつかをはるかに簡単にするだろうと思います。 マイナス面では、YesodのようなHaskellでWebを処理するためのフレームワークのいくつかは、Erlangのカウンターパートほど高度ではないと感じています。 スレッドとフォールトトレランスに対するErlangのアプローチが好きです。Erlangのスケーラビリティは大きなプラスになり得ると感じています。 それが私の質問につながります。HaskellとErlangの両方でWebアプリケーションのバックエンドを実装する際に人々が経験したことは何ですか。HaskellがErlangにある軽量スレッドとアクターのいくつかを提供するパッケージはありますか?

8
現実の世界で「強力な」型システムを使用しているのは、たとえば大規模なWebアプリの場合ですか?
これは非常に広く、曖昧で、おそらく哲学的な質問であることを知っています。質問の中で最も重要なキーワードである「強力な」タイプのシステム自体は、ある程度不明確です。だから、私が意味することを説明しようとさせてください。 質問の全体的なコンテキスト 私たちはRuby on Railsで非常に大規模なWebアプリを構築してきましたが、私たちは一般的にスタックに満足しています。必要に応じて、ものを非常に高速に出荷できます-約10%のエッジケースをあまり心配することなく、「ビジネス」ケースの90%で機能するものです。一方、コードレビューとテストカバレッジの助けを借りて、ゆっくりと慎重になり、すべてのベースをカバーするようにすることができます-再び、そのような綿密な調査と安全に値する状況でのみ。 しかし、チームが成長するにつれて、スタックに焼き付けられた「セーフティネット」の欠如に不快感を覚え始めました。 最近、JavaでAndroidのネイティブ開発を開始しました。そして、私はコンパイルされた/静的な/強く型付けされた言語によって提供される安全性を(心地よく)思い出しました。 変数のつづりが間違っている、データ型が間違っている、関数の呼び出しが正しくない、些細なエラーがIDE自体でキャッチされます。IDEがコンパイラにフックして、プログラムの「正確性」の特定の側面を検証できるためです。 関数シグネチャを変更する必要がありますか?簡単です。コンパイラ+ IDEは、すべての呼び出しサイトを見つけるのに役立ちます。 特定の例外が常に処理されるようにする必要がありますか?あなたの救助のチェックされた例外。 現在、これらの安全機能には利点がありますが、それらの欠点もよく知っています。さらに、「ボイラープレートヘビー」Javaの世界では。したがって、Javaの代わりに、私は人々が最近作業を開始した多数の現代の「強く型付けされた」言語を見始めました。例:Scala、Rust、Haskellなど。私が最も興味を持っているのは、型システムと静的/コンパイル時チェックの力です。 さて、質問 これらの強力な型システムと静的/コンパイル時機能を大規模なアプリケーションで使用するにはどうすればよいですか? たとえば、これらの強力な機能の標準的な「hello world」のような紹介を超えてどのように移行するのでしょうか リッチタイプシステムを使用してビジネスドメインの問題をモデル化するものはありますか?タイプシステムは、30,000 LOC +ゾーンにいるときに役立ちますか、それとも妨げになりますか?システムが弱く型付けされた外の世界と対話するとき、これらの型システムによって提供されるセーフティネット(およびコンパイル時チェック)に何が起こるか。JSONまたはXML API、さまざまなデータストア、ユーザー入力などを介して

3
モナドを見るさまざまな方法
Haskellの学習中に、モナドとは何か、Haskellでモナドが重要である理由を説明しようとする多くのチュートリアルに直面しました。それぞれが類推を使用していたので、意味をつかみやすくなります。結局のところ、私はモナドが何であるかの3つの異なるビューになりました: 表示1:ラベルとしてのMonad 時々、モナドは特定のタイプのラベルとして考えます。たとえば、次のタイプの関数: myfunction :: IO Int myfunctionは、実行されるたびにInt値を生成する関数です。結果の型はIntではなくIO Intです。そのため、IOは、Int値がIOアクションが行われたプロセスの結果であることをユーザーに警告するInt値のラベルです。 その結果、このInt値はIOを持つプロセスからの値としてマークされているため、この値は「ダーティ」です。あなたのプロセスはもはや純粋ではありません。 見解2:モナドは、厄介なことが起こりうるプライベートな空間として。 すべてのプロセスが純粋で厳格なシステムでは、副作用が必要になる場合があります。そのため、モナドは、厄介な副作用を実行するための小さなスペースです。この空間では、あなたは純粋な世界から脱出し、不純なものに行き、あなたのプロセスを作り、価値を持って戻ってくることができます。 表示3:カテゴリー理論のようなモナド これは私が完全に理解していない見解です。モナドは、同じカテゴリーまたはサブカテゴリーの単なるファンクターです。たとえば、Int値があり、サブカテゴリとしてIO Intがあります。これは、IOプロセスの後に生成されるInt値です。 これらのビューは正しいですか?どちらがより正確ですか?

4
Haskellのreturn-type-(only)-polymorphismは良いことですか?
Haskellで私がまったく思いつかなかったことの1つは、次のように、入力型では戻り型を決定できない多相定数と関数をどのように持つことができるかということです。 class Foo a where foo::Int -> a 私はこれが好きではない理由のいくつか: 参照の透明性: 「同じ入力が与えられたHaskellでは、関数は常に同じ出力を返します」が、それは本当ですか?コンテキストでread "3"使用すると3を返しIntますが、たとえば(Int,Int)コンテキストで使用するとエラーをスローします。はい、あなたはそれreadも型パラメータを取っていると主張することができますが、型パラメータの暗黙性は、私の意見ではその美しさの一部を失うことになります。 単相性の制限: Haskellで最も厄介なことの1つ。私が間違っている場合は修正してください。しかし、MRの全体的な理由は、共有されているように見える計算は、型パラメーターが暗黙的であるためではない可能性があることです。 デフォルトのタイプ: 繰り返しになりますが、Haskellで最も厄介なことの1つです。たとえば、出力で多相関数の結果を入力で多相関数に渡す場合に起こります。繰り返しますが、間違っている場合は修正してください。ただし、入力タイプ(および多態定数)で戻り値のタイプを判別できない関数がなければ、これは必要ありません。 だから私の質問は(「議論の質問」としてスタンプされるリスクを実行している):型チェッカーがこれらの種類の定義を許可しないHaskellのような言語を作成することは可能でしょうか?もしそうなら、その制限の利点/欠点は何でしょうか? 私はいくつかの差し迫った問題を見ることができます: 、たとえば、場合2のみのタイプを持っていたInteger、2/3現在の定義ではもうチェックを入力しないでしょう/。しかし、この場合、機能的な依存関係を持つ型クラスが助けになると思います(はい、これは拡張機能であることがわかります)。さらに、入力タイプが制限されている関数を使用するよりも、異なる入力タイプを使用できる関数を使用する方がはるかに直感的であると思いますが、ポリモーフィック値をそれらに渡すだけです。 []およびのNothingような値の入力は、クラックするのが難しいナットのように思えます。私はそれらを処理する良い方法を考えていません。

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




1
Haskell製品コードでseqはどのくらいの頻度で使用されますか?
Haskellで小さなツールを作成した経験があり、特にinteract標準入力を処理して標準出力にパイプするフィルター(を使用)を作成するために、非常に直感的に使用できます。 最近、通常の約10倍のサイズのファイルでこのようなフィルターを使用しようとしましたが、Stack space overflowエラーが発生しました。 いくつか読んだ後(こことここなど)、スタックスペースを節約するための2つのガイドラインを特定しました(経験のあるHaskellers、正しくないものを書いたら修正してください): 末尾再帰ではない再帰関数呼び出しは避けてください(これは末尾呼び出しの最適化をサポートするすべての関数型言語で有効です)。 seq式が縮小される前に大きくなりすぎないように、部分式の早期評価を強制的に導入します(これはHaskell、または少なくとも遅延評価を使用する言語に固有です)。 seqコードに5回または6回の呼び出しを導入した後、ツールは再びスムーズに実行されます(より大きなデータでも)。ただし、元のコードはもう少し読みやすいと思います。 私は経験豊富なHaskellプログラマーではないのでseq、この方法で紹介するのが一般的なプラクティスであるかどうか、またseqHaskellの製品コードで通常どのくらいの頻度で表示されるかを尋ねたいと思いました。または、seqあまり頻繁に使用することを避けながら、スタック領域をほとんど使用しないテクニックはありますか?

1
Hindley-Milner推論はGo言語で機能しますか?
私は、Hindley-Milnerがサブクラスを持つ型システムでは機能しないことを読みましたが、他の型システム機能でも機能しないことがあります。現在、Goでは:=演算子の型推論が非常に限られています。しかし、Goには伝統的な意味でのサブクラスはなく、Hindley-Milner推論で問題なく動作するHaskellの型クラスに非常によく似たインターフェースのみがあります。 それでは、Hindley-Milnerの推論は、Haskellの場合と同じように、Goでも原則的に機能しますか?それとも、Goには他の機能がありますか?(一方で、HaskellにはHindly-Milnerで動作しない機能もあります。これらを使用すると、プログラムのこれらの部分を手動で入力する必要があります。)

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