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

Clojureは、Java仮想マシン用の最新のLisp方言です(CLRとJavaScript用のバージョンを備えています)。JavaでのLispの単なる実装ではなく、ClojureはJavaのクラスとエコシステムへのアクセスを提供します。

1
Clojure 1.2.1 / 1.3 / 1.4 'Grails 2.0.0ランタイムで生成されたプロキシが失敗します。1.2.0で結構です
私はGrails 2.0.0(および2.1.0-SNAPSHOT)でGrails Clojureプラグインの拡張に取り組んでおり、それをClojure 1.3.0に更新してclojure.tools.loggingを追加したいと考えていました。 Clojure は、in のログストリーム関数のプロキシのコンパイル中に例外をスローし ます。ByteArrayOutputStreamclojure.tools.logging ClassCastException: clojure.asm.Type cannot be cast to clojure.lang.IFn (https://gist.github.com/a6ae681c37091a3d2379) 私は行って、削除してclojure.tools.logging、次の削除されたプロキシを書きましたObject: (proxy [java.lang.Object] [] (toString [] "proxy's toString")) そして、それも同じClassCastExceptionメッセージを投げました。 私は、印刷しようとしたmacroexpandは-1のプロキシと同じものを得ました。 Clojure 1.2.0に戻したところ、プロキシは再び正常に機能しました。 1.4.0の多数の化身を試しましたが、それらは1.3.0と同じ動作を示します。1.2.1もある種の例外をスローしますが、1.3.0をヒットしようとしているので、あまり時間をかけませんでした。 いずれかで定義された「GEN-メソッド関数にスタックトレースポイントのletのフォームgenerate-proxyの中でcore_proxy.clj。 println何が起こっているのかを把握できるかどうかを確認するために、の周りに小さなを散りばめました。多分この次のステートメントは私の側の読者の大きな誤解を裏切るでしょうが、それらを単に追加するだけprintlnで、私が完全に予期していなかった方法でコンパイル時の動作を変更しました。のすべてのClojureテストにmvn package引き続き合格したにもかかわらず、例外の場所と例外の種類が完全に変更されました。 たとえば、printlnバイトコードの生成を開始する直前にgenメソッドに単一を追加すると、Clojureがスローされました ClassCastException: clojure.lang.PersistentArrayMap cannot be cast to java.lang.Class (https://gist.github.com/5a7a40929a6c4a104bd5) println(s)を配置した場所に応じて他のさまざまなエラーが発生しましたが、これが最も一般的です。 明らかに、GrailsとClojureの一部の側面がここで正しくメッシュ化していませんが、接続が表示されません。最初はASMの非互換性を疑っていましたが、Clojureには独自のASM名前空間があるため、それが問題であることはわかりません。しかし、私は間違っているかもしれません。私は何clojure.lang.Compiler日もproxyとgenerate-proxyを凝視してこれを機能させようとしており、スチームがなくなったので、前進をほとんど停止しました:( リンクの欠如をお詫び申し上げます。以下からコピーして貼り付けることができます。 Grails Clojure-github.com/grails-plugins/grails-clojure Clojureツールのロギング-github.com/clojure/tools.logging/blob/master/src/main/clojure/clojure/tools/logging.clj 133行目は「プロキシ
103 grails  groovy  clojure  proxy 

6
JAR内のネイティブライブラリとJNIライブラリをバンドルする方法
問題の図書館は東京内閣です。 再配布の問題を回避するために、ネイティブライブラリ、JNIライブラリ、およびすべてのJava APIクラスを1つのJARファイルに含めたいです。 GitHubでこれが試みられているようですが、 実際のネイティブライブラリは含まれず、JNIライブラリのみが含まれます。 これは、Leiningenのネイティブ依存プラグインに固有のようです(再配布可能としては機能しません)。 問題は、すべてを1つのJARにバンドルして再配布できるかどうかです。はいの場合、どのように? PS:はい、移植性に影響する可能性があることを理解しています。


12
誰かがClojureトランスデューサーを簡単に説明してくれませんか?
私はこれを読んでみましたが、それでもそれらの価値やそれらが何を置き換えるのかわかりません。そして、それらは私のコードをより短く、より理解しやすいものにしますか? 更新 多くの人が回答を投稿しましたが、トランスデューサーを使用した場合と使用しない場合の例を非常にシンプルなものにして、それを私のようなばかでさえ理解できるとよいでしょう。もちろんトランスデューサーがある程度の高度な理解を必要としない限り、その場合私はそれらを決して理解しません:(

5
clojureキーワードを文字列に変換する方法は?
私のアプリケーションでは、例えばclojureキーワードを変換する必要があります。:var_nameを文字列 "var_name"に変換します。それをどのように行うことができるかについてのアイデアはありますか?
100 clojure 

5
Clojureは何に役立ちますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。私たちは回答が事実、参考文献、または専門知識によってサポートされることを期待しますが、この質問はおそらく議論、議論、投票、または拡張された議論を誘います。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 8年前に閉鎖。 Clojureを使用している実際のアプリケーションは何ですか? 私はグルー関連のものにはGroovyを、大きなシステムにはJavaを、構文解析とグルーにはPython / Perlスクリプトを使用しています。私は自分がJavaからClojureを呼び出すのを見ることができましたが、それ自体をどこで使用するのかわかりません。アドホックタスクにはほとんどすべてのスクリプト言語を使用する方が簡単だと思います。 私はどうしてもGroovyのエキスパートやファンではありませんが、サポートフレームワーク、ツール、言語構成(クロージャー、関数型プログラミング)が充実していることに驚かされます。Scalaについても同じことが言えます。 他のシステムに組み込まれている言語としての未来なのでしょうか。
100 clojure 

5
Clojure:cons(seq)とconj(リスト)
私はそれconsがシーケンスをconj返し、コレクションを返すことを知っています。またconj、コレクションの最適な末尾にconsアイテムを「追加」し、常にアイテムを前面に「追加」することも知っています。この例は、これらの両方のポイントを示しています。 user=> (conj [1 2 3] 4) ; returns a collection [1 2 3 4] user=> (cons 4 [1 2 3]) ; returns a seq (4 1 2 3) ベクトル、マップ、およびセットの場合、これらの違いは私には理にかなっています。ただし、リストの場合は同じように見えます。 user=> (conj (list 3 2 1) 4) ; returns a list (4 3 2 1) user=> (cons 4 (list 3 …

3
JavaからClojureへの書き換え
私は会社から、Clojureで大規模な(50,000行のコードの)Javaアプリケーション(JSPとサーブレットを使用するWebアプリ)を書き換えるように依頼されました。他の誰かが私が注意すべきことについてのヒントを得ましたか? 私はJavaとClojureの両方をかなりよく知っていることを覚えておいてください。 更新 私は書き換えを行い、本番環境に移行しました。書き直しが非常に速く、約6週間で完了したため、これはかなり奇妙です。多くの機能は必要なかったので、Clojureの3000行のようになりました。 彼らはこのシステムに満足しており、彼らが望んでいたことを正確に実行していると聞いています。唯一の欠点は、システムを管理している人がClojureを一から学習する必要があり、その中に引きずり込まれて悲鳴を上げていたことです。先日、彼からLispが今でも好きだという電話がありました。おもしろい:) また、Vaadinについても触れておきます。Vaadinを使用することで、Clojureと同様に、節約された時間とコードの短さが大幅に削減されました。(VaadinとClojureScriptはどちらも内部でGoogleのGUIフレームワークを使用していることに注意してください。)
97 java  clojure  vaadin 

14
中規模のClojureサンプルアプリケーション?
「ベストプラクティス」の例として使用できる中規模のClojureサンプルアプリケーションはありますか。また、このようなアプリケーションがコードとコード編成の観点からどのように見えるかを確認する良い方法はありますか?Webアプリケーションは私にとって特に興味深いでしょうが、最も重要なことは、プログラムが一般的に役立つ何か(ブログ、バグ追跡、CMSなど)を実行することであり、実際に実装する必要がなかった数学的なものではありません世界(N-クイーン問題の解決、生命のシミュレーション、フィボナッチ数列の生成、および関数プログラミング言語の通常の運賃)。 ありがとう!

5
Clojureでレイジーシーケンスを非レイジーに変換する方法
非遅延シーケンスのクラスが返されることを期待して、Clojureで次のことを試しました。 (.getClass (doall (take 3 (repeatedly rand)))) ただし、これはまだを返しますclojure.lang.LazySeq。私の推測では、doallシーケンス全体が評価されますが、メモ化には引き続き役立つため、元のシーケンスが返されます。 では、遅延シーケンスから非遅延シーケンスを作成する慣用的な方法は何ですか?


4
Clojureと他のLispの比較[終了]
現在のところ、この質問はQ&A形式には適していません。私たちは回答が事実、参考文献、または専門知識によってサポートされることを期待しますが、この質問はおそらく議論、議論、投票、または拡張された議論を誘います。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 9年前休業。 私の質問の目的は、炎上戦争を開始することではなく、どのような状況で各言語が「仕事に最適なツール」であるかを判断することです。 私はClojureに関するいくつかの本(Programming Clojure、Practical Clojure、The Joy of Clojure、およびManning Early Access edition of Clojure in Action)を読んだことがあり、それは素晴らしい言語だと思います。私は現在、Common Lispマクロを主に扱っているLet Over Lambdaを読んでおり、それも非常に興味深い言語です。 私はLispのエキスパートではありません(初心者の方が多いです)が、関数型プログラミングと同様に、この言語ファミリーは私を魅了します。 Clojureの利点(および「その他」の欠点): JVMで実行されます。 JVMは非常に安定した高性能言語環境であり、Sunの「一度書くとどこでも実行できる」という夢を十分に満たしています。Macbook Proでコードを記述し、それを実行可能なJARファイルにコンパイルして、追加のテストをほとんど行わずにLinuxとMicrosoft Windowsで実行できます。 (ホットスポット、その他)JVMは、高品質のガベージコレクションと、非常に高性能なジャストインタイムのコンパイルと最適化をサポートしています。ほんの数年前、Cで高速に実行する必要のあるすべてのものを書いたのですが、今ではJavaで実行することをためらっていません。 標準のシンプルなマルチスレッドモデル。Common Lispには標準のマルチスレッドパッケージがありますか? 、、、およびでこれらすべての括弧の単調さを分解しますが[]、Common Lispの専門家はおそらく、リーダーマクロを使用すると、それらをCLに追加できると教えてくれます。{}#{} Clojureの欠点: JVMで実行されます。 末尾再帰や継続はありません。Common Lispは継続をサポートしていますか?Schemeは両方のサポートを必要とすると私は信じています。 その他の利点(特にCommon Lisp)(およびClojureの欠点): ユーザー定義可能なリーダーマクロ。 他の利点は? 考え?その他の違いは?

8
Clojure開発者が回避すべき一般的なプログラミングの誤り[終了]
現在のところ、この質問はQ&A形式には適していません。私たちは回答が事実、参考文献、または専門知識によってサポートされることを期待しますが、この質問はおそらく議論、議論、投票、または拡張された議論を誘います。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 8年前に閉鎖。 Clojure開発者が犯すいくつかの一般的な間違いは何ですか?どのようにしてそれらを回避できますか? 例えば; Clojureの初心者は、contains?関数はと同じように機能すると考えていますjava.util.Collection#contains。ただし、contains?マップやセットなどのインデックス付きコレクションで使用し、特定のキーを探している場合にのみ、同様に機能します。 (contains? {:a 1 :b 2} :b) ;=> true (contains? {:a 1 :b 2} 2) ;=> false (contains? #{:a 1 :b 2} :b) ;=> true 数値でインデックスが付けられたコレクション(ベクトル、配列)と共に使用すると、指定された要素がインデックスの有効範囲(ゼロベース)内にあることcontains? のみがチェックされます。 (contains? [1 2 3 4] 4) ;=> false (contains? [1 2 3 4] 0) ;=> true リストが指定されている場合、contains?trueを返すことはありません。
92 clojure 



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