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

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

1
ソフトウェアトランザクションメモリの構成可能性の例
常に言及されるソフトウェアトランザクションメモリの主な利点の1つは、構成可能性とモジュール性です。異なるフラグメントを組み合わせて、より大きなコンポーネントを作成できます。ロックベースのプログラムでは、多くの場合そうではありません。 これを実際のコードで説明する簡単な例を探しています。私はClojureの例を好むが、Haskellも大丈夫だ。サンプルが、簡単に構成できないロックベースのコードを示している場合のボーナスポイント。
11 haskell  clojure  stm 


2
割り当てなしで状態を維持する
関数型プログラミングを学んでいて、割り当てを使用せずに特定のシナリオを実装する方法を理解できません。次の簡単な問題は、私の混乱をかなり要約しています。 特定のデータ構造の変更に関するイベントを受け取り、このデータ構造が特定の状態に達したときにイベントを発行するプログラムを記述します。 だから私は維持しているデータ構造のコピーを持っています datastructure_copy::DataStructure 変化したときに発生するイベントのストリームがあります。 datastructure_changes::Stream Change データ構造に変更を適用して新しいコピーを返す関数があります。 apply_change::Change -> DataStructure -> DataStructure そして、データの状態が目的の状態に達したかどうかをチェックする述語があります。 is_ready::DataStructure ->Boolean つまり、ストリームで機能する「reduce」のようなものが必要です。 これを実装する1つの方法は、変更が到着するたびに状態を再計算することですが、これは実際的ではないようです。私はStateモナドで少し遊んでみましたが、別の問題を解決することを意図しているように見えます。 それを行う別の方法はありますか? 私の質問は純粋に概念的なものであり、Haskellにはあまり詳しくありません。

1
制作用のHaskell言語拡張機能を学ぶ必要性
Haskellのコア言語は本当にシンプルです。オブジェクト指向のバックグラウンドから来て、主な困難は純粋な機能パラダイムに適応することです。 「基本的な」Haskellを学習している間、私は常に言語拡張をCSの人々のためのおもちゃとして、または言語の将来のバージョン(from future import ???Pythonなど)の実験として考えてきました。 しかし、YesodなどのWebフレームワークを見始めたとき、多くのソースファイルには3〜4個の拡張子が必要であることがわかりました。一部は非常にシンプルに見えます(StringOverload)。その他は本当に威圧的です(GADT、タイプファミリエ、テンプレートハスケル)。彼らのドキュメンテーションは、新しい図書館を「ただ」学ぶことを期待している誰かにとって怖い研究論文にリンクしています。 Haskellで生産的になるためにGHC言語拡張を学ぶ必要はありますか?もしあなたが本番アプリケーションのためにHaskell開発者を雇うとしたら、そのような知識を求めますか?
10 haskell 

2
LispとSchemeの型
ラケットにはタイプがあります。一見すると、Haskellのタイピングとほとんど同じように見えます。しかし、LispのCLOSはHaskellタイプがカバーするいくつかのスペースをカバーしていますか?非常に厳密なHaskell型とオブジェクト指向言語でのオブジェクトの作成は、漠然と似ています。私がHaskellのクールエイドを飲んだだけで、Lispの道を進むと、動的なタイピングのために頭がおかしくなります。

4
STDOUTとその不純
私は関数型プログラミングに関する多くの本や記事を読みましたが、いくつかの非常に基本的な概念を確実に理解できなかったことを恥ずかしく思っています。 関数型プログラミングの主なアイデアの1つは、同じ入力は常に同じ出力を生成するということです。したがって、データベースのクエリやファイルの書き込みは、純粋に機能的なスタイルで行うことはできません。たとえば、モナドが必要な理由の1つです。 問題は、なぜSTDOUT出力を不純なものと見なすのかです。はい、どのファイルハンドラーも危険です-データが常に書き込まれると確信することはできません。しかし、STDOUTはどうですか?なぜそれを信頼できないものと考えるべきなのでしょうか?評価自体の方が信頼性が低いですか?つまり、トリガーを引いて、計算を中断することができます。

5
すべてのRubyをHaskellであるかのように書いても大丈夫でしょうか?
Rubyには、リスト作成、マップ、選択、収集などの優れたリスト操作機能が組み込まれています。Procs、Blocks、Lambdasがあり、優れた反復サポート(eachファミリ)があるので、もしもRubyのものをすべて最も純粋に機能的な方法で記述しますか?I / Oがほとんどまたはまったくない(したがって、明らかな副作用が少ない)コードに特に適していますか? 私はHaskell(「本当の」ハッカーの言語と呼ばれます)を学んでいて、それを行う方法に夢中になっています。 Rubyはそもそも借りたり、そこから多くを学んだりしませんか?) 建設的なガイダンスは大歓迎です...

2
HaskellでEnumのサブクラスにバインドされないのはなぜですか
Boundedインスタンスには、Enumの適切な実装が必要なようです。私は反例を個人的に考えることはできませんが、誰かが病的でないものを思いついた場合、私はこれがそうでない理由を理解します。 :i2つのタイプクラスを実行することから、現在標準ライブラリにある唯一の例外はタプルの場合のようです。これは、バインドされているが列挙型ではありません。ただし、すべてのBoundedタプルは、最後の要素をインクリメントし、maxBoundに到達したときにラップすることによって、まともな方法でEnumerableにする必要もあります。 この変更には、Enum値をトラバースするための安全な/ループ方法のために、Boundedへの追加predBやnextBそのようなものが含まれる可能性があります。この場合toEnum 0 :: (...)、(toEnum 0, toEnum 0, ...) :: (...)

1
アレイに基づかないコンピュータアーキテクチャ[終了]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 4年前休業。 関数型プログラミングのモナドに関するWadlerの最初の論文(Haskell)、と彼は言う 長い歴史を持つもう1つの問題は、プログラムを配列の更新に基づくことが望ましいかどうかです。配列に基づくアルゴリズムとアーキテクチャの開発には多大な労力が費やされているため、この議論を回避し、答えが「はい」であると想定します。 他の可能なアーキテクチャへの引用やヒントはありません。Lispに適したアーキテクチャについて何か聞いたことがあります。誰かが私にこのトピックの/どこから始められるかについての説明とガイダンスを教えてくれますか?異なるアーキテクチャについて簡単に説明していただければ幸いです。

2
Golang / Haskellの型推論
Goには、MLやHaskellなどの関数型言語が持っているという意味で、実際には型の推論がないという事実を読んだことがありますが、2つのバージョンの比較を理解するのは簡単ではありません。Goの型推論がHaskellの型推論とどのように異なるか、およびそれぞれの長所と短所を基本的な用語で誰かが説明できますか?

1
数学はHaskellの型システムの背後にある理論を理解する必要がありますか?
最近、私はハスケルに深く興味を持っています。 新しい概念(forallキーワードやSTモナドなど)とHaskellの型システム全般を学習しようとしている間、私は絶えずカテゴリー理論とラムダ計算の概念に出くわしました。だから、私は思う: Haskellの型システムを十分に理解するには、数学の他のどの分野が重要ですか? これらの数学の厳密な研究を見逃して、代わりに特定の関連する概念に焦点を当てることはできますか?(例えば、ラムダ計算における数量詞。)もしそうなら、どの概念が不可欠ですか? タイプとプログラミング言語をすぐに取り上げたいと思っていますが、適切と思われる代替の参考資料を提案してください。

2
Haskellのインメモリデータストア
HaskellのWebサービスにインメモリデータストアを実装したい。STMモナドでトランザクションを実行したい。 Haskellを使ってハッシュテーブルをスチームググリングすると、これしか得られませんData. BTree. HashTable. STM.。モジュール名と複雑さから、これはツリーとして実装されていることがわかります。可変ハッシュテーブルの場合、配列の方が効率的であると思います。 STMハッシュテーブルに配列を使用しない理由はありますか?このスチームハッシュテーブルで何かを得ますか、IntMapそれともスチームリファレンスを使用するだけですか?

2
Haskell関数の構成は、パイプとフィルターのアーキテクチャパターンのインスタンスですか?
パイプとフィルターのアーキテクチャパターンは、各要素の出力が次の要素の入力になるように配置された一連の処理要素として定義されます。すべての例は、ある種の共有バッファを介して実行されるプロセス間またはスレッド間接続を考慮しているようです。 私には、Haskell関数構成が同じタスクを実行しているようです。関数の順序付けだけで、明示的なバッファーがパイプとして使用されていない場合でも、それはこのパターンのインスタンスであると言えますか?はいの場合、怠惰でない言語でも同じことが言えますか?

2
Haskell / Clojureは、実際には粒子シミュレーションなどの動的システムには適していませんか?
以前の質問で、関数型プログラミング言語は物理エンジンなどの動的システムには適していないと言われています。これは、主にオブジェクトの変更にコストがかかるためです。このステートメントはどの程度現実的ですか、そしてその理由は何ですか

2
誰が最初に「高次関数」および/またはファーストクラスの市民という用語を作り出したのですか
Haskell、O'Caml、またはLISPが登場するずっと以前から、高次関数は学術研究の主題であり、数学ではSchönfinkel(1967年)とHaskell Curry(1968年)はすでにカレーなどの手法を適用していましたが、どのプログラミング言語でも利用できるようになる前でした。 Wikipediaによると、Scheme はファーストクラスの市民として適切な高階関数を導入した最初の言語でしたが、元のアイデアを私たちに帰すことができる人はいますか?たぶん、1930年代にラムダ計算を発明したアロンゾ教会ですか?より具体的には、私がいくつかの本やオンラインリソースでさまざまな言い換えで見た次の定義を誰が作り出したのですか? 関数が別の関数を引数として取る場合、または関数を返す場合、その関数は高次であると見なされます。関数を引数または戻り値の型として使用しない関数は、一次関数と呼ばれます。

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