【Lisp】プログラミング言語 Clojure #4【JVM】 [無断転載禁止]©2ch.net
【リファレンス】
API Overview - Clojure v1.8 (stable)
ttp://clojure.github.io/clojure/
Clojure Libraries - Clojure Contrib, Leiningen, ...
ttp://clojure.org/api/api
grimoire - community combined cheatsheet + examples
ttp://grimoire.arrdem.com/
ClojureDocs - community provided example repositoryttp://clojuredocs.org/
CrossClj - library cross-referencettp://crossclj.info/
【ブログ・ML・質問箱】
Clojure
ttp://groups.google.com/forum/#!forum/clojure
Clojure Dev
ttp://groups.google.com/forum/#!forum/clojure-dev
planet clojure
ttp://planet.clojure.in/
stackoverflow.com tag:clojure
ttp://stackoverflow.com/questions/tagged/clojure
Reddit(clojure)
ttp://www.reddit.com/r/clojure
github.com clojure
ttp://github.com/languages/Clojure
Clojure-jp (日本語)
ttp://groups.google.com/forum/#!forum/clojure-ja 【チュートリアル】
Clojure Koans
ttp://clojurekoans.com/
ttp://clojurescriptkoans.com/
labrepl
ttp://github.com/relevance/labrepl
4Clojure
ttp://www.4clojure.com/
Clojure の日本語ガイド
ttps://ayato-p.github.io/clojure-beginner/
【コーディング規則】
Library Coding Standards
ttp://dev.clojure.org/display/community/Library+Coding+Standards
コミュニティベースのClojureスタイルガイド(bbatsov/clojure-style-guideの日本語訳)
ttps://github.com/totakke/clojure-style-guide 【本】
ttp://www.amazon.co.jp/s?field-keywords=clojure
Programming Clojure (2nd edition)
ttp://blog.practical-scheme.net/shiro/20130417-programming-clojure-2nd (日本語版)
英語の本
ttp://clojure.org/community/books
【動画】
ttps://youtube.com/user/ClojureTV
【その他】
Clojureをつくったわけ
ttp://www.geidai.ac.jp/~marui/clojure/rationale/
InfoQ: ClojureがSTMとLISPをJVMにもたらす
ttp://www.infoq.com/jp/news/2009/02/clojure-interview-halloway
InfoQ: Rich Hicky氏、Clojureの特徴と実装について語る
ttp://www.infoq.com/jp/news/2009/06/hickey-clojure
InfoQ: Clojureに関するコンテンツ
http://www.infoq.com/jp/clojure/
InfoQ: All of Rich Hickey's Content
http://www.infoq.com/author/Rich-Hickey
RailsConf 2012 基調講演 Simplicity Matters 翻訳書き起し
ttp://eed3si9n.com/node/141 まさにHTMLというでかいデータ構造をReact/JSXで書くという点に不満を抱いている人はおおいね
Clojureはデータ構造をベターっと書くのが得意だからうまく処理できる re-frameすげぇびっくり
HTMLをemacs+clojure単体でhiccupで書くだけでも楽だったのだけどSPAでものすごいお気楽に書けるのでびっくり
おいらは社内で猛プッシュ中なのだけどclojureがlisp系なので忌避されて泣きそう JVM上で動くということはAndroidアプリも作れるということですか? Clojure - Frequently Asked Questions
https://clojure.org/guides/faq
公式にFAQページなんてあったっけ?ツイートで見かけたけど最近できたのかな? sampleで思い出したのだけど、lein newとboot -d boot/new newで作れる雛形を検索できるサイトってあったっけ?
こういう感じのやつ(yo)
http://yeoman.io/generators/ 初心者向けwebスタック作るっていってたやつのアルファ版らしい。
http://arachne-framework.org/posts/2017/alpha-release/
目標がよく分かってないけど、phpのlaravelみたいに使いづらいところが無くなるようにフレームワークで全体をならすようなつもりだったのかね。 好きなclojureのcore関数は?
ttps://twitter.com/fogus/status/824297817502052352 lux 0.5.0
It's meant to be a functional, statically-typed Lisp that will run on several platforms, such as the Java Virtual Machine and JavaScript interpreters.
https://github.com/LuxLang/lux
https://luxlang.gitbooks.io/the-lux-programming-language ClosureCompiler用の外部JS宣言を推論してくれるらしい。
Externs (Alpha)
https://clojurescript.org/guides/externs javaのmutableなコレクションをうまく扱えるようなライブラリってないかな
具体的にはdouble型からなるmutableな型をdeftypeで宣言して、
array かjava.util.ArrayListに投げてmutableなmap!とかを実装してる奴
自分で書いて試してみろって?そりゃそうなんだけど
clojureの設計思想から真っ向から反しているのはわかってるけど
こういうニーズも満たせればclojureって最強言語なんじゃねと思うんだけど あらためて調べて考えたんだけど
javaでは、ヴァルハラがくるまで、ジェネリクスパラメータにプリミティブが使えないんだよね
じゃあ例えばリストを使う場合に特定の参照型、例えばboxed Doubleのような参照型が要素になり、結局mutableのメリットがなくなるってことなのかな
javaはあまり詳しくないけど、プリミティブはメモリを直接上書きするから、高速
オブジェクトは変更されると、
動的に新しい値がメモリに割り当てられ、古いデータはGCに回収されるとする
そうするとミュータブルクラスはパーシステントクラスを使ってるのと決定的な差がなくなってくるという考えに行き着くんだけど javaだとgc避けるために、off-heepのスタック領域などにリングバッファ作って処理する話が出てくるね。 lmaxのdisruptorとか?
てかいまのやりとりでようやく固定長のキューではなくリングバッファ使っている理由がなんとなくわかった気がするわ >>25
それ必要かな?
メモリセンシティブな用途以外出番なくね? clojureでbigdataな処理をやりたいとかね
sparkとかつかえよっていう話かもしれないが
とりあえずletをうまくつかったら40分の計算が9秒になったわ
だがrepl出力にアウトプットをそのまま垂れ流そうとすると標準i/o出力に40分かかってしまう
ちなみに9秒になったのはlazyで計算されてないわけではなく計算値のlastは普通に12(9+3)秒程度で取得できる
大型なデータのrepl出力を手軽に高速化する方法ってないのかな
なんか挙動見てる限りchunk seqをちまちま出力しているように見える、計算結果はinto []してるんだけどな >>32
replの出力鈍いからなぁ
ものすげぇ長い戻り値って端からわかってるならファイルに書いちゃうのが吉
いつもemacs+ciderでうぼあーってなる自分が言うのもなんだけど あれから少し調べたけど
system/outがそもそも遅いみたいね
普通にreplの挙動を考えると1ラインで1システムコールだもんな
OSコールと描画のオーバーヘッドは無視できない
とりあえずbufferedwriterでsystem/outを包んでやるか、素直にfileに出すのが良さそうね
だからみんなtimbreとかlog4jとか使ってるわけだ unixならtail -fなりでいいしね。winで調べたらpowershellか。 いろいろ調べたけどそもそも計算できてなかったわ
lazy-seqのvectorになってただけだった facebook傘下のwitaiが基盤実装をclojureからc++かhaskellに移行する予定だったらしく、haskellにしたとのこと。
移行したら読みやすいみたいな話もちょっとだけ。
clojureの場合、ライブラリは一度作るまでいろいろいじって、一回出来るとあまりいじらないイメージもあるけど、実装を多人数でよくいじるみたいなのだと、難しいのかな?
IDE上手く使えばそういう開発もできるのだけど、最初からなんでも決まってるほうがいいってのはgo見るとわかる気もする。
https://wit.ai/blog/2017/05/01/new-duckling http://postd.cc/measuring-gc-latencies-in-haskell-ocaml-racket/
http://postd.cc/golangs-real-time-gc-in-theory-and-practice/
gc関連の話題に触れると、基盤系はgcチューニングに結構リソース割いてるgoやそもそもgc回避できるrustが来そうってのはあるが、
javaはどうなってくんだろうね。
JVM言語向けのvmやpauseless vmを開発してる話は聞くんだけど、あまりリソースが割けてなさそう。 threading macroを使ったSeqの途中で一時変数(let)を使いたいんだけど、どうすれば良いの?? (A 1 2 3 B 1 2 C 1 2 3 4)
から
((A 1 2 3) (B 1 2) (C 1 2 3 4))
を得たいのですが、loop、recur以外のよい方法はあるでしょうか? Clojure知らんのだけど、CLならこんな書き方も
(defun ochinchin (xs)
(mapcon (lambda (xs &aux (head (first xs)) (tail (rest xs)))
(when (symbolp head)
(list (subseq xs 0 (position-if (lambda (x) (not (numberp x))) tail)))))
xs))
(ochinchin '(A 1 2 3 B 1 2 C 1 2 3 4))
==> ((A 1 2) (B 1) (C 1 2 3 4)) (position-if (lambda (x) (not (numberp x))) tail)
の部分を、↓
(let ((n (position-if (lambda (x) (not (numberp x))) tail)))
(when (numberp n) (1+ n)))
もしくは、アナフォリックマクロライブラリが使えるなら
(awhen (position-if (lambda (x) (not (numberp x))) tail)
(1+ it))
ですね。 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f) Clojureということでシーケンスを使って、以下はどうでしょうか?
(defn foo
[xs]
(->> xs
(partition-by char?)
(partition-all 2)
(map (partial apply concat))))
> (foo [\a 1 2 3 \b 4 5 \c 6 7 8])
((\a 1 2 3) (\b 4 5) (\c 6 7 8)) lein run では問題無く動作するけど
lein uberjar を行おうとすると失敗して困っています
Uberjar aborting because jar failed: Invalid argument というメッセージが表示されています
何方か解決方法を教えていただけると助かります
問題が発生してるコードはこれです
https://github.com/kemono/gaw-00001 動かない原因は、:resource-paths ["resources" "lib/jme3/*"]
lein2になってからワイルドカード使ってjarをまるごと解決ってのが出来なくなってlein runすら動かないと思うし、直接lib/jme3/hoge.jarみたいに指定しても、uberjar時にjar内にjarが出来てそのままではうまくいかない
簡単な解決方法としては、Mavenレポジトリを使った方法で、以下変更点によってlein uberjarがうまくいく
念のためleinのアップデートもね
; project.clj
(defproject tiny-game "0.1.0-SNAPSHOT"
:dependencies [[org.clojure/clojure "1.8.0"]
[org.jmonkeyengine/jme3-core "3.2.0-stable"]
[org.jmonkeyengine/jme3-desktop "3.2.0-stable"]
[org.jmonkeyengine/jme3-plugins "3.2.0-stable"]
[org.jmonkeyengine/jme3-jogg "3.2.0-stable"]
[org.jmonkeyengine/jme3-blender "3.2.0-stable"]
[org.jmonkeyengine/jme3-lwjgl "3.2.0-stable"]]
:repositories {"jcenter" {:url "https://jcenter.bintray.com/"}}
:resource-paths ["resources"]
:main tiny-game.core
:aot :all)
; core.clj
(ns tiny-game.core
(:gen-class)
...) >>49
解決出来ました!!
本当に助かりました!ありがとうございます!! 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
SAB28 関数型言語で画像処理のプログラムが書きたいんだけど
Common Lispで言う
(setf (aref ary img y x) num)
みたいなn次元配列をmutableでごりごり書き換えるのって
Clojureでできる?
オライリーのCLOJURE PROGRAMMINGとshiro kawai訳のプログラミングClojureの
最初の方は読んだ 行列計算をごりごり使うってのは向いてないかなと。
javaなどでごりごり書いて、clojureから使ってるってひとはいるかもしれないが。
いちおうそのためのライブラリはある。
https://neanderthal.uncomplicate.org/articles/getting_started.html bashでパイプから流されてくるプログラムコードの文字列をprity printして綺麗に改行とかインテンドされたコードに変換して保存したい
どうすれば出来ますでしょうか VSCode みたいな、各言語の言語サーバーを使えば? Clojure面白いけど日本だといまいち人気ないよね
Leiningenのサイトに行くと変なオッサンが現れるのが原因だと思うんだけど 最近始めたんだけど、leiningen使えば良いのかdeps.edn使えば良いか混乱した。boot?とかもあるし パッケージシステムってだいたい混沌としてる気がする Ruby on Rails 6 の本を出している人の、入門書が出た
Elixir実践ガイド、黒田努、2021/2/5
Ubuntu 20.04, Docker CE 19.03, Elixir 1.11 clojure使う人ってjavaにも精通してるの?
ごりごりjavaなのをclojureに書き直すプロジェクトとかあるのかな 勝手なイメージだかど、Javaの資産やライブラリを使う前提がありそうだから、それなりに知識が必要になりそう Clojure 二日目です
(ns example.trumps.card)
(def spades 4)
(def hearts 3)
(def diamonds 2)
(def clubs 1)
(def suit '(spades hearts diamonds clubs))
って定義して
user=> (use 'example.trumps.card)
nil
user=> spades
4
user=> suit
(spades hearts diamonds clubs)
user=> (first suit)
spades
user=> (= (first suit) spades)
false
user=> (= (eval (first suit)) spades)
true
ってなるのが理解出来ません…
特に (= (first suit) spades) が false になるのは何でですかね?
多分「評価」って事と、そのタイミングが理解出来てないんだと思いますが… >>68
丁度 Clojure 三日目になりました
(ns example.trumps.card)
(def spades 4)
(def hearts 3)
(def diamonds 2)
(def clubs 1)
;(def suit '(spades hearts diamonds clubs))
(def suit (conj '() clubs diamonds hearts spades))
って直したらイケました
user=> (use 'example.trumps.card)
nil
user=> spades
4
user=> suit
(4 3 2 1)
user=> (first suit)
4
user=> (= (first suit) spades)
true
リストを作りたいからクォートで評価を止めたので
リストの中身も評価されずに追加されている
って事だったみたいです…
うーん… >>69
んで、こうなりました…
(ns example.trumps.card)
(def spades 4)
(def hearts 3)
(def diamonds 2)
(def clubs 1)
;(def suit '(spades hearts diamonds clubs))
;(def suit (conj '() clubs diamonds hearts spades))
(def suit [spades hearts diamonds clubs])
って定義して
user=> (use 'example.trumps.card)
nil
user=> suit
[4 3 2 1]
user=> spades
4
user=> (get suit 0)
4
user=> (= (get suit 0) spades)
true
インデックス要らないからベクタじゃなくてリストで定義しようとして
クォートで括弧の評価を止めてリストを定義したら
リストの中身も評価されなかったので
クォートの要らないベクタに変更したら
ベクタの中身はちゃんと評価されましたとさ
別にインデックス要らないんだけど… これを (def suit '(spades hearts diamonds clubs))
こうすれば (def suit (list spades hearts diamonds clubs)) 中身を評価したリストが作れる
クォートでやりたいならこれでもいい (def suit `(~spades ~hearts ~diamonds ~clubs)) バッククォートの中はチルダをつけた式だけ評価してくれる >>71
アドバイスありがとうございます!
普通に list 関数でリストを作ればよかっただけだったんですね… なんでubyが流行ってるのかわからない
↓
ubyは流行ってない 今年からClojure始めて遊んでるけど、はやってるのか?
日本語の記事見ると2013年頃のやつが多い気がするから、一度流行ってみんなどこかに行っちゃったのか? そのくらいに関数型言語やらscalaとかclojureみたいな次期Java互換言語みたいのが流行った気がする。
あれはなんだったんだろう。 Elixir の本なら出た
Elixir実践ガイド、黒田努、2021/2
Ubuntu 20.04, Docker CE 19.03, Elixir 1.11
Scala は、YouTube で有名な、雑食系エンジニア・KENTA が、オワコン認定した!
新規参入が無いから、
コミュニティーに偏屈なベテが居座って、新人にマウントを取ってくる
それで寂れた 雑食系エンジニア・KENTAってだれやねん(´・ω・`) KENTA のサロンは異例、日本6位の2千人入っている
未経験者の自社開発ウェブ系への転職、
Ruby on Rails の虎の穴 KENTA は、Java 土方・SES とか、
高額学校とか、マナブの情報商材などを批判するから、
あちこちの経営者から攻撃されている
今も、200万円の学校をぼったくりと言ったので、訴えられたw
こういう手順で勉強すれば、お金が掛からないとか、
安上がりな方法を教えるから、多くの経営者から嫌われている libpython-clj を clojurescript から使うのは無理なのでしょうか? lispやhaskellも日本ではちょっと前のほうが流行ってたな
みんなどうしてしまったのだろう pythonのpythonpathに相当するものないのでしょうか
自分で作ったコードで良く使い回しするもの集めたディレクトリにbashrcでパスを通しておくのpython でよくやってたので
clojureでも同じことできると嬉しい >>78
Scalaが負けたのは単にベターJavaのポジションをKotlinが確保したってのが一番デカいと思うがな
JavaScriptがクソ言語だからってトランスパイルして動かすAltJSが乱立してたけど
CoffeeやPureScript、Elm、Flowとか優秀な言語は沢山あったけど
マイクロソフトがゴリ押ししたTypeScript一強で終わったし Clojureの本スレだと思うけど、何でこんなに過疎ってんの? >>88
他のプログラミング板も過疎ってるし
こんなもんじゃね?