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

Clojureは、関数型プログラミングスタイルを奨励し、マルチスレッドプログラミングを簡素化する対話型開発をサポートする汎用言語です。

4
PythonデコレータとLispマクロ
Pythonデコレータを見ると、誰かがLispマクロ(特にClojure)と同じくらい強力だという声明を出しました。 PEP 318で与えられた例を見ると、まるでそれらがLispで単純な古い高階関数を使うための単なるおしゃれな方法であるかのように見えます: def attrs(**kwds): def decorate(f): for k in kwds: setattr(f, k, kwds[k]) return f return decorate @attrs(versionadded="2.2", author="Guido van Rossum") def mymethod(f): ... 「Clojureマクロの構造」で説明されているように、どの例でもコードの変換は見ていません。さらに、Pythonの欠落した同質 性により、コード変換が不可能になる可能性があります。 それで、これら2つはどのように比較されますか。証拠はそれに反対するようです。 編集:コメントに基づいて、私は2つのことを探しています:「できるだけ強力」と「素晴らしいものを簡単に実行できる」との比較。
18 python  lisp  clojure  macros 

1
読みやすいClojureコードの書き方
私はClojureを初めて使用します。書いたコードは理解できますが、後で理解するのが難しくなります。 括弧を一致させることが難しくなります。 さまざまな状況での命名規則とインデントに関して従うべき一般的な規則は何ですか? たとえば、理解するためにサンプルの非構造化例を作成しましたが、2回目には完全に判読できません。 (defn f [{x :x y :y z :z [a b c] :coll}] (print x " " y " " z " " a " " b " " c)) 構造化を解除する場合、パラメータレベルで直接行うか、letフォームを開始してから続行する方が良いでしょうか?

3
ClojureはJavaからどれだけ独立していますか?
私はClojureの世界には全く新しいです。Clojureの相互運用機能を介してすべてのJavaライブラリに簡単にアクセスできるという事実に感謝していますが、Clojureがどれだけ独立しているのか疑問に思っていました。 もちろん、コアライブラリはJavaで記述または公開されているため、Javaなどの相互運用性が常に必要となるAndroidなどのプラットフォームもあります。さらに、Clojureの文字列はJavaの文字列なので、文字列操作ライブラリがJavaのStringメソッドのラッパーになると期待しています。 しかし、他のタスクについては、ネイティブのClojureライブラリーを開発できなかった理由はわかりません。Http、日付操作、XML解析、テンプレート、JSONのシリアル化と逆シリアル化、OAuth、数学ライブラリなどを考えてください。 だから私の質問は: ClojureはJavaエコシステムからどの程度独立しましたか?これらのタスクやその他のタスクのほとんどに独自の慣用的なライブラリがありますか?

1
ClojureとScalaのパターンマッチング
これら2つの言語のパターンマッチングの主な違いは何ですか?構文ではなく、機能、実装の詳細、ユースケースの範囲、必要性について言及しています。 Scalaアプリケーション(Lift and Playなど)は、言語のパターンマッチングの能力について誇らしげに語っています。一方、Clojureにはライブラリcore.matchがあり、破壊機能が組み込まれていますが、これも強力なようです。 *注:私がこの質問をすることに触発された理由は、実験としてプログラマがScalaとClojureの両方を使用してlispインタープリターを作成したブログ投稿でした。彼は、Clojureの試合が一定の長さの後に壊れたと言ったが、その理由を説明できなかったが、私は本当に知りたいと思っている。この投稿はここで見つけることができます:http : //www.janvsmachine.net/2013/09/writing-simple-lisp-interpreter-in-clojure.html

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

1
Clojureに衛生的なマクロがないことから生じる実際的な問題は何ですか?
Clojureマクロは簡単に記述できますが、ラケットの衛生的なマクロほど信頼性が低いと聞きました。私の質問には2つの部分があります。 gensym衛生マクロとどう違うのですか? ラケットマクロは、Clojureにはないものを何を提供しますか?(安全性、構成可能性など)

2
SchemeではなくClojureでSICPにアプローチする
私はソフトウェアエンジニアリングプログラムの3年生で、SICPを読むというアイデアをアドバイザーに伝えて、このすべてのソフトウェアの背後にある原理をより深く、より根本的に理解するようにしました。 彼は、本を完成するためにSchemeを学ぶのではなく(Lispの現代の方言ほど一般的ではないため)、代わりにClojureで演習を行うことを提案しました。 それはすでに難しい本です。より現代的なClojureで本の練習を試みた場合、それはどのように機能しますか?たとえば、実際のソリューションは見つかりません。Schemeで教えている構文は異なります。
11 clojure  scheme  sicp 

2
Clojureの角括弧と中括弧はまだS式ですか?
私はLispを学び、そこにあるすべてのLispとその違いを調べようとしています。 Schemeの一部の実装では、読みやすくするために角かっこを角かっこと交換可能に使用できることがわかります。 ただし、Clojureでは、ベクトルなどのさまざまなデータ型を表すために角括弧と中括弧が使用されていることがわかります。これらはまだ有効なS式でもありますか、それともアトムと見なされる必要がありますか?これはS式の概念全体を「壊し」、それによってClojureを「不純な」Lispにしませんか?
11 lisp  clojure 

3
バイトコードウィービング対Lispマクロ
私は、関数呼び出しのインターセプト、ロギングコードの挿入などを行うためにバイトコードウィービングを使用するJavaやC#のような言語用に書かれたライブラリについて読んでいます。それらの利用方法をよりよく理解しようとする。マクロについてよく読めば読むほど、マクロがバイトコードウィービングライブラリと同じ種類の機能を提供するように見えます。機能とは、コンパイル時にコードを操作できることを意味します。 私が見ているライブラリの例は、AspectJ、PostSharp、Cecilです。 片方でできること、もう片方ではできないことはありますか?彼らは実際に同じ問題を解決していますか、それともリンゴとオレンジを比較していますか?

2
Javaの新しい開発は、ScalaやClojureなどの言語との相互運用性にどのように影響しますか?
私の知る限り、ScalaとClojureはどちらも新しい言語として設計されています。 JVMに依存する ScalaおよびClojureコード内でJavaクラスを使用できるという意味で、Javaコードと簡単に統合できます。 Java 8(以降のバージョンのJavaではさらに強力になる可能性があります)から、Java言語のセマンティクスに変更が加えられます。 これらの変更がJavaとScala / Clojureの間の相互運用性にどのように影響し、どのような結果になるかを尋ねたかったのです。たとえば、Java 8のラムダはオブジェクトではないため(ここを参照)、ScalaとClojureはオブジェクトではないJava値を処理する必要がある場合があります。これは問題になりますか? 次のシナリオを考えることができます。 ScalaまたはClojure言語は、新しいJavaセマンティクス(新しい非オブジェクト値を処理する)に適応するように拡張され、Javaとの相互運用性をサポートします。 ScalaまたはClojure言語は拡張されません。これは、関数値などの新しいJava機能を既存の概念にマッピングできる場合にのみ可能です。たとえば、Scalaでは関数もオブジェクトであるため、Java関数はScalaから見えるようになったときに再び何らかのオブジェクトにラップされると思います。 ScalaまたはClojure言語は、最新のJavaの開発に従うことなく、引き続きJava 6または7までの相互運用性をサポートします。これには、Javaのより保守的で安定したブランチに基づいてこれらの言語を使用できるように、Javaの古いバージョンが(少なくともOpenJDKまたは別のプロジェクトで)サポートされている必要があります。 要約:Javaの将来の開発がScalaやClojureなどの言語に影響を与え、Javaとの相互運用性を維持できると期待できますか?このトピックに関する進行中の議論は既にありますか? 注意 Scala、Clojure、およびその他のJVMベースの言語では、実装をJVMの新しいバージョンに更新するのに大きな問題はないことを想像できます(新しいJVM機能により、この実装がさらに簡単になります)。私の質問は、言語としてのJavaの機能と、JVMベースの言語が最新のJVMで実行されるかどうかではなく、他のJVM言語がこれらの新機能を「見る」/使用する方法に焦点を当てています。
11 java  scala  clojure 

3
Clojureでネストされた速記関数を記述できないのはなぜですか?
今日、ネストされた速記関数を使用してClojure式を評価しようとしましたが、私はそれを許可しませんでした。 式は次のとおりです。 (#(+ % (#(+ % (* % %)) %)) 5) ; sorry for the eye bleed 出力は次のとおりです。 IllegalStateException Nested #()s are not allowed clojure.lang.LispReader$FnReader.invoke (LispReader.java:630) ...and a bunch of other garbage

3
ScalaまたはClojure関数型プログラミングのベストプラクティス
私は多くの自習用コーディングを行い、アクター、ソフトウェアトランザクションメモリ、データフローなどの並列プログラミングモデルでいくつかの経験を得ました。 これらのアーキテクチャを実際の生活-高負荷Webアプリケーションに適用しようとすると、どのモデルもデータの耐久性と永続性をサポートしません。実際のタスクでは、最後にデータを保存する必要があります。これは、DBを使用し、DB同期をトラップしなければならないこと、スケーラビリティのボトルネックなどの可能性があることを意味します。 Akkaアクターまたはソフトウェアトランザクションメモリを使用し、最後に永続性を実装するアーキテクチャ(srcまたはtextまたはdiagramまたはblueprints)の良い例を知っている人はいますか? 実際のアプリケーションでのトランザクションメモリ、アクター、データフロー、タプルスペースの良い例/アイデアは大歓迎です。

1
ソフトウェアトランザクションメモリの構成可能性の例
常に言及されるソフトウェアトランザクションメモリの主な利点の1つは、構成可能性とモジュール性です。異なるフラグメントを組み合わせて、より大きなコンポーネントを作成できます。ロックベースのプログラムでは、多くの場合そうではありません。 これを実際のコードで説明する簡単な例を探しています。私はClojureの例を好むが、Haskellも大丈夫だ。サンプルが、簡単に構成できないロックベースのコードを示している場合のボーナスポイント。
11 haskell  clojure  stm 

3
defを使用して変数を再定義できる場合、それはどのように不変と見なされますか?
Clojureを学ぼうとしても、Clojureが不変のデータについてどのように扱われているかを絶えず知らされるしかありません。しかし、def右を使用して変数を簡単に再定義できますか?Clojure開発者はこれを避けていると思いますが、どの言語でも同じように変数を変更しないようにすることができます。私が読んでいるチュートリアルや本からそれが欠けていると思うので、これがどのように違うのか誰かが私に説明できますか? 例を挙げれば a = 1 a = 2 Ruby(または好みに応じてblub)では、 (def a 1) (def a 2) Clojureで?
10 clojure 

2
計算と副作用を分離するとき、「世界に尋ねる」コードをどこに置くのですか?
よるとコマンドクエリ分離原則と同様に、データにおける思考とのClojureとDDD 1は、計算や意思決定から(世界の変更)の副作用を分ける必要があるプレゼンテーションので、両方の部分を理解し、テストするために容易になるという。 これは未回答の質問を残します。境界に対して相対的に、「世界に尋ねる」ことをどこに置くべきでしょうか?一方では、外部システム(データベース、エクステンションサービスのAPIなど)からのデータの要求は参照透過的ではないため、純粋な計算コードや意思決定コードと一緒に置かれるべきではありません。一方で、どのデータを要求する必要があるかが事前にわからない場合があるため、計算部分から切り離して引数として渡すことは問題があるか、おそらく不可能です。

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