問題タブ [elm]
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.
functional-programming - Elm 初心者: ブラックジャックを書こうとしている
私は Elm について独立した研究を行っており、プログラミングをもう一度学習しているように感じます! 言語を学ぶプロジェクトとして、簡単なブラックジャックを立ち上げて実行しようとしていますが、始めてみると、まだ理解していないことがたくさんあることに気づきました。デッキからカードを引いてリストに追加する限り、私は持っています:
私の質問は、主に継続する方法についてです。完成した Elm プロジェクトを見ると少しは役に立ちますが、それらの多くは初心者の私には解析が困難です。どんな方向性でも役に立ちます!
私が最初に抱えた問題の 1 つは、ドローしたカードをリストから除外するなどの方法を使用して、ドローしたカードをデッキから削除する方法を見つけようとすることでした
dropCard deck card = filter (\card /= nextCard) deck
。しかし、Elm についての私の理解では、シグナルが変化するたびにプログラムが再評価されます。つまり、カードが引かれるたびにデッキが完全に再作成されます。foldp
オリジナルのデッキも必要ですか?関数型プログラミングで、あるリストから要素を削除して別のリストに追加する適切な方法は何ですか? のような機能合成
toHand . dropCard card
?勝敗を決定するためにカードの顔を追加するために、リストから整数値を取得する方法がわかりません。をやってみ
fst (head deck)
ましたが、おそらくデッキ自体が何らかのシグナルであるため、型エラーが発生しました。私が見ていないものはありますか?
そうは言っても、これまでのところ、私は Elm を本当に楽しんでいます!
node.js - elm-repl は nodejs を見つけることができません
このページの指示に従って、私は実行しました:
残念ながら、実行するelm-repl
と、nodejs がどこにあるかわからないことがわかります。
どうすればelm-repl
正しい方向を指すことができますか。他の 3 つのプログラムは今のところ問題なく動作しています。
haskell - Elmで、シグナル配下の値がリストなどの複合型の場合、ひとつの要素を効率よく更新する方法
私は Elm にかなり慣れていないのですが、Elm が GUI を扱う方法に深く惹かれています。しかし、深く考えた結果、Signal の下にあるリストまたは finger ツリー (Elm のライブラリに既に存在する場合、Haskell の finger ツリーのように) の 1 つの要素だけを効率的に更新するのは困難であり、そのサイズもさまざまであることがわかりました。時間に対して。
具体的には、動的な指の木を表現するには、
Signal [ {-指の木の要素型-} ]
しかし、finger ツリーの 1 つの要素だけを効率的に更新したい場合は、次のように記述する必要があります。
シグナル [ シグナル {-コア データ型-} ]
しかし、Elm ではシグナルはモナドではありません。2 つのレイヤーのシグナルを 1 つのレイヤーにフラット化するにはどうすればよいでしょうか?
コメント 1: この状況で Elm がどのように動作するかは詳しくわかりません。指の木全体を再処理するのは私の推測です。
コメント 2: たとえば、 とマークされたs
タイプの信号値と、 とマークされSignal (fingerTree Int)
た次の関数がありf
、その入力が であるs
としlift (fmap (+1))
ますSignal (fingerTree Int) -> Signal (fingerTree Int)
。また、s
要素が 1 つだけ変更された場合、関数f
は のすべての要素に対して (+1) 操作をやり直す必要がありs
ます。明らかに、それは時間の無駄であり、Elm が不変性を検出するのに十分なほどインテリジェントであるかどうかはわかりません。
elm - foldp と Elm でリストを追加するとスタック オーバーフローが発生する
Elm でインタラクティブなグラフを作成しようとしています。私の最初のアプローチは、状態リストに信号値を追加し、そのリストから線をプロットすることでした。ただし、foldpにリストを追加するとスタックオーバーフローエラーが発生するため、これを機能させることはできません(コードを参照)。
意図した動作ですか?値のリストである状態を管理するためのより良いアプローチについてアドバイスする人はいますか?
signals - Elm シグナルと型注釈
Elm の初心者だが長年の Haskeller から、簡単な質問です。
目的: 指定された位置に町が描かれた地図があり、ユーザーがクリックした町に近いかどうかを確認し、その町を特定したいと考えています。
だから、私はいつものように信号を収集します:
これにより、Tuple が得られます。これを Int (最寄りの町の番号を示す) に変換したいと考えています。町は次のように指定されています。
これを行う関数は次のとおりです。
ここで、この関数を clickPositionsSignal に適用する必要があります。
さまざまな例を見て、いくつかのコードを次のように変更しました....
....そしてこれはうまくいきます。最寄りの町の番号を取得します。
しかし、これはどうしようもなく面倒で重複しています。問題は、なぜ単純に書けないのかということです:
その行は、私がまだ解釈するのに十分な経験がない複数のタイプエラーをスローします
javascript - JavaScript での関数型リアクティブ プログラミングは、リスナー参照でより大きな問題を引き起こしますか?
JavaScript では、オブザーバー パターンが頻繁に使用されます。それには 1 つのトリッキーなことがあります。クリーンアップが必要です。通常のアプリケーションでは、次の経験則を使用します。
- 被験者の寿命が観察者よりも短い(または等しい)場合、私はただ行うことができます
subject.on('event', ...)
- 被験者の寿命が観察者よりも長い場合、使用する必要があります
observer.listenTo(subject, 'event', ...)
2 番目のケースでは、listenTo
はオブザーバーのライフサイクルを認識しており、オブザーバーが終了する時間になると自動的にリスナーを削除します。
常にアプリケーションの一部のみがアクティブな現代の SPA (Single Page Application) スタイルでは、これが非常に重要になります。これを、イベント ストリームの最適な候補であり、おそらく長寿命である Web ソケットと組み合わせると、これはさらに重要になります。
FRPでは、時間の経過とともに変化する値を表すイベントストリームのようなものを持っているので、私は(知らず知らずのうちに)多くのリスナーを作成しています。それぞれfilter
、map
およびflatMap
(おそらくリスナーを使用して) 前のストリームに結び付けられた新しいストリームを作成します。
私の考えでは、これらのリスナーをいつどのように削除する必要があるかを判断するのは非常に難しいようです。この問題について最初に考えたのが私だとは想像できませんが、インターネット上でこれについて多くを見つけることができませんでした。
他の言語のいくつかのフレームワークが弱参照を使用しているのを見てきました。JavaScript には弱参照の概念がありません (ここでは WeakMap は使用できません)。あったとしても、ガベージ コレクションがいつ行われるかが不明なので、それは悪い考えのように思えます。
- これは現在のフレームワークでどのように解決されていますか?
- フレームワークはオブジェクトのライフサイクルに結び付いていますか? はいの場合:どのように?
elm - Elmで複数の入力?
Elmで1つのイベントハンドラーで複数の入力ハンドルをトリガーすることは可能ですか? たとえば、次のものがあるとします。
この場合、[Go] ボタンをクリックすると、値がgo
入力に送信されます。私が望むのは、同じクリック イベント (たとえば、go2
入力) で別の入力に別の値を送信することです。
入力を結合するか、1 つの入力を複数の信号にファンアウトさせる方法はありますか?
haskell - Haskell でチルダ展開と $PATH 検索を実行するにはどうすればよいですか?
Haskell で書かれた elm-reactor プロジェクトを実行しようとしています。elm
次のようなコマンドに proc アウトしようとしているため、失敗します。
私の elm 実行可能ファイルは、私の PATH にある ~/.cabal/bin にあります。
このSystem.Process.proc
コマンドは、コマンド引数の $PATH を検索しますが、チルダ (~) 展開を行わないため、elm は見つかりません。
System.Process.shell
逆の問題があります。チルダ展開はしますが、$PATH は検索しないようです。
System.Process コマンドのソースから、ほとんどすべてが "runInteractiveProcess" への外部 ccall にかかっているように見えます。runInteractiveProcess のソースがどこにあるのかわかりません。私の C は約 15 年分のさびた状態です。
この問題を回避するには、
a) 完全に展開された cabal/bin パスを PATH に追加するか、
b)elm
作業ディレクトリから cabal/bin 内のその場所へのシンボリック リンク。
しかし、将来の採用者が私が経験した問題を解決するために、elm プロジェクトの修正案を提供したいと思います。System.Process
私が試していない、彼らがここで行うべき電話はありますか? それとも、彼らが使用すべき別の方法はありますか? 最悪の場合getEnv
、PATH と HOME に対して、proc を呼び出す前にそれを使用して独自のファイル検索を実装できると思いますが、それはクロスプラットフォームの互換性を壊します。他の提案はありますか?