問題タブ [starray]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - STArrayとスタックオーバーフロー
STArrayで最小要素を見つけようとする次の試みが、ghc
(-Oレベルに関係なく、7.4.1)でコンパイルされたときにスタックスペースのオーバーフローにつながる理由を理解するのに苦労していますが、次の場合は正常に機能しますghci
:
注:切り替えてSTUArray
もST.Lazy
効果がないようです。
STArray
しかし、主な質問:内部でこのような「折り畳みのような」操作を大規模に実装する適切な方法は何でしょうST
か。
haskell - ST-Monad の複数の更新
STモナドを使って学びたい。したがって、すべての整数について計算するコードを少し書き直して、限界まで、すべての適切な約数のリストを作成したいと思います。結果は配列である必要があり、インデックス 'n' のエントリは適切な除数のリストである必要があります。
これは、整数 'n' ごとにその倍数のリスト 'l' を計算し、インデックス 'm' で 'l' から倍数 'm' ごとにリストに除数 'n' を追加することによって行われます。
変更したいコードは次のとおりです。
そして、それが私がそれを試す方法です:
runSTArray の結果
残念ながら、それはコンパイルされておらず、エラーメッセージは私に何も言いません。2 つの質問があります。
- なぜコンパイルされないのですか?エントリを正しく抽出するにはどうすればよいですか?
- 経験豊富な Haskell-Programm は、ST-Monad を使用しなければならないという制限の下で、この問題をどのように解決するでしょうか (効率化のため)。
編集: コンパイラ メッセージ
失敗しました。モジュールがロードされました: なし。
arrays - このアルゴリズムを改善するには、1) 配列を使用し、2) リストの連結を回避します (遅延リスト?)。
STArray がどのように機能するかを学ぼうとしましたが、できませんでした。(Docは貧弱です、または少なくとも私が見つけたものです)。
いずれにせよ、次のアルゴリズムがありますが、多くの !! を使用しており、遅いです。STArrayモナドを使用するように変換するにはどうすればよいですか?
編集
おっと、!! 問題ではありませんでした。アルゴリズムの次のバージョン (以下) では、!!; の使用を削除しました。また、@pedrorodriguesが指摘したように、1が素数ではないことを修正しました
今、この質問は実際には約2つの質問です:
1.- リストの代わりに配列を使用するようにこのアルゴリズムを変換する方法は? (Haskellで状態と配列を処理する方法を学ぶためのものです)コメントで誰かがすでに答えていますが、あまりよく説明されていない例を指しています。
2.- 新しい素数が見つかるたびにリストの連結をなくすには?
True -> primesAcum++[現在]
haskell - Haskell ST Monad: (MArray (STArray s) Int (ST s1)) のインスタンスがありません
私はこの 1、2 か月間 Haskell を学んでおり、最近このコーディングの問題を解決しました。追加の課題は、余分なスペースなしで線形時間でタスクを実行することでしたが、純粋に関数的な方法で実行できるとは思わなかったので、自然に ST モナドについて知り、これは良い機会になると思いました。それについてもっと学ぶために。とにかく、ここに私が書いたコードがあります:
アイデアは、1 ≤ a[i] ≤ n であり、各要素が最大 2 回出現するという前提条件を使用することです。しかし、コードは私に次のエラーを与えます。
誰かが私を正しい方向に向けてくれることを願っています!