問題タブ [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.
python - Clojureで2つのシーケンスからの値のペアを処理する
Clojureコミュニティに入ろうとしています。私はPythonで多くの作業を行ってきましたが、私が広く使用している機能の1つは、値のペアを反復処理するためのzip()メソッドです。Clojureで同じことを達成するための(賢くて短い)方法はありますか?
apache - Apache Tomcat で動作する Lisp 方言はありますか?
Lisp のような Web 言語で使用できる Apache Tomcat のようなアプリケーション サーバーはありますか?
最近、Arc/Anarki と Clojure で少し遊んでいます。しかし、私が本当に見逃しているのは、Apache の mod_arc や mod_clojure のようなものです。私が本当に恋しいのは、Lispy Web 言語のための優れた Apache 統合です。
Arc と Clojure はどちらも、コード内で起動する独自の組み込み Web サーバーを使用します。Apache httpd が提供するすべての機能、回復力、およびスケーラビリティが必要です。Arc または Clojure 用の Apache モジュールに取り組んでいる人はいますか? Apache で使用できる Lisp のような言語は他にありますか?
私は PHP と Perl のバックグラウンドを持っています。しかし、C と /bin/sh の経験も豊富です。Web アプリを書き始めたときから、cgi-bin と stdin を C バイナリに使用していました。
multithreading - Clojure 可変ストレージ タイプ
サイトで入手できる API とドキュメントから Clojure を学ぼうとしています。Clojure の変更可能なストレージについては少しよくわかりません。私の理解が正しいことを確認したいと思います。私が間違っているという考えがあれば教えてください。
編集:その正確性についてコメントを受け取ったので、これを更新しています。
免責事項: この情報はすべて非公式であり、間違っている可能性があります。Clojure の仕組みを理解するためにこの記事を使用しないでください。
Varsには常にルート バインディングが含まれ、場合によってはスレッドごとのバインディングも含まれます。これらは命令型言語の通常の変数に相当し、スレッド間で情報を共有するのには適していません。(アーサー・ウルフェルトに感謝)
参照は、単一のトランザクションで任意の数の参照の状態を変更できるアトミック トランザクションをサポートするスレッド間で共有される場所です。トランザクションは同期式 (dosync) の終了時にコミットされ、競合は STM マジック (ロールバック、キュー、待機など) で自動的に解決されます。
エージェントは、独立したアクション関数をディスパッチしてエージェントの状態を変更することにより、最小限のオーバーヘッドでスレッド間で情報を非同期的に共有できるようにする場所です。エージェントはすぐに返されるため、非ブロッキングですが、ディスパッチされた関数が完了するまでエージェントの値は設定されません。
アトムは、スレッド間で同期的に共有できる場所です。異なるスレッド間の安全な操作をサポートします。
これらの構造をいつ使用するかに基づいた私のわかりやすい要約は次のとおりです。
- Var は、命令型言語の通常の古い変数のようなものです。(可能な限り避けてください)
- Atom は Var に似ていますが、即時の読み取りと安全な設定を可能にするスレッド共有の安全性を備えています。(ありがとうマーティン)
- エージェントは Atom に似ていますが、ブロックするのではなく、新しいスレッドを生成してその値を計算し、値の変更中にのみブロックし、割り当てが完了したことを他のスレッドに知らせることができます。
- Ref は、トランザクションで自分自身をロックする共有の場所です。ロックされたコードのすべての部分について競合状態で何が起こるかをプログラマーに決定させる代わりに、トランザクションを開始し、Clojure にそのトランザクション内の参照間のすべてのロック状態を処理させます。
また、関連する概念として function がありますfuture
。私には、将来のオブジェクトは、計算が完了するまで値にまったくアクセスできない同期エージェントとして記述できるように思えます。ノンブロッキング Atom と表現することもできます。これらは正確な未来の概念ですか?
java - 優れたSlimeチュートリアルまたはスクリーンキャストをお勧めします
私のJavaでの冒険は、Clojureを調べるようになり、それからEmacsを(再)発見し、それがSLIMEにつながりました。
私はEmacs自体をかなり適切に処理しており、emacs-starter-kit、clojure-mode / slime / swank、その他の無関係なモードをいくつか持っており、セットアップと実行を微調整しています。
しかし、プログラムの設定とその機能の理解は同じではありません。そこで、Clojureの実験に戻る前に、まずSlimeIDE自体とその機能についてもう少し理解したいと思います。
誰かが私にいくつかの基本的なスライムの使用法を教えてくれるチュートリアル/スクリーンキャストをお勧めできますか?私はすでにSlimeと対話的にClojureを実行することに精通していますが、それがSlimeの唯一の機能であることは確かではありません。
チュートリアルはClojureを含む必要はありませんが、含まれている場合はプラスになりますが、私の関心の主な焦点はSlimeです。したがって、Clojureコードを対話的に実行するだけでなく、Slimeの使用法を強調しない限り、Clojureチュートリアルを投稿しないでください。
functional-programming - バイナリブロックの遅延シーケンスのパディング
数値のシーケンスを取得して適切なビット数に切り刻み、チャンクの遅延シーケンスを返すClojure関数があります(最下位ビットが最初)。それはブロックサイズを埋めるために最後のブロックの上位ビットをパディングします、そして私はそれを怠惰で機能的に保ちながらパディングの量を記録するための「最良の方法(tm)」についてのアドバイスが必要ですか?
知恵の言葉は大歓迎です。
パラメーター:
- in-block-sizeは、入力シーケンスの各数値の有効ビット数です。
- out-block-sizeは、返されるレイジーシーケンス内の各数値の有効ビット数です。
- バイトは、ビットを抽出するための数列の怠惰なシーケンスです
これは、3バイトのシーケンスを取り、それを2つの20ビット数のシーケンスに分割する(そしてそれを2進文字列として出力する)例です。
20ビット番号のシーケンスの2番目の番号には、4つの有効ビットのみがあり、有効な16個のゼロが追加されています。次に、このシーケンスを、シーケンスで何かを実行してネットワーク経由で送信したい別の関数に渡した場合。受信側のコードは、最後の16ビットを印刷/保存などしないようにする必要があります。
PS:これらは連鎖させることができます。(block-seq 20 15(block-seq 8 20(read-bytes-from-file)))
vector - 参照の Clojure ベクトル
異なる参照のベクトルを作成する最も簡単な方法は何ですか?
を使用(repeat 5 (ref nil))
するとリストが返されますが、それらはすべて同じ参照を参照します。
と同じ結果(replicate 5 (ref nil))
:
clojure - オプションのフラグを持つ Clojure パラメーター
関数へのオプションのフラグとしてキーワードを実装する最良の方法は何ですか? 次のような関数呼び出しを行いたい:
defn を使用すると、次のような関数を定義できます。
しかし、flags
リストになります。リストを検索する独自の関数を作成できますが、そのような関数はコア ライブラリに含まれていないため、慣用的ではないと思います。
私が今使っているもの:
arrays - バイト配列を表すClojure
Javaでは、ファイル全体をバイト配列に読み込み、それを使って何らかの処理を行います。今、私はclojureで同じアルゴリズムを実装したいと思います。
私が疑問に思っているのは、配列の代わりにリストを使用できますか?
clojureから配列を作成できることは知っていますが、これを処理するLispの方法は何ですか?
java - Clojure While ループ
私はclojureを試しています。次のアルゴリズムを実装する方法を見つけようとしています.
区切り文字でなくなるまで読み続けたい入力ストリームから読み込んでいます。
while ループを使用して Java でこれを行うことができますが、clojure で行う方法がわかりませんか?