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

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

11
ミニマリストのHaskellクイックソートが「真の」クイックソートではないのはなぜですか?
HaskellのWebサイトには、以下に示すように、非常に魅力的な5行のクイックソート機能が導入されています。 quicksort [] = [] quicksort (p:xs) = (quicksort lesser) ++ [p] ++ (quicksort greater) where lesser = filter (< p) xs greater = filter (>= p) xs また、「CでのTrueクイックソート」も含まれています。 // To sort array a[] of size n: qsort(a,0,n-1) void qsort(int a[], int lo, int hi) { int h, l, p, …

4
数百万のピクセルを持つ2Dボックス化されていないピクセル配列には、どのHaskell表現が推奨されますか?
Haskellの画像処理の問題に取り組みたい。私は、数百万ピクセルのモノクロ(ビットマップ)とカラー画像の両方を扱っています。いくつか質問があります。 Vector.Unboxedとの間でどちらを選択すればよいUArrayですか?どちらもボックス化されていない配列ですが、Vector抽象化は特にループフュージョンを中心に宣伝されているようです。でVector常により良いですか?そうでない場合、いつどの表現を使用すればよいですか? カラー画像の場合、16ビット整数のトリプルまたは単精度浮動小数点数のトリプルを格納したいと思います。この目的のために、どちらVectorかUArray使いやすいですか?より高性能ですか? モノクロイメージの場合、ピクセルごとに1ビットのみを保存する必要があります。複数のピクセルを1つの単語にパックすることによってここで私を助けることができる事前定義されたデータ型はありますか、それとも私一人でですか? 最後に、私の配列は2次元です。「配列の配列」(またはベクトルのベクトル)としての表現によって課される追加の間接参照を処理できると思いますが、インデックスマッピングをサポートする抽象化を好みます。誰でも標準ライブラリやHackageから何かを推薦できますか? 私は関数型プログラマーであり、突然変異の必要はありません:-)

5
Haskell:Let vs. Let
私はHaskellを初めて使用するので、Where対Letで非常に混乱しています。どちらも同じような目的を提供しているようです。WhereとLetの比較をいくつか読んだことがありますが、それぞれをいつ使用するかを見分けるのに問題があります。誰かがコンテキストを提供したり、場合によってはどちらを使用するかを示すいくつかの例を提供してもらえますか? どこでvs. Let where句は、関数定義のレベルで定義することができます。通常、これはlet定義の範囲と同じです。唯一の違いは、ガードが使用されている場合です。where条項の範囲はすべてのガードに及びます。対照的に、let式のスコープは、現在の関数句とガード(存在する場合)のみです。 Haskellチートシート Haskellのウィキは非常に詳細であり、様々な例を提供していますが、仮想的な例を使用しています。初心者には説明が短すぎます。 Letの利点: f :: State s a f = State $ \x -> y where y = ... x ... Control.Monad.State whereはパターンマッチングf =を参照するため、機能しません。xはスコープ内にありません。対照的に、letから始めていれば、問題はありません。 Letの利点に関するHaskell Wiki f :: State s a f = State $ \x -> let y = ... x ... in y 場所の利点: …
117 haskell  keyword  where  let 

3
プログラムを運用するのに最適なHaskellライブラリは何ですか?[閉まっている]
閉まっている。この質問はスタックオーバーフローのガイドラインを満たしていません。現在、回答を受け付けていません。 この質問を改善してみませんか?Stack Overflowのトピックとなるように質問を更新します。 5年前休業。 この質問を改善する プログラムを運用環境に導入する場合、そのプログラムが "運用可能"であると見なすためには、そのプログラムを実行する必要があるいくつかのこと、つまり、エンジニアと運用スタッフの両方が測定可能で検証可能な方法で実行および保守できるようにします。私の目的では、運用可能なプログラムは次の要件を満たしている必要があります。 複数のレベルでログを記録できる(例:デバッグ、警告など)。 プログラムが実行している作業の種類とその作業にかかっている時間に関するメトリック/統計を収集して共有できるようにします。理想的には、収集された指標は、Gangliaなどの一般的に使用されている監視ツールと互換性のある形式で使用できるか、またはそのように変更することができます。 プログラムを再起動せずに、実行中のプログラムで構成されたプロパティを更新できるシステムを介して、理想的には構成可能にする。 繰り返し可能な方法でリモートサーバーに展開できる。 Scalaの世界には、少なくとも最初の3つの要件に対処するための優れたライブラリーがあります。例: ロギング用のLogula。 指標または指標の収集とレポートのためのダチョウ。 構成については、ConfiggyまたはFig。 デプロイに関しては、Scalaの世界で採用されている1つのアプローチは、プログラムを構成するバイトコードとライブラリをassembly-sbtのようなものでバンドルし、結果のバンドル(「ファットJAR」)をCapistranoのようなツールでリモートサーバーにプッシュすることです。SSH経由でコマンドを並列実行します。これは言語固有のツールを必要とする問題ではありませんが、Haskellコミュニティにそのようなツールが存在するかどうか知りたいです。 おそらく、上記で説明した特性を提供するHaskellライブラリがあるでしょう。利用可能なライブラリのうち、「最良」と見なされているものを知りたいのですが。つまり、Haskellコミュニティで一般的に使用されている、最も成熟し、よく管理されている、Haskellのベストプラクティスの例です。 Haskellのコードを「本番対応」にするためのライブラリ、ツール、またはプラクティスが他にある場合は、それらについても知りたいと思います。
115 logging  haskell  metrics 

1
合計メモリ使用量が22Mbだけであるにもかかわらず、Haskellスレッドのヒープオーバーフロー?
レイトレーサーを並列化しようとしています。これは、小さな計算の非常に長いリストがあることを意味します。バニラプログラムは67.98秒で特定のシーンで実行され、合計メモリ使用量は13 MBで、生産性は99.2%です。 最初の試みparBufferでは、バッファサイズ50 の並列方式を使用しました。parBufferスパークが消費されるのと同じ速さでリストをウォークスルーしparList、大量のメモリを使用するようなリストのスパインを強制しないため、私はそれを選択しましたリストが非常に長いため。では-N2、100.46秒で実行され、合計メモリ使用量は14 MBで、生産性は97.8%でした。スパーク情報は次のとおりです。SPARKS: 480000 (476469 converted, 0 overflowed, 0 dud, 161 GC'd, 3370 fizzled) 霧状の火花の割合が高いことは、火花の粒度が小さすぎることを示しているため、次にparListChunk、リストをチャンクに分割し、チャンクごとに火花を作成する方法を試しました。チャンクサイズで最高の結果が得られました0.25 * imageWidth。プログラムは93.43秒で実行され、総メモリ使用量は236 MB、生産性は97.3%でした。スパーク情報は次のとおりSPARKS: 2400 (2400 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)です。メモリ使用量がはるかに多いのparListChunkは、リストのスパインを強制するためです。 次に、リストをチャンクに遅延して分割し、チャンクを渡しparBufferて結果を連結する独自の戦略を記述しようとしました。 concat $ withStrategy (parBuffer 40 rdeepseq) (chunksOf 100 (map colorPixel pixels)) これは、95.99秒で実行され、合計メモリ使用量は22MBで、生産性は98.8%でした。これは、すべてのスパークが変換され、メモリ使用量ははるかに少ないという意味で成功しましたが、速度は向上しません。これは、イベントログプロファイルの一部の画像です。 ご覧のとおり、ヒープオーバーフローが原因でスレッドが停止しています。+RTS -M1Gデフォルトのヒープサイズを最大1Gbまで増やす追加を試みました。結果は変わりませんでした。Haskellのメインスレッドはスタックがオーバーフローするとヒープのメモリを使用することを読んだので、デフォルトのスタックサイズも増やしてみました+RTS -M1G -K1Gが、これも影響はありませんでした。 他に試すことができるものはありますか?必要に応じて、メモリ使用量やイベントログの詳細なプロファイリング情報を投稿できます。多くの情報であり、すべてを含める必要があるとは思わなかったため、すべてを含めませんでした。 編集:私はHaskell …

4
このフィボナッチ関数はどのように記憶されていますか?
このフィボナッチ関数はどのようなメカニズムで記憶されていますか? fib = (map fib' [0..] !!) where fib' 1 = 1 fib' 2 = 1 fib' n = fib (n-2) + fib (n-1) そして、関連するノートで、なぜこのバージョンはそうではないのですか? fib n = (map fib' [0..] !! n) where fib' 1 = 1 fib' 2 = 1 fib' n = fib (n-2) + fib (n-1)

1
Haskellの「何もしない」関数idが大量のメモリを消費するのはなぜですか?
Haskellには、入力を変更せずに返す恒等関数があります。定義は簡単です: id :: a -> a id x = x だから楽しみのために、これは出力する必要があります8: f = id id id id id id id id id id id id id id id id id id id id id id id id id id id main = print $ f 8 数秒後(およびタスクマネージャによると約2 GBのメモリ)、コンパイルはで失敗しghc: out of …
112 haskell  ghc 

4
入力のHaskellエラー解析エラー `= '
私はHaskellを使い始めたばかりで、始めてから次のghciことを試しました。 f x = 2 * x そして私は得ました: <interactive>:1:4: parse error on input `=' わかりません。 不思議なことに、以前はうまく機能していました。私はHaskellの設定を誤ったと思います。ghc6を再インストールしても問題は解決しません。 詳細については、Ubuntu 10.4を使用しており、ghc6のバージョンは6.12.1-12です。
111 haskell 

10
JavaのインターフェースとHaskellの型クラス:違いと類似点?
Haskellを学んでいると、その型クラスに気づきました。これはHaskellから生まれた優れた発明であるはずです。 ただし、タイプクラスのWikipediaページ: プログラマーは、クラスに属するすべての型に存在しなければならない一連の関数名または定数名をそれぞれの型とともに指定することにより、型クラスを定義します。 私にとってはJavaのインターフェースにかなり近いようです(Wikipediaのインターフェース(Java)ページを引用): Javaプログラミング言語のインターフェースは、クラスが実装しなければならないインターフェース(一般的な意味で)を指定するために使用される抽象型です。 これらの2つはかなり似ています。型クラスは型の動作を制限し、インターフェイスはクラスの動作を制限します。 Haskellの型クラスとJavaのインターフェースの違いと類似点は何でしょうか、それとも根本的に異なるのでしょうか。 編集:私はhaskell.orgでさえそれらが類似していることを認めていることに気づきました それらが非常に類似している(またはそれらがそうである)場合、なぜ型クラスがそのような誇大広告で扱われるのですか? より多くの編集:うわー、とても多くの素晴らしい答え!コミュニティにどちらが最適かを判断させる必要があると思います。しかし、答えを読んでいる間、それらすべては、「型クラスができることはたくさんありますが、インターフェースがジェネリックに対応できないか、ジェネリックに対処する必要がある」とだけ言っているようです。私は疑問に思わずにはいられません、型クラスができないのにインターフェースができることはありますか?また、Wikipediaがtypeclassは元々1989年の論文「アドホックなポリモーフィズムをアドホックから少なくする方法」であると主張していることに気づきました。一方、Haskellはまだ揺りかごのままで、Javaプロジェクトは1991年に開始され、1995年に最初にリリースされました。 。では、タイプクラスがインターフェースに似ているのではなく、その逆に、インターフェースがタイプクラスの影響を受けたのではないでしょうか。これを支持または反証する文書/論文はありますか?すべての回答をありがとう、それらはすべて非常に啓発的です! すべての入力をありがとう!



17
Haskellの大騒ぎは何ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。私たちは回答が事実、参考文献、専門知識によってサポートされることを期待しますが、この質問はおそらく議論、議論、投票、または拡張された議論を誘います。この質問が改善され、場合によっては再開できると思われる場合は、ヘルプセンターにアクセスしてください。 8年前に閉鎖。 Haskellについて話をしているプログラマーが何人かいるのを知っています。そのため、ここでは誰もがその言語を気に入っているようです。Haskellが得意であることは、天才プログラマーの特徴のようです。 誰かがなぜそれがそんなにエレガントで優れているのかを示すいくつかのHaskellの例を挙げられますか?

4
Haskell:<*>はどのように発音されますか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 2年前休業。 この質問を改善する Applicativeタイプクラスでこれらの関数をどのように発音しますか? (&lt;*&gt;) :: f (a -&gt; b) -&gt; f a -&gt; f b (*&gt;) :: f a -&gt; f b -&gt; f b (&lt;*) :: f a -&gt; f b -&gt; f a (つまり、演算子でなかった場合、何と呼ばれますか?) 余談ですがpure、非数学者にとってよりフレンドリーな名前に変更できるとしたら、それを何と呼びますか?
109 haskell  operators 

5
HaskellのPrelude.readがMaybeを返さないのはなぜですか?
Prelude.readのタイプがである正当な理由はありますか read :: Read a =&gt; String -&gt; a Maybe値を返すのではなく? read :: Read a =&gt; String -&gt; Maybe a 文字列は解析可能なHaskellに失敗する可能性があるため、後者の方がより自然ではないでしょうか? あるいはEither String a、どこLeftが解析、およびなかった場合は、元の文字列を含んでいるでしょうRightそれがなかった場合の結果? 編集: 他の人に対応するラッパーを書かせてもらうつもりはありません。安全であるという安心感を求めているだけです。
108 parsing  haskell  types 

1
Real World Haskellのどの部分が廃止されたか、悪い習慣と見なされていますか?
Real World Haskellの 19章では、の変更により、多くの例が失敗しControl.Exceptionます。 そのため、この本の内容の一部は実際には時代遅れであり、もう勉強する価値がないと思います。結局6年になります。私の唯一の他の参考文献はLearn You a Haskell For Great Goodですが、素晴らしい本ですが、RWHと比較するとはるかに基本的です。 この本を以前に読んだことのある人なら、関係のない部分についてアドバイスをいただけますか?特に、本の後半の章、たとえば、ソフトウェアトランザクションメモリ、並行プログラミング、ソケットプログラミングなど。 編集:これは、今日(2017年11月)で唯一知られているエディションである、2008年12月に発行された本のエディションに関するものです。

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