X



【Lisp】プログラミング言語 Clojure #4【JVM】 [無断転載禁止]©2ch.net
0001デフォルトの名無しさん
垢版 |
2017/01/04(水) 12:00:49.23ID:uHeuKaUg
JVM上で動作するLisp方言「Clojure」のスレ。

Clojure - home
http://clojure.org/
http://www.try-clojure.org/

前スレ:
【Lisp】プログラミング言語 Clojure #3【JVM】
http://echo.2ch.net/test/read.cgi/tech/1380333808/
【Lisp】プログラミング言語 Clojure #2【JVM】
http://toro.2ch.net/test/read.cgi/tech/1318498898/
【Lisp】プログラミング言語 Clojure【JVM】
http://hibari.2ch.net/test/read.cgi/tech/1255533519/
0002デフォルトの名無しさん
垢版 |
2017/01/04(水) 12:03:33.58ID:uHeuKaUg
【リファレンス】
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
0003デフォルトの名無しさん
垢版 |
2017/01/04(水) 12:04:20.76ID:uHeuKaUg
【チュートリアル】
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
0004デフォルトの名無しさん
垢版 |
2017/01/04(水) 12:08:19.28ID:uHeuKaUg
【本】
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
0006デフォルトの名無しさん
垢版 |
2017/01/04(水) 18:38:14.84ID:yy/SdLnw
1.9っていつ出るの?
0007デフォルトの名無しさん
垢版 |
2017/01/04(水) 23:14:41.62ID:VMJ7nozd
re-frameの勢力増えている気がして嬉しい
0008デフォルトの名無しさん
垢版 |
2017/01/05(木) 18:05:12.91ID:FiQZD0WY

エラーもっと見やすくなりますように
0010デフォルトの名無しさん
垢版 |
2017/01/13(金) 23:31:45.53ID:X2ezHFUW
まさにHTMLというでかいデータ構造をReact/JSXで書くという点に不満を抱いている人はおおいね
Clojureはデータ構造をベターっと書くのが得意だからうまく処理できる
0011デフォルトの名無しさん
垢版 |
2017/01/16(月) 01:48:04.88ID:u1r5PPit
re-frameすげぇびっくり
HTMLをemacs+clojure単体でhiccupで書くだけでも楽だったのだけどSPAでものすごいお気楽に書けるのでびっくり
おいらは社内で猛プッシュ中なのだけどclojureがlisp系なので忌避されて泣きそう
0012関連サイト
垢版 |
2017/01/16(月) 05:52:01.38ID:snnb/Fhd
JVM上で動くということはAndroidアプリも作れるということですか?
0025デフォルトの名無しさん
垢版 |
2017/02/26(日) 17:24:11.89ID:WP4rX3RZ
javaのmutableなコレクションをうまく扱えるようなライブラリってないかな
具体的にはdouble型からなるmutableな型をdeftypeで宣言して、
array かjava.util.ArrayListに投げてmutableなmap!とかを実装してる奴

自分で書いて試してみろって?そりゃそうなんだけど
clojureの設計思想から真っ向から反しているのはわかってるけど
こういうニーズも満たせればclojureって最強言語なんじゃねと思うんだけど
0026デフォルトの名無しさん
垢版 |
2017/03/02(木) 00:51:05.02ID:5Cm7dTQ2
javaと変換を扱うライブラリあるけど、可変にするものではなさそう。
https://github.com/clojure/java.data
https://github.com/rschmitt/dynamic-object
https://github.com/ngrunwald/gavagai

行列みたいな計算向けは可変あるけど、一般的なjavaのって話ではないか。

これも操作を完結する感じなので、java関係なさそう。
https://github.com/nathanmarz/specter

abclもlispobjectとあるので、直接は扱えないのかな?
http://abcl.org/
0028デフォルトの名無しさん
垢版 |
2017/03/02(木) 22:07:38.10ID:7sf+xG/k
あらためて調べて考えたんだけど
javaでは、ヴァルハラがくるまで、ジェネリクスパラメータにプリミティブが使えないんだよね

じゃあ例えばリストを使う場合に特定の参照型、例えばboxed Doubleのような参照型が要素になり、結局mutableのメリットがなくなるってことなのかな
javaはあまり詳しくないけど、プリミティブはメモリを直接上書きするから、高速
オブジェクトは変更されると、
動的に新しい値がメモリに割り当てられ、古いデータはGCに回収されるとする

そうするとミュータブルクラスはパーシステントクラスを使ってるのと決定的な差がなくなってくるという考えに行き着くんだけど
0029デフォルトの名無しさん
垢版 |
2017/03/02(木) 22:17:29.93ID:dlTbMJUn
javaだとgc避けるために、off-heepのスタック領域などにリングバッファ作って処理する話が出てくるね。
0030デフォルトの名無しさん
垢版 |
2017/03/02(木) 22:58:21.96ID:7sf+xG/k
lmaxのdisruptorとか?
てかいまのやりとりでようやく固定長のキューではなくリングバッファ使っている理由がなんとなくわかった気がするわ
0032デフォルトの名無しさん
垢版 |
2017/03/06(月) 23:40:59.97ID:MJoZTqPl
clojureでbigdataな処理をやりたいとかね
sparkとかつかえよっていう話かもしれないが

とりあえずletをうまくつかったら40分の計算が9秒になったわ
だがrepl出力にアウトプットをそのまま垂れ流そうとすると標準i/o出力に40分かかってしまう
ちなみに9秒になったのはlazyで計算されてないわけではなく計算値のlastは普通に12(9+3)秒程度で取得できる
大型なデータのrepl出力を手軽に高速化する方法ってないのかな
なんか挙動見てる限りchunk seqをちまちま出力しているように見える、計算結果はinto []してるんだけどな
0033デフォルトの名無しさん
垢版 |
2017/03/07(火) 01:35:01.47ID:72cHV2nQ
>>32
replの出力鈍いからなぁ
ものすげぇ長い戻り値って端からわかってるならファイルに書いちゃうのが吉

いつもemacs+ciderでうぼあーってなる自分が言うのもなんだけど
0034デフォルトの名無しさん
垢版 |
2017/03/07(火) 02:02:53.70ID:TRrf8/Mo
あれから少し調べたけど
system/outがそもそも遅いみたいね
普通にreplの挙動を考えると1ラインで1システムコールだもんな
OSコールと描画のオーバーヘッドは無視できない
とりあえずbufferedwriterでsystem/outを包んでやるか、素直にfileに出すのが良さそうね

だからみんなtimbreとかlog4jとか使ってるわけだ
0036デフォルトの名無しさん
垢版 |
2017/03/09(木) 13:15:22.02ID:fDJtN/vS
いろいろ調べたけどそもそも計算できてなかったわ

lazy-seqのvectorになってただけだった
0037デフォルトの名無しさん
垢版 |
2017/05/05(金) 13:48:01.36ID:H2WcmmXo
facebook傘下のwitaiが基盤実装をclojureからc++かhaskellに移行する予定だったらしく、haskellにしたとのこと。
移行したら読みやすいみたいな話もちょっとだけ。

clojureの場合、ライブラリは一度作るまでいろいろいじって、一回出来るとあまりいじらないイメージもあるけど、実装を多人数でよくいじるみたいなのだと、難しいのかな?
IDE上手く使えばそういう開発もできるのだけど、最初からなんでも決まってるほうがいいってのはgo見るとわかる気もする。
https://wit.ai/blog/2017/05/01/new-duckling
0038デフォルトの名無しさん
垢版 |
2017/05/05(金) 13:57:16.18ID:H2WcmmXo
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を開発してる話は聞くんだけど、あまりリソースが割けてなさそう。
0040デフォルトの名無しさん
垢版 |
2017/05/30(火) 19:28:59.81ID:5LsaYMbU
threading macroを使ったSeqの途中で一時変数(let)を使いたいんだけど、どうすれば良いの??
0041デフォルトの名無しさん
垢版 |
2017/08/13(日) 19:51:35.89ID:KJ+m5GEj
(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以外のよい方法はあるでしょうか?
0043デフォルトの名無しさん
垢版 |
2017/10/31(火) 14:28:53.47ID:ks1WQGP1
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))
0046デフォルトの名無しさん
垢版 |
2017/11/05(日) 18:22:24.05ID:Ejsp/QIe
(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)
0047デフォルトの名無しさん
垢版 |
2017/11/07(火) 09:53:07.55ID:QNcerxGs
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))
0048デフォルトの名無しさん
垢版 |
2018/01/08(月) 22:31:20.70ID:7CLJqQI5
lein run では問題無く動作するけど
lein uberjar を行おうとすると失敗して困っています
Uberjar aborting because jar failed: Invalid argument というメッセージが表示されています
何方か解決方法を教えていただけると助かります

問題が発生してるコードはこれです
https://github.com/kemono/gaw-00001
0049デフォルトの名無しさん
垢版 |
2018/01/09(火) 06:37:21.04ID:lIn3WuFp
動かない原因は、: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)
...)
0051デフォルトの名無しさん
垢版 |
2018/01/18(木) 20:11:18.76ID:vOZSq9tB
この言語って何に使うの?まさか仕事?
レスを投稿する


ニューススポーツなんでも実況