問題タブ [clojure]
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.
clojure - Clojureのシーケンスからアイテムを削除するにはどうすればよいですか?
まず、各構造固有のシーケンスには、アイテムを削除するさまざまな方法があると思います。ベクトルはインデックスによるものであり、リストは最初または最後に削除される可能性があり、セットは削除する実際のアイテムを渡す必要があるなどです。
第二に、構造にとらわれない除去方法がいくつかあると思います。それらはseqインターフェイスで動作します。
Clojure ではシーケンスは不変であるため、実際に行っていることは、元のアイテムを除いて、元の安価なコピーを作成していると思われます。これは、リスト内包表記を削除に使用できることを意味しますが、不必要に冗長になるのではないかと思います。
Clojure シーケンスからアイテムを削除するさまざまな方法の慣用的な例をいくつか挙げてください。
clojure - Clojureループでlet'd変数を再定義する
わかった。私はClojureをいじくり回してきましたが、同じ問題が発生し続けています。この小さなコードの断片を見てみましょう。
今、私はこれが128で始まるシーケンスを次のように出力することを期待しています:
代わりに、それは無限ループであり、128を何度も印刷します。明らかに、私の意図した副作用は機能していません。
では、このようなループでxの値を再定義するにはどうすればよいでしょうか。これはLispのようなものではないかもしれませんが(おそらく、それ自体で再帰する無名関数を使用できます)、このように変数を設定する方法がわからない場合は、気が狂います。
私の他の推測はset!を使用することですが、私は拘束力のある形式ではないので、それは「無効な代入ターゲット」を与えます。
これがどのように機能するかについて教えてください。
spring - 春に管理されたClojureBean
Clojureコード(Clojure名前空間は通常のJavaインターフェースを実装すると思います)に裏打ちされたSpringマネージドBeanを作成できるかどうか疑問に思っていますか?もしそうなら、例をいただければ幸いです。
ありがとう、Dmitriy。
clojure - Clojure で素数を高速生成
私はClojure でProject Eulerの問題を解決することに取り組んでいますが、すでに数回素数の生成に遭遇しています。私の問題は、時間がかかりすぎることです。Clojure-y の方法でこれを行う効率的な方法を誰かが見つけるのを手伝ってくれることを望んでいました。
私がこぶしでこれをやったとき、私は力ずくでそれをやりました。それは簡単にできました。しかし、Xeon 2.33GHz で 10001 の素数を計算するには、この方法で 2 分かかりました。アルゴリズムは次のとおりです。
next-prime-slow を、いくつかの追加ルール (6n +/- 1 プロパティなど) を考慮した新しいルーチンに置き換えることで、約 70 秒まで高速化することができました。
次に純粋なClojureでエラトステネスのふるいを作ってみました。すべてのバグを取り除いたとは思いませんが、単純に遅すぎたのであきらめました (上記よりもさらに悪いと思います)。
これは悪いです。また、数値 150000 が小さい場合、スタック オーバーフローが発生します。これは、recur を使用しているにもかかわらずです。それは私のせいかもしれません。
次に、Java ArrayList で Java メソッドを使用してふるいを試しました。それにはかなりの時間とメモリが必要でした。
私の最新の試みは、Clojure ハッシュマップを使用したふるいです。ふるいにすべての数値を挿入してから、素数ではない数値を分解します。最後に、見つかった素数であるキー リストを取得します。10000 個の素数を見つけるのに約 10 ~ 12 秒かかります。まだ完全にデバッグされているかどうかはわかりません。私は Lispy になろうとしているので、これも再帰的です (recur と loop を使用)。
したがって、この種の問題では、問題 10 (2000000 未満のすべての素数を合計する) が私を殺しています。私の最速のコードは正しい答えを思いつきましたが、それを行うのに 105 秒かかり、かなりの量のメモリが必要でした (私はそれに 512 MB を与えたので、大騒ぎする必要はありませんでした)。私の他のアルゴリズムは時間がかかりすぎて、いつも最初にそれらを止めてしまいました。
ふるいを使用して、Java または C で非常に高速に、多くのメモリを使用せずに多くの素数を計算できます。問題の原因となっている Clojure/Lisp スタイルの何かが欠けているに違いないことはわかっています。
私が本当に間違っていることはありますか?Clojure は大規模なシーケンスでちょっと遅いですか? プロジェクトの Euler に関する議論を読んでいると、人々は他の Lisp で最初の 10000 個の素数を 100 ミリ秒未満で計算しました。JVM によって速度が低下する可能性があり、Clojure が比較的新しいことはわかっていますが、100 倍の違いは期待できません。
Clojure で素数をすばやく計算する方法を教えてもらえますか?
emacs - Emacs Clojureモードのタブインデントが巨大な場合がある
SLIME と swank-clojure で Emacs の Clojure モードを使用しています。インデントに問題があります。ほとんどの場合、インデントは希望どおりに機能します。TAB を押すと、2 つのスペースでインデントされます。しかし、たとえば、プロキシの場合、TAB で得られるインデントは非常に大きく、10 個のスペースがあります。例:
...
上記の actionPerformed などのプロキシ メソッドについても同じことが言えます。
この設定はどこにあり、どうすれば変更できますか? 私の理解では、それは Clojure モードの問題に違いありません。
python - Python のイディオム "if __name__ == '__main__'" に相当する clojure は何ですか?
私は clojure に手を出していますが、この一般的な python イディオムに相当する clojure (および/または Lisp) を特定しようとして少し苦労しています。
慣用句では、Python モジュールの下部には、多くの場合、少しのテスト コードと、コードを実行するステートメントがあります。たとえば、次のようになります。
これは、単純なアドホック テストに役立ちます。通常、このモジュールは と書くことfrom mymodule import MyClass
で使用されますが、この場合_runTests()
は が呼び出されることはありませんが、最後にスニペットがあればpython mymodule.py
、コマンド ラインから直接入力して実行することもできます。
Clojure (および/または一般的な Lisp) に同等のイディオムはありますか? 私は本格的な単体テストライブラリを求めていません(まあ、私はそうですが、この質問ではそうではありません)、特定の状況でのみ実行されるコードをモジュールに含めたいだけです。私が取り組んできたコードを実行する簡単な方法ですが、通常のモジュール/名前空間のようにファイルをインポートできます。
android - Android は動的言語に不利
Android が Dalvik VM で実行されているため、JVM 用の動的言語 (Clojure、Jython、JRuby など) は Dalvik (したがって Android) で良好なパフォーマンスを得るのが難しいと、ある時点で読んだことがあると思います。私の記憶が正しければ、その理由は、動的型付けを実現するために、内部で Java バイトコードをいじるのにかなりの手間がかかり、バイトコードから dalvik への変換ではこれを簡単に検出できないということでした。
では、Android 向けに開発したい場合、動的 JVM 言語を避けるべきでしょうか?
編集:もう少しコンテキストを提供する必要があったと思います。Clojure を使用して Android 向けのアプリを開発することを検討していました。Clojure を使用することを考えていた理由はいくつかあります。
FPを学びたい
私はJavaを学ぶことにあまり興味がありません
Clojure には、非常に興味深い言語概念がいくつかあるようです (たとえば、STM)。
しかし、Clojure で Android 用のアプリを作成しようとすると、容認できないパフォーマンスの問題があることがわかりました。しかし、動的型付けを取得するために必要なバイトコード操作が原因で、動的型付け言語 (Clojure など) に問題があるというブログ投稿を見つけました。だから私は、これが真実かそうでないかの独立した確認を探していました. この特定の問題では、動的に型指定されたすべての JVM 言語を同じものとして扱うことができると仮定するよりも、私はよく知っていたはずです。私はかなり幅広い質問をしたと思うので、人々が私が尋ねていることをよく理解していなくても驚かないでください.
lisp - 関数定義にメタデータを自動的に追加するClojureマクロの作成を手伝ってください
Macro Clubの最初のルールはマクロを使用しないことであると理解しているので、次の質問は、他の何よりもClojureを学習するための演習として意図されています(これは必ずしもマクロの最良の使用ではないことを理解しています)。
(defn)
通常のマクロのラッパーとして機能し、定義された関数にメタデータを追加する単純なマクロを作成したいと思います。だから私はこのようなものが欲しいです:
...次のようなものに拡張します:
原則として、これは私にはそれほど難しいことではないように思われます[args]
が、定義された関数のおよびその他のフォームを正しく解析するための詳細を特定するのに苦労しています。
ボーナスとして、可能であれば、マクロがdefnのすべての異なる形式(つまり、docstring、複数のアリティ定義などの有無にかかわらず)を処理できるようにしたいと思います。clojure-contrib/def
パッケージには役立つと思われるものがいくつかありましたが、それらを使用したサンプルコードを見つけるのは困難でした。
clojure - Clojureでマップ/構造体を永続化する最も簡単な方法は何ですか?
明らかな方法は、Clojure Contrib から JDBC サポートをロードし、マップ/構造体をテーブルに変換する関数を作成することです。これの欠点の 1 つは、あまり柔軟性がないことです。構造を変更すると、DDL の変更が必要になります。これは、DDL 生成を記述する (難しい) か、手動で移行をコーディングする (退屈) ことを意味します。
どのような代替案が存在しますか? 回答は ACID である必要があり、ファイルへのシリアル化などを除外します。
python - テールコールの最適化を実装するために、jvm は何を犠牲にする必要がありますか?
テールコールの最適化がないという制限 (clojure 実装ではなく jvm の制限) を除けば、clojure 実装は優れていると人々は言います。
http://lambda-the-ultimate.org/node/2547
TCO を Python に実装すると犠牲になると言われてきました
- スタック トレース ダンプ、および
- デバッグの規則性。
テールコール最適化の重要性と、Python がそれを必要とする理由を説明してください
TCO の jvm 実装のために同じ犠牲を払わなければならないでしょうか? 他に何かを犠牲にする必要がありますか?