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

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

1
ニューラルネットワークのトレーニングで非常に小さい値またはNaN値が表示される
Haskellでニューラルネットワークアーキテクチャを実装し、MNISTで使用しようとしています。 hmatrix線形代数のパッケージを使用しています。私のトレーニングフレームワークは、pipesパッケージを使用して構築されています。 私のコードはコンパイルされ、クラッシュしません。ただし、問題は、レイヤーサイズ(たとえば、1000)、ミニバッチサイズ、および学習率の特定の組み合わせによってNaN、計算に値が生じることです。いくつかの検査の後、非常に小さな値(次数1e-100)が最終的にアクティベーションに表示されることがわかります。しかし、それが起こらなくても、トレーニングはまだ機能しません。その損失や精度に改善はありません。 私は自分のコードをチェックして再チェックしましたが、問題の根本が何であるかについて途方に暮れています。 各レイヤーのデルタを計算するバックプロパゲーショントレーニングは次のとおりです。 backward lf n (out,tar) das = do let δout = tr (derivate lf (tar, out)) -- dE/dy deltas = scanr (\(l, a') δ -> let w = weights l in (tr a') * (w <> δ)) δout (zip (tail $ toList n) das) return (deltas) …

2
制約を追跡する手法
シナリオは次のとおりです。型シグネチャを使用していくつかのコードを記述しましたが、GHCは一部のxとについてx〜yを推定できませんでしたy。通常、GHCに骨を投げて、関数の制約に同型を単に追加できますが、これはいくつかの理由で悪い考えです。 コードの理解を強調するものではありません。 最終的に5つの制約で十分な場合があります(たとえば、5がもう1つの特定の制約によって暗示されている場合) 何か間違ったことをしたり、GHCが役に立たなかったりすると、偽の制約になる可能性があります。 ケース3との戦いに数時間費やしたところです。私はで遊んでおりsyntactic-2.0、でshare定義されているバージョンと同様に、ドメインに依存しないバージョンのを定義しようとしていましたNanoFeldspar.hs。 私はこれを持っていました: {-# LANGUAGE GADTs, FlexibleContexts, TypeOperators #-} import Data.Syntactic -- Based on NanoFeldspar.hs data Let a where Let :: Let (a :-> (a -> b) :-> Full b) share :: (Let :<: sup, Domain a ~ sup, Domain b ~ sup, SyntacticN (a -> (a …
322 haskell  constraints  ghc 

8
Haskell / GHCの `forall`キーワードは何をしますか?
次のように、forallいわゆる「既存のタイプ」でキーワードがどのように使用されるかを理解し始めています。 data ShowBox = forall s. Show s => SB s これは、forall使用方法のサブセットにすぎませんが、次のようなもので使用することに心を奪うことはできません。 runST :: forall a. (forall s. ST s a) -> a または、これらが異なる理由を説明します。 foo :: (forall a. a -> a) -> (Char, Bool) bar :: forall a. ((a -> a) -> (Char, Bool)) または全部RankNTypes... 私は、学術的な環境では普通の種類の言語よりも、明確で専門用語のない英語を好む傾向があります。私がこれについて読んでみようとするほとんどの説明(検索エンジンで見つけることができるもの)には、次の問題があります。 彼らは不完全です。彼らは、私は、コードを読むまで、私は幸せな気分になります(「実存的なタイプ」のように)このキーワードの使用の一部を説明することは完全に異なる方法での使用にそれを(のようなrunST、fooおよびbar上記)。 それらは、離散数学、カテゴリー理論、または抽象代数の今週で人気のある分岐の最新のものを読んだという仮定が密集しています。(「実装の詳細については、何でも紙に相談してください」という言葉を二度と読んだことがなければ、早すぎるでしょう。) 彼らは頻繁に単純な概念でさえも曲がりくねって壊れた文法と意味論に変える方法で書かれています。 そう... …
312 haskell  syntax  types  ghc  forall 

6
ウィークヘッドノーマルフォームとは
何をしない弱い頭正規形(WHNFは)意味ですか?何が頭ノーマルフォーム(HNF)と正規形(NF)の平均? 現実世界のHaskellは次のように述べています: おなじみのseq関数は、式を評価して、headノーマルフォーム(HNFと略記)と呼びます。最も外側のコンストラクタ(「ヘッド」)に到達すると停止します。これは、式が完全に評価される正規形(NF)とは異なります。 また、Haskellプログラマーが弱頭標準形(WHNF)に言及していることを聞くでしょう。通常のデータの場合、弱い頭部の正規形は頭部の正規形と同じです。違いは関数に対してのみ発生し、ここで私たちを心配するのはあまりにも厄介です。 いくつかのリソースと定義(Haskell Wiki、Haskell Mail List、Free Dictionary)を読みましたが、理解できません。誰かが例を挙げたり、素人の定義を提供したりできますか? 私はそれが次のようになると思います: WHNF = thunk : thunk HNF = 0 : thunk NF = 0 : 1 : 2 : 3 : [] WHNFとHNF はどのようseqに($!)関連していますか? 更新 私はまだ混乱しています。HNFを無視するという回答もいくつかあります。さまざまな定義を読むと、WHNFとHNFの通常のデータに違いはないようです。ただし、関数に関しては違いがあるようです。違いがなければ、なぜseq必要なのfoldl'ですか? 混乱のもう1つのポイントは、Haskell Wikiからです。これは、seqWHNFに換算すると述べており、次の例には何もしません。次にseq、評価を強制するために使用する必要があると言います。それはそれをHNFに強制していませんか? 一般的な初心者スタックオーバーフローコード: myAverage = uncurry (/) . foldl' (\(acc, len) x -> (acc+x, len+1)) …

7
代数的データ型の代数の乱用-なぜこれが機能するのですか?
代数的データ型の「代数的」表現は、数学のバックグラウンドを持つ誰かに非常に暗示的に見えます。私の言いたいことを説明してみましょう。 基本的なタイプを定義した 製品 • 連合 + シングルトン X 単位 1 そして、X²for X•Xと2Xfor X+Xceteraの短縮形を使用して、リンクされたリストなどの代数式を定義できます。 data List a = Nil | Cons a (List a) ↔ L = 1 + X • L そして二分木: data Tree a = Nil | Branch a (Tree a) (Tree a) ↔ T = 1 + X …

1
プッシュプルと矢印付きFRPの根本的な違いは何ですか?
HaskellでFRPを勉強したいのですが、使用するライブラリを決めるのが少し難しいです。多くは死んだ試みのようであり、いくつかは復活したようです(ヤンパでの最近の活動など)。 私が読んだことから、FRPには2つの「種類」があるようです:片側にプッシュプルFRP(Reactive-bananaなど)と反対側に矢印付きFRP(Yampaなど)。FranとFrTimeの時にいくつかの「クラシックFRP」がかつてあったようですが、私はこれらの中で最近の活動を発見していません。 これらの2つ(または3つ)は、FRPの根本的に異なるアプローチですか? そのうちの1つは時代遅れの理論ですか、それとももう1つは「未来のもの」でしょうか。 または、異なる目的に対応して並行して進化する必要がありますか? 各カテゴリの最も目立つライブラリに名前を付けましたか、それとも検討する他のオプションがありますか(Sodium、Netwireなど)? J.アブラハムソンのコメントで推奨されたEvan Czaplicki の講演をようやく見ました。それは非常に興味深く、私にとって事を明確にするのに役立ちました。この質問を面白く思った人にはぜひお勧めします。


1
テンプレートHaskellで関連する型の同義語を取得する
テンプレートHaskellは、型クラスで宣言された関連する型の同義語の名前や宣言を見つけることができますか?私は期待reify私がやりたいだろうが、すべての必要な情報を提供していないようです。関数型シグネチャを取得するために機能します。 % ghci GHCi, version 7.8.3: http://www.haskell.org/ghc/ :? for help ... Prelude> -- I'll be inserting line breaks and whitespace for clarity Prelude> -- in all GHCi output. Prelude> :set -XTemplateHaskell Prelude> import Language.Haskell.TH Prelude Language.Haskell.TH> class C a where f :: a -> Int Prelude Language.Haskell.TH> putStrLn $(stringE . …

6
テンプレートHaskellの何が悪いのですか?
テンプレートHaskellは、Haskellコミュニティから不幸な便宜と見なされることが多いようです。これに関して私が観察したことを正確に言葉にするのは難しいですが、これらのいくつかの例を検討してください どのHaskell(GHC)拡張機能をユーザーが使用/回避すべきかという質問に答えて、「The Ugly(but required)」にリストされているテンプレートHaskell テンプレートHaskellは、ボックス化されていない新しい型の値のベクトルの一時的/劣った解決策を検討しましたスレッド(ライブラリメーリングリスト) イェソッドは、テンプレートハスケルに頼りすぎていると批判されることがよくあります(この感情に対するブログの投稿を参照してください)。 私は、人々がテンプレートHaskellでかなりきちんとしたことをするさまざまなブログ投稿を見てきました。では、なぜテンプレートHaskellがこのように軽視されているのでしょうか。何が望ましくないのですか?テンプレートHaskellはどのような状況で避けなければならないのですか、そしてその理由は何ですか?

4
なぜHaskell(GHC)はとても速いのですか?
Haskell(GHCコンパイラを使用)は、予想よりもはるかに高速です。正しく使用すると、低レベルの言語に近づくことができます。(Haskellersが行うのが好きなことは、Cの5%以内を試すことです(またはそれを打つこともできますが、GHCはHaskellをCにコンパイルするため、非効率的なCプログラムを使用していることになります)。私の質問は、なぜですか? Haskellは宣言型であり、ラムダ計算に基づいています。マシンアーキテクチャは明らかにチューリングマシンに基づいているため、必須です。実際、Haskellには特定の評価順序さえありません。また、マシンデータタイプを処理する代わりに、代数データタイプを常に作成します。 最も奇妙なのは高次関数です。関数をその場で作成し、それらを使い果たすと、プログラムが遅くなると考えるでしょう。しかし、より高次の関数を使用すると、実際にHaskellが高速になります。実際、Haskellコードを最適化するには、マシンのようにではなく、よりエレガントで抽象的なものにする必要があるようです。Haskellのより高度な機能は、それを改善しなければ、パフォーマンスに影響を与えるようには見えません。 これが不満に聞こえる場合は申し訳ありませんが、ここに私の質問があります。その抽象的な性質と物理マシンとの違いを考慮して、なぜHaskell(GHCでコンパイル)がそれほど高速なのですか? 注:私がCや他の命令型言語がチューリングマシンにいくらか似ている(しかし、HaskellがLambda計算に似ているというわけではない)理由は、命令型言語では有限数の状態(別名行番号)があるためです、およびテープ(RAM)とともに、状態と現在のテープがテープに対して何を行うかを決定します。チューリングマシンからコンピューターへの移行については、Wikipediaのエントリ「チューリングマシンの同等物」を参照してください。

4
HaskellのSnapとYesod Webフレームワークの比較
最近のニュースでの2つのHaskell Webフレームワークは、Yesod(0.8)とSnap(0.4)です。 Yesodが現在Snapよりもはるかに多くの機能をサポートしていることは明らかです。しかし、YesodがHTML、CSS、Javascriptに使用する構文には我慢できません。 そこで、代わりにSnapを使用した場合、何が欠けているのかを理解したいと思います。たとえば、データベースのサポートがあるように見えません。セッションはどうですか?その他の機能?

1
Haskell:リスト、配列、ベクトル、シーケンス
私はHaskellを学んでいて、Haskellリストと(言語を挿入する)の配列のパフォーマンスの違いに関するいくつかの記事を読んでいます。 学習者である私は、パフォーマンスの違いについてさえ考えることなく、リストを使用していることは明らかです。私は最近調査を開始し、Haskellで利用可能な多数のデータ構造ライブラリを見つけました。 データ構造のコンピュータサイエンス理論に深く踏み込むことなく、リスト、配列、ベクトル、シーケンスの違いを誰かが説明できますか? また、あるデータ構造を別のデータ構造ではなく使用する一般的なパターンはありますか? 私が見逃していて、役に立つかもしれない他の形式のデータ構造はありますか?
230 haskell 

7
Node.jsに対するHaskellの応答とは何ですか?
Erlangコミュニティは、非ブロッキングI / Oをネイティブで実行し、デプロイメントを複数のプロセッサー(Node.jsに組み込まれていないもの)まで簡単に拡張できる方法があるため、Node.jsにうらやましくないと思います。詳細については、http://journal.dedasys.com/2010/04/29/erlang-vs-node-jsおよびNode.jsまたはErlangをご覧ください。 ハスケルはどうですか?HaskellはNode.jsのいくつかの利点、つまりマルチスレッドプログラミングに頼ることなくI / Oのブロックを回避するクリーンなソリューションを提供できますか? Node.jsには魅力的なものがたくさんあります イベント:スレッド操作はありません。プログラマーはコールバックのみを提供します(Snapフレームワークの場合と同様)。 コールバックは単一のスレッドで実行されることが保証されており、競合状態は発生しません。 素晴らしくシンプルなUNIXフレンドリーなAPI。ボーナス:優れたHTTPサポート。DNSも利用できます。 すべてのI / Oはデフォルトで非同期です。これにより、ロックを回避しやすくなります。ただし、コールバックでのCPU処理が多すぎると、他の接続に影響します(この場合、タスクはより小さなサブタスクに分割され、再スケジュールされます)。 クライアント側とサーバー側で同じ言語。(ただし、この例ではあまり価値を見ていません。jQueryとNode.jsはイベントプログラミングモデルを共有していますが、残りは大きく異なります。サーバー側とクライアント側の間でコードを共有する方法がわかりません。実際に役立つ。) これらすべてが1つの製品にパッケージ化されています。

6
Android OSでのHaskellプログラムの実行
Forenote:これは/ r / haskellで開始されたスレッドの拡張です 事実から始めましょう: Androidは素晴らしいオペレーティングシステムの1つです Haskellは地球上で最高のプログラミング言語です したがって、明らかに、それらを組み合わせると、Androidの開発がはるかに改善されます。したがって、本質的に私は、Android OS用のHaskellプログラムを作成する方法を知りたいだけです。私の質問は: HaskellプログラムをAndroid OSで実行/実行するにはどうすればよいですか?

2
-XAllowAmbiguousTypesはいつ適切ですか?
私が最近投稿した質問について、構文-2.0の定義についてをshare。私はこれをGHC 7.6で動作させました: {-# LANGUAGE GADTs, TypeOperators, FlexibleContexts #-} import Data.Syntactic import Data.Syntactic.Sugar.BindingT data Let a where Let :: Let (a :-> (a -> b) :-> Full b) share :: (Let :<: sup, sup ~ Domain b, sup ~ Domain a, Syntactic a, Syntactic b, Syntactic (a -> b), SyntacticN (a …
212 haskell  ghc 

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