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

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

2
Haskellのように、Scala OptionタイプがMaybeと呼ばれないのはなぜですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 Haskellのように、Scala OptionタイプがMaybeと呼ばれないのはなぜですか? 多分私にはもっと「意味論的」になりますが、Optionには私が知らない別の動作があるかもしれません。 ScalaのOptionがMaybeと呼ばれなかった特別な理由はありますか?

5
コンストラクタの逆の関数の適切な用語は何ですか?データ型から値をラップ解除するには?
編集:私は質問を少し言い換えています。デストラクタという用語がOOPでまったく異なる何かに使用されていることに気づかなかったため、どうやら混乱が生じたようです。これは、オブジェクトが破棄されるときに呼び出される関数です。関数型プログラミングでは、可変状態を回避しようとするため、それに相当するものはありません。(質問に適切なタグを追加しました。) 代わりに、値をアンラップするためのレコードフィールド(特にnewtypes などの単一値のデータ型の場合)がdestructorまたはdeconstructorと呼ばれることもあります。たとえば、(Haskellで)次のようにします: newtype Wrap = Wrap { unwrap :: Int } ここWrapにコンストラクタがあり、それunwrapは何ですか? 質問は次のとおりです。 unwrap関数型プログラミングをどのように呼び出すのですか?解体者?デストラクタ?それとも他の言葉で? そして、明確にするために、この/他の用語は他の関数型言語に適用できますか、それともHaskellだけで使用されますか? おそらく、これには一般的に、非機能的な言語での用語はありますか? 私は両方の用語を見ました、例えば: ...ほとんどの場合、スマートコンストラクターとデストラクタを提供して、これらを簡単に操作できるようにします。... で、Haskellのウィキ、または ...ここでの一般的なテーマは、コンストラクターとデコンストラクターのペアを融合することです... で、Haskellのwikibook(ここではそれはおそらく、もう少し一般的な意味でのものです)、または newtype DList a = DL { unDL :: [a] -> [a] } unDL関数はdeconstructorで、DLコンストラクターを削除します。... 中実世界ハスケル。

2
技術的な「ドグマティズム」の扱い方
私は仕事を辞めて(他の国に移動するために)JavascriptとHaskell(いくつかのpython)でプログラミングすることがほとんどでした。人々は客観的で、ポジティブで、数学的でありながら、たくさんのことを成し遂げたので、私はそれが本当に好きでした。これは本当にプロフェッショナルなショップでした。 現在、私はAgile / XPショップで働いています。これは良いことですが、テクノロジーとライブラリーの選択に関しては、私たちはプロではないかもしれません。ソフトウェアを書くための私たちのアプローチは少し未熟で構造化されていないように感じます。私は私が提供された本を読もうとしていますが、彼らはこのスタイルを奨励しているようです(ugh)。多くの場合、Gitハブからライブラリを選択して、レビューなしで使用します。 たとえ一人の小さな仕事であっても、常に誰かと仕事をすることを強いられます。些細な反例によってルールを破ることができる場合でも、すべてに対して少し「速い」ルールがあるようです(その反例をあげるのを間違えて、口頭で攻撃されました)。これは州では普通ですか?この独断をどのように処理しますか?
13 ruby  haskell  agile 

9
再帰の理解を改善するためのリソースはありますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 6年前に閉鎖されました。 私は再帰とは何かを知っています(通常、パテンが自身内で発生するとき、通常はブレークアウト条件付き...の後にその行の1つでそれ自体を呼び出す関数ですか?)、それらを詳しく調べれば再帰関数を理解できます。私の問題は、新しい例を見ると、最初はいつも混乱していることです。ループ、またはマッピング、ジッピング、ネスト、ポリモーフィックコールなどが表示される場合、それを見るだけで何が起こっているかがわかります。再帰的なコードを見ると、私の思考プロセスは通常「wtf is this?」です。続けて「ああ、再帰的」、続いて「もし彼らが言うなら、うまくいくに違いない」と続きます。 この分野でスキルを構築するためのヒント/計画/リソースはありますか?再帰は奇妙な概念の一種なので、それに取り組む方法も同様に奇妙で明白ではないかと考えています。

1
関数がべき等であることを証明することは可能ですか?
関数がor等であることを証明するために静的型または依存型を使用することは可能ですか? GoogleとStackOverflow / StackExchangeのさまざまな場所で検索しましたが、運が悪かったのです。私が見つけた最も近いものは、イドリスに関する次の会話でした:https : //groups.google.com/forum/#! topic/ idris- lang/ yp7vrspChRg 残念ながら、その議論は私の頭の上で少しです。
12 haskell 

2
Haskellが3n + 1問題を解決する方法
:ここではSPOJから、簡単なプログラミングの問題であるhttp://www.spoj.com/problems/PROBTRES/が。 基本的に、iとjの間の数値に対して最大のCollat​​zサイクルを出力するように求められます。(数$ n $のコラッツサイクルは、最終的に$ n $から1に到達するためのステップ数です。) 私は、JavaまたはC ++のパフォーマンスと比較してパフォーマンスを解決するHaskellの方法を探しています(許可された実行時間の制限に収まるように)。既に計算されたサイクルのサイクル長をメモする単純なJavaソリューションは機能しますが、Haskellソリューションを取得するためのアイデアの適用に成功していません。 Data.Function.Memoizeと、この投稿/programming/3208258/memoization-in-haskellのアイデアを使用して、自家製のログ時間メモ化手法を試しました。残念ながら、メモ化は実際にはcycle(n)の計算をさらに遅くします。減速はHaskellウェイのオーバーヘッドによるものだと思います。(解釈する代わりに、コンパイル済みのバイナリコードで実行してみました。) また、iからjへの単純な反復処理にはコストがかかる($ i、j \ le10 ^ 6 $)と思われます。そこで、http://blog.openendings.net/2013/10/range-trees-and-profiling-in-haskell.htmlからのアイデアを使用して、範囲クエリのすべてを事前計算しようとしました。ただし、これでも「Time Limit Exceeding」エラーが発生します。 このために、きちんとした競争力のあるHaskellプログラムに知らせるのを手伝ってもらえますか?

1
Haskellファンクターのターゲットカテゴリーに派生型のみがあるのはなぜですか?
Haskellでは、Functorタイプクラスファンクターは次のように定義されます(Haskell wikiなどを参照)。 class Functor (f :: * -> *) where fmap :: (a -> b) -> f a -> f b これまで(私が間違っているなら、私を修正してください)私は理解したように、このようなファンクタは唯一のカテゴリは型コンストラクタを使用して構築され、例えば、対象カテゴリとして持つことができるよう[]、Maybe一方、など、1は任意のカテゴリを持つファンクタを考えることファンクターのターゲットとして、すべてのHaskellタイプのカテゴリーなど。たとえば、またはIntだけでなく、ファンクターのターゲットカテゴリのオブジェクトになります。Maybe Int[Int] Haskellファンクターに対するこの制限の動機は何ですか?
12 haskell 

2
Haskellのメモ化の背後にある概念を誰かが説明できますか?
(コーディングの問題ではなく、概念的なメカニズムに関するものなので、ここに質問を入れています) 私はそのequasionでフィボナッチ数列を使用していた小さなプログラム、に取り組んでいたが、私は特定の数を乗り越えた場合、それは痛々しいほど遅くなったことに気づいた、私はとして知られているハスケルの技術でつまずい少し周りグーグルMemoization、彼らは次のように動作するコードを示しました: -- Traditional implementation of fibonacci, hangs after about 30 slow_fib :: Int -> Integer slow_fib 0 = 0 slow_fib 1 = 1 slow_fib n = slow_fib (n-2) + slow_fib (n-1) -- Memorized variant is near instant even after 10000 memoized_fib :: Int -> Integer memoized_fib = (map fib …

2
関数型プログラミングとステートフルアルゴリズム
Haskellで関数型プログラミングを学んでいます。それまでの間、私はオートマタ理論を研究しており、この2つがうまく調和しているように思えるので、オートマタで遊ぶための小さなライブラリを書いています。 これが私に質問をさせた問題です。状態の到達可能性を評価する方法を研究しているときに、いくつかのパスがいくつかの状態を共有する可能性があり、それらを複数回評価する可能性があるため、単純な再帰アルゴリズムは非常に非効率であるという考えを得ました。 たとえば、ここで、aからgの到達可能性を評価する場合、dとcを通るパスをチェックする際にfの両方を除外する必要があります。 だから私の考えは、多くのパスで並行して動作し、除外された状態の共有レコードを更新するアルゴリズムは素晴らしいかもしれないということですが、それは私にとってはやり過ぎです。 いくつかの単純な再帰の場合、引数として状態を渡すことができることがわかりました。ループを回避するために通過した状態のリストを転送するため、ここで行う必要があります。しかし、リストを逆方向に渡す方法はありcanReachますか?たとえば、関数のブール結果と一緒にタプルで返すのですか?(これは少し強制的に感じますが) 例題の妥当性に加えて、この種の問題を解決するために利用できる他のテクニックは何ですか?これらはと何が起こるかのようなソリューションがあるように持っていることを一般的に十分でなければならないような気がしますfold*かmap。 これまでのところ、learnyouahaskell.comを読んで何も見つかりませんでしたが、まだモナドに触れていないことを考慮してください。 (興味があれば、コードレビューにコードを投稿しました)

2
関数型リアクティブプログラミング—フェイは十分に表現力がありますか?
だから私はかなり多くのajax呼び出しとコールバックイズムの他の関与でかなり関与したjavascript / htmlクライアントをやっています。私はこの目的のためにFayを使用することを考えています。私はエルムを知っています。それを試してみて、FRPの要素が好きだった。今、私はフェイで同様の構造が可能かどうかを知りたいと思っています。 この時点でFayにFRPの具体的な例はありますか? 関連する技術: Arrowlets、javascriptの矢印付きFRP FlapJax、別のJavaScriptの代替 Bacon.js、javascriptのFRP Baconを使用した解決策の1つ。デモ。

2
シミュレーションおよびモデリング用のFP
シミュレーション/モデリングプロジェクトを開始しようとしています。OOPがこの種のプロジェクトに使用されていることは既に知っています。しかし、Haskellを勉強することで、コンポーネントのシステムのモデリングにFPパラダイムを使用することを検討しました。詳しく説明します。 データセット(温度や圧力、PDE、境界条件などのパラメーター)で特徴付けられるタイプAのコンポーネントと、異なるデータセット(異なるまたは同じパラメーター、異なるPDEおよび境界条件)。また、各コンポーネントに適用される関数/メソッドが同じであると仮定しましょう(たとえば、Galerkinメソッド)。オブジェクトの可変状態は、定数でないパラメーターに使用されます。 OOPアプローチを使用する場合、各タイプのデータをカプセル化する2つのオブジェクト、PDEを解決するメソッド(ここではコードの再利用に継承が使用されます)、およびPDEのソリューションを作成します。 一方、FPアプローチを使用する場合、各コンポーネントは、PDEのソリューションを取得するためにデータパーツとデータに作用する関数に分割されます。非定数パラメーターは、他の何かの関数として渡されるか(たとえば、時間)、ある種の可変性(可変性のエミュレーションなど)で表現されます。 結論として、FPアプローチの実装は、OOPアプローチと比較して、実際にはシンプルで管理しやすい(pdeを解決するために異なるタイプのコンポーネントまたは新しいメソッドを追加する)でしょうか? 私はC ++ / Fortranのバックグラウンドを持っていますが、プロのプログラマーではないので、間違いがあれば修正してください。

2
機能的なコンピューターを構築できますか?
FPがやったように、結局、すべてのプログラムは構造化されています。つまり、どれだけ純粋に機能するかは問題ではありません。常にアセンブリに変換されるため、実際に実行されるのは命令、状態、ループです。FPをエミュレートしています。 ハードウェア初心者として、私の質問は次のとおりです。機能スタイルで実際に計算するコンピューターアーキテクチャを使用しないのはなぜですか。たとえば、コンピューターは「concat」、「map」、「reduce」などのプリミティブな「機能チップ」で構成できます。プログラムは、目的の結果を計算するために、これらのチップ間でデータを流す方法をコンピューターに伝えるだけです、連結言語など。 これは本当に意味をなさないが、私が考えていることを説明するかもしれない。

1
HaskellのMaybeコンストラクターを「Just」と呼ぶことをサポートする直観は何ですか?
のようなオプションの型の直感は、Int Maybe Intがない(つまり、そこにNothingある)か、Int があるということです。そこに何かがあります。 それは私たちが「負」の場合の型コンストラクタを呼び出すように私には理にかなってNothing何もありませんということ-それは正確にすることを意味するので、Intそこに。しかし、なぜ実際にそこにある何かに重点が置かれている場合にだけ、単語を使用するのですか? 私にとって、「Just」という言葉には、説明しているものが代替品よりも少ないという意味が含まれています。実際にそこにある何かの反対。例えば、 A:今夜何かしますか? B:いいえ。私はただ滞在してテレビを見ます。 A:あなたの家の周りの不気味な幽霊の音を調査しましたか? B:ええ、実際には単なるフクロウでした。 明らかに、この命名の選択の根拠となった直感が欠けています。それは何ですか?私にとって、「Just」という言葉は、Maybeタイプでの使用方法の反対を意味します。

1
Haskell型クラスを使用して可換性を強制する
一緒に交差できる幾何オブジェクトの型クラスを定義したい: class Intersect a b c | a b -> c where intersect :: a -> b -> c -- Language extensions: -XMultiParamTypeClasses, -XFunctionalDependencies アイデアは、さまざまなタイプのオブジェクトを処理できる汎用の交差関数を持つことです。次のようなインスタンスを想像できます instance Intersect Line Plane (Maybe Point) where ... instance Intersect Plane Plane (Maybe Line) where ... しかし、交差点が可換であることも宣言したいと思います。 instance (Intersect a b c) => Intersect b …

2
Haskellのメモリ効率-より良いアプローチはどれですか?
修正された2次元文法構文に基づいて、マトリックス圧縮ライブラリを実装しています。データ型に対して2つのアプローチがあります-メモリ使用量の場合、どちらが良いでしょうか?(何かを圧縮したい;))。 文法には、プロダクションが4つだけの非ターミナル、または右側にターミナルが含まれています。同等性チェックと文法最小化のためにプロダクションの名前が必要になります。 最初: -- | Type synonym for non-terminal symbols type NonTerminal = String -- | Data type for the right hand side of a production data RightHandSide = DownStep NonTerminal NonTerminal NonTerminal NonTerminal | Terminal Int -- | Data type for a set of productions type ProductionMap = Map …

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