【Lisp】プログラミング言語 Clojure #3【JVM】
>>1 乙
そしてなぜ前スレが1000行く前に落ちてんだ
typed clojureは、別に宣言する形なので、
慣れの問題だろうけど、本文中に埋め込んでる方が簡潔にみえる。
http://m.imgur.com/hUGIXwq lisp族でもshenは埋め込んでたが、
racket, clojureで埋め込まなかったのは、構文の自由度に影響でるから?
>>8 980超えると一定時間経過で自動的に落ちるとかなんとか
おいしい本は、ライブラリのカタログとしてかなり範囲が広いし、ライブラリが複数ある用途についてはしっかり一番オススメ出来るやつを選んで載せてある。
本屋でパッと見るだけでも全体通して同じだから雰囲気わかると思うよ。
参考文献がないのはなんかのお約束なんだろうか?
lolなところは、
入門書ではないが、leiningenのインストールのところはうまく初心者向けにかいてあるのに、javaのインストールには一言も触れてない点
関数脳って副題、内容関係なく編集者がつけた点
でした。
14 :
デフォルトの名無しさん:2013/10/01(火) 21:08:13.26
>>13 javaというか、jreだけでOKだよね?
16 :
デフォルトの名無しさん:2013/10/02(水) 23:32:43.22
まあしかし、Rails Rumbleとかに比べてClojure Cupは全く盛り上がってないよなあ。そもそも母数が少ないから当たり前だが。
おいしいやつけっこう評価いいっぽいな。買うかな。
RunaとClimateが買収されたらしく、盛り上がってる。
どちらも、ネット上でClojureの人材募集してたのを見かけたことがあるけど、
コアな人材を集める気のあるところの方が、
買収する側にとっても独立したRD部署とするにはマッチするのかもしれないね。
おいしい本は外部ライブラリ使った応用を紹介してるだけだから、文法的なことを期待して買うと塩漬けすることになる
どの本にも repl を終了するコマンドが書いてない件
(System/exit 0) で代用してるけど、いいのだろうか
25 :
デフォルトの名無しさん:2013/10/03(木) 04:38:08.70
Clojure Cupのエントリー数は42か。
まあ初回だしこんなもんなのかな
make-arrayで配列作ってたんだけど、状態変更不可だと聞いてたから、配列の値を変更するたびに新しい配列を作り直すのかと思ったら、中身はjavaの配列で普通に代入してる件
28 :
デフォルトの名無しさん:2013/10/04(金) 02:32:30.29
状態変更不可だと聞いたの聞き間違いだね
ClojureにはJavaオブジェクトとかrefとかアトムとか
変更可能なものがいろいろ用意されてる
cup戦の投票結果発表してたよ。
clojure-py やってみようと思ったけど
開発止まってるこれはもう開発の余地がないほど完成してるってとってもいいのかな
setterという変数の内部の値を書きかえる関数があるとき、
(let [] (setter x) x)
と
(do (setter x) x)
で結果が違うんですけど、これは仕様でしょうか?
letの方はxが変更されなくて、doの方はxの中身が変更されます
ひょっとして、 do でも実行順序が保証されてなくないですか?
user=> (map (fn [x] (do (println "print " x) x )) (range 0 40))
(中略)
print 31
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
30 print 32
print 33
print 34
print 35
print 36
print 37
print 38
print 39
31 32 33 34 35 36 37 38 39)
scheme の場合
gosh> (map (lambda (x) (begin (print "print " x) x)) (list-ec (:range v 100) v))
(中略)
print 95
print 96
print 97
print 98
print 99
(0 1 2 3 4 中略 91 92 93 94 95 96 97 98 99)
common lisp の場合
CL-USER> (mapcar (lambda (x) (progn (print x) x)) (range 100))
(中略)
97
98
99
(0 1 2 3 中略 97 98 99)
clojure は変数の不変性を前提に変な遅延評価と最適化してるような気がする
mapが返すのは遅延リストだから、
(do s1 s2 s3)
s1 が s2 より前に実行されることが保証されているだけで、 s1 と s2 の間に他の処理をしないことは保証されていない
s1 s2 が s3 の内部の値を書き換える操作の場合は s3 の内部状態が書き換わることは保証されない
遅延評価まじでウザいな
なんでこんな欠陥を導入したんだよ
破壊的副作用に頼ったコードを書かなければどうということはない
・・・と言いたいところだけど、java呼び出しで書かざるを得ない時は結構ある
毎日clojureさわってる内はちゃんとdoallとかdorunとか呼ぶようにするけど、
ひさしぶりにさわると忘れてる事が
データ構造を作った後に値を埋めていくタイプのコンストラクタはどうやって作るのだろうか…
遅延評価ではなく遅延シーケンスな
>>46 遅延シーケンスを否定するならClojureを使う意味はほぼ無いよ
まさしくClojureの主要機能
順序問題はloop使うとちょっと逃げられる
遅延なんて、カスと認定されて20年以上前に主要プログラミング言語から追放された昨日なのに
どうして関数型を名乗る言語で復活してしまったのか
カスなのに
そもそも追放されてなくね
>>54 リストxs が f1 f2 f3 ... で構成されてて、
各fi が xs の部分集合から計算されるとき、
各fi の計算順序を無視して xs の定義を記述できる
ので便利
副作用を制限する関数型言語の特性と遅延処理の相性がいいからねえ
その作者、seesaw作ってた人か
当時は学生っぽく見えたけど、どうだったんだろう。
それマクロスちゃうヴァルキリーやで
っていう突っ込み欲しいんだろうか
割とマジでコレが日本で流行らん理由がわからん。
PHPなんかよりよっぽどWeb関係作りやすいし安定してるのに。
流行らない理由「Lispだから」説
twitterでもネタで書かれてたけど
本当にこれありそうだよな
Pythonみたいなのが流行りつつあるのを見ると
やはりみんな括弧が嫌いなのかね
自分もエディタのサポートが無い環境なら
括弧の類が少ない言語を選ぶ気がするよ
Lisp系の文法フリーな文化に慣れると
他の言語に手を出す気が失せる
>>66 今の時代エディタのサポートなしとか余程の変態か初心者しかやらないし
python流行ってるのは米軍とかgoogleが支援してるからも大きい
つまりclojureにもいいパトロンがつけば
外野からすると単にカッコがというよりものっぺりしたコードの見た目に抵抗がある
>>64 生のJavaScript書くのが辛いという理由で、Haxeみたいなのが人気が出てるのを見ると、
「コンパイラがエラーを指摘してくれる安心感」に魅力を感じる人が多いんだな、と思う。
Lispは発想を自由にコーディング出来るが、言い換えると開発者によって練度のバラつきが
大きく影響する--->人月で契約するプロジェクトマネージャーへの受けの問題だろう。
マクロ書けなかったらClojure使う意味なんかないしなぁ
>>70 JavaScriptもClojureのREPLみたいに使えればそんなに書くの嫌いじゃ無いんだが開発環境がとてもショボイのが嫌いだ
ってなわけでWeb環境はclojure+clojure scriptが楽だったりする。
プロトタイプはこれで作ってプレゼンする感じ
でも実際の運営までにはPHPとかに変換しないと運営から文句来る orz
これはClojure->PHPのトランスレータのフラグ。
Twitter見てるとアニオタに人気の言語なのかね
>>74 PythonとRubyがアップを始めたようです
Haskell「所詮スポーツマンじゃの」
今勉強中なんだけど、
セットとかマップって単にリストとか連想リストではいかんのだろうか。
そんなに効率が変わるようにも思えないし
普段はScala + Playをsbt + IDEAでコーディングしてるんだけど、
Clojureでウェブアプリ作ろうと思ったらどんな組み合わせでやるものなの?
デプロイ先とかも簡単に見つかるのかどうかも気になります。
>>78 webアプリだと基本warに落とせる物が多いからAWSでもなんでも何処でもOKですぜ。
servletエンジン持ちもあるから単体jarで起動できる物も多いし。
JVMの有無だけじゃないのかなデプロイの可否
ふっふっふ
社内で勉強会開始
emacsenが半数を占めていたのでCCWじゃなくnrepl-jack-inでclojure学習でだいぶいけそう
メモ帳+コマンドプロンプト の俺は異端か…
Lispでエディタ補助なしって拷問に近い
LightTableがオシャレ
メモ帳でLisp書くのとかどんな罰ゲームだよwww
メモ帳+コマンドプロンプトになれると、USBメモリにclojure1.xx.x..jarとコマンドプロンプトのショートカットだけ入れてればどこでもプログラミングできる
xyzzyにclojure-modeあるのか?
>>90 いっそのことlanternaとか使ったテキストエディタもとろもつくっちまったほうがよくね?(lanterna日本語とおらないのがアレ過ぎるけど)
もはやメモ帳でコーディングする方が楽という領域に入ったが、
メモ帳閉じた後に自動インデント整形してソースを出力しなおしてくれるツールがあるとうれしい
clojure.jarにくっつけてくれ、とだれが英語でリクエストしておいてください
>>93 vimとclojure.vim入れて、全行を「=」コマンドで整形して保存するだけのスクリプトを書いて実行
もしくはemacsで(ry
コードの整形は流石にpretty-printでは無理か
leiningen使ってたら他の処理系のビルドが大変めんどくさくなってきて困る
なんだかdameningenになった気分だ
>>96 最近の、ビルドの最中までオンライン前提な風潮はどうにかならないのだろうか…
nrepl.elで
(.start (Thread. #(println "anal")))
とかすると、出力がreplではなく*nrepl-server*バッファに表示されてしまう問題はいつ解決されるんだろうか
>>100 replの*out*をどこかにコピーしておいてbinding で*out*へ結びなおすのじゃだめなん?
user>(defonce +nrepl+ *out*)
user> (.start (Thread. #(binding [*out* +nrepl+] (println "anal"))))
anal
nil
user>
>>102 そっか、それで良いのかありがとう
pcallsとかならbindingしなくてもちゃんとreplに出力されるみたいだから内部で同じようなことやってるのかな
それでも例外は*nrepl-server*に出てしまうけど
>>103 例外は補足してバッファにpopupさせる設定ができるから
nrepl-popup-.*
な変数を c-h vでチェックしてみるのがよさげ
;;; 最新版にしたらritzが動かないのでbreak-on-exception効かなくなってちょっとこまった >> nrepl
Great Goodとか出してるNo Starchからclojureの本出すらしい。
> Good news everybody: I've signed a deal with No Starch Press to publish Clojure for the Brave and True! Not only that, the entire book will continue to be available for free online!
http://www.flyingmachinestudios.com/programming/book-deal/ たくさん図のはいった本になるんだろうか
109 :
デフォルトの名無しさん:2013/11/12(火) 00:19:25.31
知らばく見てなかったけど、もちろんJVMとは決別したよな。
もうブラウザに移行しまうま。
来年ぐらいに構文解析的な用途では十分なCinCもできそう。
llvm、python、.net実装は利用者増えてない。
JJUGで発表あったような、、、
もっとこういうClojureの採用事例が増えてくれるとうれしい
lispってemacsユーザーのオモチャっていうイメージがある
そもそもclojureはlispなのだろうか…
let over lambdaの作者がvimmer過ぎて、読んだらemacs云々はのイメージが薄れた。
>>114 逆ジャね?
emacsがLispユーザのおもちゃじゃね?
SICPとemacsがプログラミング入門に最適だった
今でも、そこからスタートするのが良い素養を持てるはず
C#,PHPがやることなんて、せいぜいlatexの延長か何か
SICPはschemeメインだから、SICPから入ると、loopを多用するlisp的なイデオムに拒否反応が出る
2.4.0-SNAPSHOTがないっぽい。
たしか、2.3.4にしたら動いた。
leiningen-2.3.4-standalone.jar
export LEIN_VERSION="2.4.0-SNAPSHOT"
ここを"2.3.4"ね。
たまたま、普段使わないwindowsにいれようと思ってひっかかったので、
404 not found じゃなくて、403 Forbiddenだし、
過去の報告みてダウンローダーがおかしいのかと思ったんだけど、
取り敢えずファイルが公開されてないようだ。
hylasと微妙にカブる
125 :
デフォルトの名無しさん:2013/11/28(木) 23:21:29.33
incanterをRの代わりの使おうしたけど
incanterは色々足りない感じがして残念
資産を生かしたいなら、Rのラッパーがjavaやclojureにあればすむのかな?
>>125 Incanter は現在もしっかりと開発されてるんだよな
数人がコツコツ作ってる印象だけど
物足りない感じるならなら開発に参加すべき
もうそれ素直にRやったほうがいいと思うの
Common LispやSchemeとの関数の対照表はありませんか?
まずmemberやfindに対応するものからしてわからない……
define defun defnとか、set系とか、eq系とか、mapとmapcarとか、高階関数の引数で#'が必要かどうかとか
もうあきらめてる
jarkをraspberry piとbeaglebone blackで使えるようにしてほしい。
つまりarmアーキテクチャで動くjarkがほしい。
rpiもbbbもjvmとかreplとかの起動が信じられないほど遅くてclojureを使うモチベーションが
打ち砕かれてるのが現状だけど
jarkが動くようになれば未来がガラリとかわる。
CPUは18ヶ月で2倍だっけ?
atomのBayTrailなら普通に動くので、
あと二年ぐらいで、1万前後の組み込みボードでarmかatomがそこそこ動くようになってると思う。
Incanter 最近動きないと思っていたけどこつこつと開発は進んでいたんだな
同じような処理をするならリストかベクタどっちが早いの
>>137 その同じような処理がどんな処理かによる
139 :
デフォルトの名無しさん:2014/01/04(土) 01:48:06.47
>>138 要素ごとに関数を適応する場合と
(+ n n+1 n+2)みたいな計算を全リストごとに計算をする
処理そのものの速さよりも、結果を他のコレクションに変換するときのコストを気にする方がいいような…
>>139,140
1.5からmapvとかあるからvectorでもseqでも変換コストはかかんねぇような気がする
あ、まちがい、出来上がった結果のvecやらseqやらをさらに遣って後から伸びる方法によるのか。(頭に足すかケツに足すか)
>>141 mapv初めて知った
>>140 リストをベクタにしたりとか変換しないようにしとけば特に問題ないんだな
LightTableがOSSになったぞ
>>144 見てきた
cljsとはおもわなんだ
ちょっとびっくり
おいしいclojure読んだけど、外部のライブラリを導入するときに、インストールまで全部オンラインでやること前提になってるけど、今はそれが普通なのだろうか
必要なアーカイブをダウンロードして、あとはオフラインでやるというスタイルはもう終わりですか
jarファイルダウンロードしてくる部分のこと?
yum(rpm)、gemとかと一緒だね、
leiningenとかで使ってるのは、javaのmavenレポジトリがベース
rubygems.orgとか良くダウンしてたので、その時の為に、ローカルにリポジトリの
http://daly.axiom-developer.org/clojure.pdfミラー作ったり、yumもインストールCDからしたり出来るし。ローカルネットワークのみの場合でもproxy経由でインストールしたりする。
mavenは詳しくわからないけど、
leiningenも、ローカルにミラーしたmavenレポジトリ追加したりということは可能かと。
あとは、独自版を使いたいときのために、localinstallプラグインというのがある。
149 :
デフォルトの名無しさん:2014/01/25(土) 16:42:03.33
4clojureがちょくちょくつまる
reverseなしでreverseするには空リストにintoとか
普通すらすらわかるん?
>>148 普通にローカルの~/.m2/repositoryへ突っ込む手段はあるから問題ないんじゃ?
ソースひっぱってきてmvn installでも lein installでも使える
バイナリのjarだけを突っ込む方法はしらん;-p (~/.m2/repositoryをクローンで?)
起動時間なんとかしてくれー
jvmの起動時間て
なんであんなに遅いの?
どうにかならないもんなの?
leinは、32bitJVMのころにあった-clientに当たるような設定つけて起動してるみたい。
なので、サーバー用途にlein runそのまま使うと遅くなることも。
Android4.4に実装されているART Runtimeみたいに、AOTで起動早くすることもできるんだけど、
現状、AOT付いてるPC向けのVMはHotSpotVMより起動が遅かったりする。
そういうば、ART Runtimeだと今のところclojureでつくったソフトが起動時にclassのverificationで落ちて動かない。
>>149 そういうのに多く触れて来た人ならスラスラ解けるでしょうけど、そうで無い人の方が多いでしょう。
でも、そういう問題を解いて、他の人がどのように解いているのかということを知るのが4clojureの目的だよね。
>>156 なるほど、解いた後他人のsolutionを見ることに意味があるのか
すみません
leiningen を reple で起動したときに、jar をどっかからダウンロードしてると思うんですけど、そのjarっていったいどこに保存されてるのでしょうか?
Windows7 です
lein classpath とか打てば書いてあるんじゃね?
>>158 c:/Users/<アカウント名>/.m2
ここがmavenのリポジトリの在処
lein depsでひらってくると.m2以下に突っ込まれる
161 :
デフォルトの名無しさん:2014/01/31(金) 22:17:30.83
大学生協に1冊だけあったおいしい本がなくなってやがる
こんなマイナー本をピンポイントで
中身確認したかったのにorz
おいしい本は、読者がネットに常時接続してることを前提にしている点に違和感がある
ずっと繋がないといけない処理があったりするの?
lein使うのやめてほしいとかそいうの?
>>163 私の開発環境は完全にオフラインだから
leinだと、USBメモリにjarファイルコピーしても、どこに配置すればいいのか分からん
確かに。昔は、何も使わないチュートリアルがあったけど、最近はlein中心だからね。
もともとそれで動くから、
ツール系はhadoopとかみたいに、libsフォルダにがっつりjarファイルが入ってて、コマンド用意して隠蔽してたりする。
jar置いて実行できるツールは必要かもね。clojurebox
基本はこれだけど、
http://clojure.org/repl_and_main unix
java -cp jar1:jar2:..:jarn -m clojure.main
win
java -cp jar1;jar2;...;jarn -m clojure.main
jarフォルダにいれてあれば、jar1:jar2:...:jarnを展開してくれるスクリプトみたいのあったかも。
leinプロジェクトの場合は、lein uberjarしてstandalone.jarをどっかからもってくるというて手もあるが。
166 :
デフォルトの名無しさん:2014/02/01(土) 22:53:02.10
ふと思ったんだけどClojureってClojureで実装されてんの?
バイトコードにコンパイルするのに、sdkのjavac が必要ないことだけは分かってる
>>167 .javaなruntimeクラスとかどうやってコンパイルしてるん?
ローカルの ~/.m2 リポジトリをUSBメモリやモバイルPCに入れて、
オフラインで lein 使用できないかな?
>>169 $HOMEを書き換えれば使えるんじゃね?
Clojureは今のところJavaで実装されてる。ClojureのコンパイラをClojureで書き直すプロジェクトはClojure Contribの1つとして既に走ってるよ。
Java言語習得済み人に聞きたいんだけどメソッドの大文字小文字の命名規則ってある?
kとKの違いでプログラミングClojureのSnakeゲーム時間めっちゃとられた
メソッド名は小文字から始まって、単語の区切りの先頭を大文字で
なので単語はアンダーバーで区切らず、そのまま連結する
というのが基本で、○○法とかの固有名詞の場合はそのときそのときで
今は日本語のメソッド名も使えるらしいが、その場合のルールは不明
ClojureScriptでhello world書いたら1MB弱あるjsファイル吐かれて驚いたんだけどこれが普通なの?
一応pretty print切ったら600KB少しにはなった
>>174 google closure compilerがゴリゴリ削るはずなんだけど
:optimizations が :none とか :whitespace になってたりしない?
>>173 なるほど、そういうことか
そうやってクラス名とメソッド名を区別するわけか
thx
haskel caml ml scala 使いのおれがclojureにうつるので今現在のおすすめ本ほしえてくれ
主要な本、英語か日本語で 特徴つけてくれたらうれしい
日本語書籍
オーム社
プログラミング Clojure 第二版(PDF版アリ)
Clojureの基本解説書、これよんだ後はclojarsとgithub探訪で事足りるような?
技術評論社
おいしいClojure
フレームワークやライブラリの紹介集なので必要かどうかは微妙だが名前が類推できないものとかをちょろっと知るには便利
英語書籍(基本ebook)
Joy of Clojure
入門書 Programming Clojureとどちらか片方あればOK
Clojure in Action
入門書+α +αの所が良い感じ TDD, Data storage, web, DSLとか
Clojure Programming
これは読んでないのでしらない
Very thanks
やっぱ日本語と英語じゃ理解の速度も深さもちがうから
日本語書籍 オーム社 プログラミング Clojure 第二版(PDF版アリ)
を週末に買いに行くわ
ただ、projectの組み方とか、開発環境の細かい使い方セッティングの仕方とか
かいてあるのもほしい、eclipse for java みたいなののつかいかた
lein とかの使い方、webあされば分かるんだろうけど、
まとまってるのがいい本とかで、その方が達成もあるし。
joy of clojureは本自体にそんなことが書いてあるもんなぁ
プログラミングClojureの5,6章はJavaの前提知識がないと辛いものがあるな
7章はめっちゃすんなり読めるのに
>>175 optimizationsをadvancedに変えたら素のJS並に減ったわ
でもこれJSのライブラリと相性悪いみたいなんで萎えた・・・
それを読んだので萎えた
186 :
デフォルトの名無しさん:2014/02/08(土) 16:01:14.48
>>180 thanks 日本語の本読んでから見てみる
日本語の書評があったので、転載
1. Web Development with Clojure
Clojure で Web アプリ開発する方法を調べようとして,ググり疲れた人向けです.
本書では Compojure/Ring の組み合わせについて, 一通りサンプル Web アプリケーションが動くまでを解説しています.そのほか (続く)
2. Clojure High Performance Programming
この本はおすすめなので,絶賛します.
この本の大部分は (遅くならない)普通の Clojure プログラムの書き方 の説明に費されています.
そこで,この本は次のような人におすすめです.
初級〜中級レベルの Clojure プログラマをこれから目指す入門者
(続く)
3. Clojure for Domain-specific Languages
これは、英語の書評があったけど、DSLが40ページで、残りが入門書とのこと。
あまりお勧めされてはいなかった。
似たような分野だと、
実践プログラミングDSL ドメイン特化言語の設計と実装のノウハウ
と
Functional Programming Patterns in Scala and Clojure: Write Lean Programs for the JVM
がある。
そういえば、clojureの書籍での入門順は何ヶ所で見た気がする。こことか
http://www.bigjason.com/blog/a-path-to-clojure
nilと()って分けてみたはいいけどあまりうまくなかったという感じがしない?
利便性に振った結果か、結局色んな所で同一視してるし……
nilとfalseを分けたschemeが嫌いな人には向いてると思う>>Clojure
というか、嫌なら、適当なシンボルを偽に割り当てればいいのではなかろうか
プログラミングClojure第二版の10.4の
lein noir new clojurebreaker
って
lein new noir clojurebreaker
の間違いじゃね?
kindleマーケットで100円の本買ってClojureの勉強はじめた
Android上で動くワンペインアウトラインプロセッサ作りたい
あのkindle本、追体験出来るように書かれてるので独習にいいよね。
seesawで表示させるとUbuntuだとテキストめっちゃ汚いんだけどWindowsだとどうなんだろ
>>194 Javaのメソッドで直接アンチエイリアスの設定をしないと綺麗にならないよ。
間違えた。"(anti-alias g)"でいけたわ。
>>198 hashはそんなに重いと感じたことないけどprotocolはすげーありがたい。
stmは粒度気にしてればパフォーマンスあんまり気にならなかったけど、レースコンディションの激しいものでもOKってわけじゃないよね?
>>199 単純に使ってないシステムコール(時計)を消去しただけみたい。
もともとトランザクショナルメモリは、GILやジャイアントロックのようなロックを並列処理出来るようにしたり、書き込みが一箇所に集中しない時に使って楽するものみたいだし、
カウンターみたいなのは、合成(reduce)していく設計になるんじゃないかと思った。
>>203 カリー化ってClojureに実装されてなくね?
206 :
デフォルトの名無しさん:2014/02/17(月) 12:29:59.97
Quilって使ってる人居る?
なんか怖いが第一印象
Quilはけっこう便利
これなら手軽にClojureでゲームが作れたりするんじゃないだろうか
ただgithubのドキュメントがまさにイギリス人の英文って感じなのがあれだけど
test
あれ、まだ?
あれって?
かそりんぐ
ID
214 :
デフォルトの名無しさん:2014/02/24(月) 23:13:01.99
(every? sequential? [x y])
と書くのだるいから
(sequential? x y)
と書きたいって感じで標準の関数を拡張していくのはよくあること?
あと、R風のベクトル処理できるライブラリとかないかな?Incanterに入ってるのかな?
>>214 ベクトル処理ならmapとReduceあるし
incanterで手軽にlapack使える
Incaterにminusとかplusとかあったみたいね。
(plus 2 [1 2 3]) ;[3 4 5]
単純な演算にmapとか使うのめんどいからさ〜
練習
;;;(plus 2 (1 2 3 )) → (3 4 5)
(defun plus (x lst)
(let ((ptr lst))
(while ptr
(rplaca ptr (+ x (car ptr)))
(setrq ptr (cdr ptr)))
lst))
プログラミングclojure 2版 100page
次のコードが「ほとんどcurry」になるのがなぜかわからん
(defn faux-curry [& args] (apply partial partial args))
ちなみに
(def add-3 ((faux-curry +) 3))
(add-3 7)
-> 10
となる
(ほとんどカリー化のほとんどは すべての引数が固定されたときも定数を返さないから)
カリー化は関数を関数のチェーンに変換することで
部分適用は引数を固定することだから、かな?
220 :
デフォルトの名無しさん:2014/03/01(土) 12:32:42.15
「ほとんどカリー化」というか2引数関数のカリー化だな
3引数ならpartial3回いる
compじゃカリー化だめなん?
org.clojure/tools.* とかの最新版ってどうやってさがしてくるん?
apply partial partial とか絶対見たくない
>>222 lein search tools.nrepl
とか?
マクロを利用する関数を書きたい場合って結構あると思うんだけど、
その場合は関数じゃうまくいかなくてマクロを書かざるを得ないな
>>225 そんなこと無いと思うけど、具体的にはどんな場合?
関数内でよく使われるマクロはそうでもないけど
トップレベルで使われることを想定してるimportとか
with-outとかwith-precisionとかbindingを利用しているマクロを
さらに拡張しようとした場合に関数だとダメっぽいなあ
(key val key val)のシーケンスからhash-mapに変換する関数はあるけどその逆はないのかな?
引数リストで{:as options}とかした後、そのoptionsをもとのシーケンスに戻したいんだけど
interleave keys vals で元に戻すしかないか
>>224 おおー、ありがと。
lein searchをずっとローカルリポジトリ検索かと思ってた orz
>>227 そういうことであれば、そうかもしれないけど、そんなことをするのって、めったにないと思う。
>>228 (flatten (seq m))でどうかなぁ。mapになった時点で順番は失われてしまうから、元のシーケンスにはならないけど。
ところで、そんなことが必要になるシチュエーションが思い浮かばないんだけど、どういう時?
>>231 flattenだとvalueがシーケンスの時にうまくいかないと思う
clojure.java.io/readerとか同じようにオプションをとる関数に引き渡していく際に欲しい
LightTableのオススメの設定とかってある?
まだコレくらいしか設定してないけど
#user.keymap
"ctrl-pageup" [:window.zoom-in]
"ctrl-pagedown" [:window.zoom-out]
"alt-c" [:clear-console]
"f3" [:find.next]
"shift-f3" [:find.prev]
"ctrl-/" [:toggle-comment-selection]
"ctrl-w" [:editor.watch.watch-selection]
"ctrl-shift-w" [:editor.watch.unwatch]
f3とかpageupとかも普通に使えるのに驚いた
:toggle-comment-selectionは必須だな。もっと早く知りたかった
Windowsだとalt-wがメニューに吸われるのがだるいなあ・・・
>>228 (mapcat seq mm) とかではだめかな?
>>234 なるほどね。それでいけるね。
apply concatでも大丈夫そう
repl で
(set! x 4)
とかとしてもエラーにならないxってどうやって定義するの?
(def x 0)
(def ^:dynamic 0)
とかでも
IllegalStateException Can't change/establish root binding of: x with set clojure.lang.Var.set
でエラーになる
clojure.core.clj のソースをみても
(def ^:dynamic *print-level* nil)
とかで定義しているのに、なんで自分で定義したら上のエラーが出るんだ?
>>236 thread localの(bindingした)varに対してset!できる
(def ^{:dynamic true} *TESTVAR* 1)
(binding [*TESTVAR* 2]
*TESTVAR*)
=> 2
(def ^{:dynamic true} *TESTVAR* 1)
(binding [*TESTVAR* 2]
(set! *TESTVAR* 3)
*TESTVAR*)
=> 3
そうでないなら(REPLからとか)
(alter-var-root #'YOUR-VAR-NAME (constantly NEW-VALUE))
みたいにしないと駄目
>>238 なるほどね。Thanks!
でもなんで *print-level*は
(def ^:dynamic *print-level* nil)
で定義されているのに
replで
(set! *print-level* 5)
-> 5
とかできるんだろう
(defn myint []
(let [x (read)]
(binding [mem mem]
(if (< x 0)
(println "good-by")
(do
(set! mem (+ mem x))
(println mem)
(myint))))))
のでつかえばいいんだな
>>239 clojure.mainの中でwith-bindingマクロつかってREPLのループ中でbindingされているから
emacsでnrepl-jack-inとかcider-jack-inして使っているなら clojure.mainをM-.してソースみてみると良いよ
あるいは直接clojureのソースのmain.cljみてみるよろし。(repl関数ね)
sublimeでClojure書いてるひといる?
デフォルトのインデントが糞なのでlispindentって拡張使ってるけど、時々固まるんだよなぁ。
ClojureはLightTableかなぁ
RubyはSublime使うけど
sublime良いエディタだけどclojure使うときはemacsかぬ
>>239 被った。
Dynamicのvarをset!できるのは、別スレッドでbindされている場合のみで、
replで*print-length*などをset!できるのは、replが別スレッドで動いていて、
起動時にそれらのvarがbindされているからです。
どこでそのようなことが行なわれているかについては、
https://groups.google.com/d/msg/clojure/ufoDL6eNL3U/czncX8bNNSsJ にあります。このスレはまったく同じ質問についてのスレなので、他のメッセー
ジも参考になるかと。
ところで、そのdynamicなvarはどのような目的でつかいます?
どこに書いてあったかわすれたけど、set!はclojuerの流儀としてはほとんど
使われなくて、どうしても変更可能な値を管理したい場合はatomなどを使いま
す。
246 :
デフォルトの名無しさん:2014/03/07(金) 00:49:09.11
>>245 別スレッドでなくてもset!できますよ
247 :
デフォルトの名無しさん:2014/03/09(日) 13:11:05.66
with-meta使えるなあ
付加情報渡すのに便利だわ
塹壕から迫撃砲しよ
シーケンスを引数にとる関数だらけのClojrueではオブジェクト的な構造は使いづらいが
メタ情報を使ってオブジェクト的な構造を表現して渡すのも場合によってはありだな
(get [:a :b :c] 1)は:bなのに
(get '(:a :b :c) 1)はnilになるのな
こんなところではまった。nthを使うべきだった
関数getについて単に無知なんだろ
どういう意味?
リストが暗黙的にマップとして扱われないのはなぜ?
253 :
デフォルトの名無しさん:2014/03/10(月) 03:08:58.76
>>252 getはリストとかマップとかは関係なく非線形探索可能なデータに対して使います。(マップ、ベクタ、セット、文字列、配列)
そのようなデータを使う時、nilや指定した値を返すのが便利だから作ったのでしょう。
この例に限らずnilが返ったり、nilを与えたときにどう動作するか
明確にドキュメントに書いてないことが多くて試してみないといけないのがちょっとめんどい
へ?
ベクターは添字でアクセスできるが
リストにそれを求めるのは変だろ
nilが帰ってくるあたりまえ
リストは可変長配列ではないのだから
nthではアクセスできるじゃん
hash-mapのvalueにだけ関数を適用して変換できるmap関数のようなものないのかなあ
自作するしかないか
coreとcntrib以外にベースになるライブラリってない?
ディレクトリ内を正規表現かglobで検索できる関数が欲しい・・・
glob検索必要って事はWindowsかいね?
普段使いだとUnixとかLinuxとかMacOSだとコマンドラインのレベルでワイルドカード展開しちゃうから必要性感じないのだけど
260 :
電波いっぱい:2014/03/13(木) 00:25:56.65 ID:63sq92O1
>>257 Javaのファイル検索にglobがあるからそれをつかっては?
261 :
電波いっぱい:2014/03/13(木) 00:36:12.30 ID:63sq92O1
>>256 リストとベクタは順序のある要素の並びだからnthでアクセス
マップはキーと値の関連の集まりだからgetでアクセス。ベクタのインデックスをキーとしてgetが使えるのはオマケ。
マップの全ての値に同じ操作をする必要性かあまり思いつかないけど、reduceを使うときれいにできると思う。
262 :
デフォルトの名無しさん:2014/03/13(木) 08:14:17.30 ID:MKpH1D3w
>>256 マップの特定のキーを持つ値に対してであれば、update-inを使いましょう。
全ての値だったらcoreにはないけど、clojure.algo.generic.functor/fmapがあります。
Kormaで並列にMySQLへ接続してると
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:
Communications link failure
ってのが出て死ぬ。まだ深追いしてないけど、逐次なら動く。
mysqlのログに一切何も出てないのが謎。
pmapで馬鹿並列にしてるから、何かコネクションの再利用方法とか
設定する必要があるのかな?
max_connection関連かな?わからんけど
TIME_WAITがいっぱいになってたりして
mysqlの問題かもしれんし、もう少し調べます。
スレ汚しすまそ
リソースが取り戻せず、スレッドプールの上限、もしくはmysqlの上限になってるのか。
mysql側は、show processlist;とかで見てみるとか。
スレッド数よりプールが少なくて待たずにおちてるとか、
ライブラリのバグかもしれないし、なんとも言えない。
>>267 直感的にはプール数とスレッド数の関係のような気がする・・・
ありがとうございます
java8がラムダ式導入とか遅延評価とか来たが
Clojure の遅延評価とか高速化されんのかな
言語コアとして遅延評価が入ったわけじゃないから関係ないだろうな
高速化なら7のときのinvokedynamicのほうが恩恵ありそう
273 :
sage:2014/03/22(土) 22:40:10.10 ID:kQXftENJ
invokedynamicは議論になってたけど、Android含めた互換性の問題で今のところは見送られています。
Lambdaでinvokedynamicが使われているのを考えると、これも同様に見送りになるのでは。
clojure CLRってWinRT端末でもうごくん?
Clojure1.6がリリースされた
Processingのjarを使ってclojureでグラフィックを書いています。
高負荷の作画をした際に初めて分かったのですが、Javaで書いた同じプログラムよりclojureの方が大分遅くなります。
推測では原因はjavaメソッドの呼び出しで、lineやrectなどの作画メソッドを1フレームに数千回は呼んでいます。この呼び出し数を下げるとパフォーマンス悪化が和らいできます。
なんとかJavaで書いたプログラムと同等のパフォーマンスを出したいのですが、javaメソッド呼び出し部分を工夫する余地がないように思います。(.line applet x1 y1 x2 y2)
どなたかアドバイスを頂けませんでしょうか?
javaで書いてしまいましょう
quilは使っていました。しかしquilのサポートするprocessingのバージョンが古いままなので、直接processingを使うことにした次第です。
quilでも同じコードを書いて試してみたのですが、
processing.jarを使う <(若干早い) quil <(全然はやい) Java
でした。
万策尽きました、がっくし
だから、javaで書け
リフレクションが使われていないかは確かめた?
型ヒントでリフレクション使われないようにすると50倍くらいは差が出るよ
>>284 (def applet (new PApplet)) となってたのを
(def ^PApplet applet (new PApplet)) としたら
死ぬほど早くなりました。
つまらないことお聞きして失礼しました(てへぺろ
これでclojureでのコーディングが続けられてウレシイです
286 :
デフォルトの名無しさん:2014/03/29(土) 16:56:57.64 ID:yiV3q/LE
型ヒントってそんなに違うものなのか
ちなみに作ってるのってゲーム?
Clojureのチューニングポイントはいろいろあるけど、Javaと比べて実行時間1.2倍くらいまでなら容易に達成できます。
そこまで達成できないのであれば、まだまだチューニングの余地ありと考えましょう。
ちなみに、普通にJavaで書くよりもClojureの方が高速になる特異な事例もあります。
>>286 Clojureの練習を兼ねてジェネラティブ・デザインを少々
Android用Processing.jar + Clojure でゲームにしたいですがハードル高そう
おお、凄いな
290 :
デフォルトの名無しさん:2014/03/29(土) 19:36:12.68 ID:yiV3q/LE
デザイン系か
Androidだったらleindroid+Quilじゃ駄目なん?
clojureが速いという例では無いが、(Elasped secが実行時間、CPU secの合計で、CPU Secだとだいぶ遅い)
下のページのjavaとの比較表でダガーマークがついてるやつは、javaが1coreでclojureがマルチコア使ってて、
http://benchmarksgame.alioth.debian.org/u64q/clojure.php † possible mismatch - one-core program compared to multi-core program.
ソースみるとclojure側も並列化意識してないCっぽいプログラムのベタ移植たけど、勝手にマルチコア使ってくれてるものが幾つかある。
Javaの呼び出しが入っちゃったら並列化可能かどうかの解析なんか結局不可能だからなあ
現実的じゃないよ
並列化は正確には並列実行を保証するものではなくて、並列表現できるという意味だしな…
>>293 破壊的代入を自動検知して不変性侵犯の有無を元に最適化とかできるようなシステムがあればいいのにと思う事も無いではない。
言語レベル(記述レベルで保証させる)だとHaskellみたいにちょっと堅苦しい事になるのが嫌いなんだよなー
androidもlein-droidも触るの初めてでしたが、lein-droidとprocessing-android でやっと hello world ができました。丸一日かかってしまいました。
lein-droidはjava classのコンパイル時にclojureソースでimportしたJavaクラスのスタティック初期化部が実行されてしまい、それがandroidライブラリのスタブにまで到達した場合、コンパイルエラーになる問題に苦戦させられました。これどうにかならないかな〜
lein javacでrecompileしたclassってreplからreloadできないん?
社内利用とかじゃなくて、実案件でclojure使う例ってあるの?
>>297 日本だと少ないけど自分はリリースしたものあるよ。(もうサービス終わっちゃったけど orz)
あとはニャンパスの人が仕事で使ってるってblogで言ってるね。
>>297 ニャンパスではありませんが、ClojureとClojureScript使った複数のサービスリリース経験ありますよ(運用中のもあります)
301 :
デフォルトの名無しさん:2014/04/01(火) 13:39:10.84 ID:xLiVzV5o
>>297 Googleから独立したベンチャーのbyflow?みたいなところが使ってなかったっけ?
clojureで書くだけのメリットがあるコードって何なんだろ
オブジェクト志向向けじゃない問題なのにjava資産を使いたい場合。
まぁ普通に使ってもjavaより断然短く書けるよね。
scalaと差別化した回答にして欲しいところ
Lispの文法でJava資産を使いたいとき、とか?
あとLeiningenがあるのも
>>304 ・scalaのreplは遅くてイライラする
・scalaのreplは複数ファイルをロードするとき、一つを読んだら他のファイルもロードしなくてはならないのが面倒
・scalaは、コンパイルが通るコードもreplに通らないことがある(例: class定義の{の前後の改行位置)
どっちもプロトタイプ向けにしか使わないと思うので、文法よりもこれが決定的
文法で言うなら、scalaは、継承やジェネリックのルールが覚えられないほど細かいのが欠点
文法を間違えないの他に何もメリットが思い浮かばない
あまり使い込んでないから言えないけど、マクロとか?
いや、そこまで積極的に使うものでもないか
Scala複雑すぎるし無駄にしょっちゅうライブラリ弄りすぎ
Scalaあんまり触ったこと無いけど、なんていうのかな、機能同士が直交してないっていうのかな。○○と××を一緒に使うと問題があるのでこの場合は例外的に△△しますみたいなケースが多くて頭がパンクする
>>302 速度クリティカルな数値計算でゴリゴリやらない奴なら何でもいいんじゃなかろうかと思う今日この頃。
雑用スクリプト作ったり、プレゼン用にプロトタイプを30分で作るための言語という認識しかない
>>312 それならRubyとかPythonの方が良くね?
>>314 Javaが楽に使えるから、過去のservlet資産を組み合わせて短時間で見栄えのいいプロトタイプを作るのに重宝してる
携帯用もできるから手放せない
事務の雑用スクリプトは、もうその人の癖の領域だから、文法とかはもう関係ないかと
REPLが重宝するという話だと、
データ解析とかHadoopの処理をサンプリングしてREPLで組んじゃう話は聞くな。
DB系でコンソールで解析しちゃったり、
コマンドライン上で、パイプコマンドでapacheログ解析しちゃう系のイメージ
replに打ち込んだ履歴をそのままプログラムに反映させようとするとき、Lisp系は各コマンドがS式で独立してる率が高いから重宝する
他のスクリプト言語は前後の文脈も考えて頭つかう必要があることが多い気がする
REPLでdefnしてたの忘れてcljファイルに反映しないで作り込んだら次回cider-jackinしたらコンパイルエラーで起動しなくて焦った。
こういうの忘れない様にするテクニックとかツールないかな?
>>318 lein compileをするのが確実です。
>>319 nreplしてるとlein起動自体重くて忘れがちでした orz
「lein testしろやゴルァ」な付箋をモニタに貼り付けておこうと思います。
[壁]д・)チラッ
nreplの中でdefnしたものをsnipetにして吐いてくれるelispないかなー
orz、ゴルァ、壁チラww
こいつ何年前からタイムスリップしてきたの?
>>321 それがどうした?
としか思わんのだが。
だいたい未来からきたんじゃねぇの?(あるいは
>>321が未来すぎる)なんで苛ついてるんだか。
LightTableのREPLが綺麗に死なない(LTをQuitしても残る)んだけど同じような経験してる人いる?<<Win8
http://reborg.tumblr.com/post/84235302368/clojure-weekly-april-29th-2014 datascript の簡潔な説明があった。っても全部載せられない長さだけど。
> tonsky/datascript Interesting ClojureScript idea,
implementing a Datalog query engine on top of Clojure immutable data structures.
It is meant to run in the browser with a lifecycle starting at page load and ending
the next page load. It is technically an in-memory database in the browser. When to use? ... 続く
RFPを想定してると思われるが、moriやomの一部置き換える事が出来るのかな?
Incanter2.0作ろうって物好きが新機能の案募集してるな
職場の環境でこっそりclojureでツール作ってたら同僚からずるいって言われてワラタ
職場でこっそりClojure書いてても、
ディスプレイ覗き見た誰も、何を書いてるのか分からないだろうから、
安心してClojure書いてる俺もいますよ
カッコ良すぎて逆に目立つだろw
repl で、
user=> (with-open [rdr (clojure.java.io/reader "tmp.txt")] (count (line-seq rdr)))
が OK で、
user=> (with-open [rdr (clojure.java.io/reader "tmp.txt")] (map #(. % toString) (line-seq rdr)))
で例外が出る理由ってわかりますでしょうか?
IOException Stream closed java.io.BufferedReader.ensureOpen (BufferedReader.java:97)
すみません
自己解決しました
>>336 の質問は取り下げます
LightTableのinstareplで(doc my-function)やっても表示されないことってある?
339 :
デフォルトの名無しさん:2014/06/15(日) 00:49:16.29 ID:S46ph848
>>334 職場のSEさんとやらは、プログラム言語を一行も理解出来ないので
正常パターンの結果さえ合ってりゃ何も分からないw
盆栽本良いな
Clojure一通りやったけどWeb開発初めてって人間にはぴったり
必要なのはHTTPの軽い知識くらいだし
なまじRailsみたいに重たいと分かりにくい部分もよくわかる
英語の文章がちょくちょく引っかかるのが玉に瑕だけど
342 :
デフォルトの名無しさん:2014/06/21(土) 04:27:05.44 ID:MmynS5l4
343 :
デフォルトの名無しさん:2014/06/21(土) 04:37:20.50 ID:MmynS5l4
Clojureで開発したWebアプリを日本のサーバーで動かしたいんだけど、
日本にHerokuみたいにClojureに対応したサービスってないの?
345 :
デフォルトの名無しさん:2014/06/21(土) 21:40:12.30 ID:MmynS5l4
>>345 詳しい回答をありがとうございます。次のサービスでHerokuで動かしてた
Webアプリを起動することが出来ました。warを作成してTomcatにうpする
だけでした。PostgreSQLも使えるので便利です。
http://www.tsukaeru.net/jelastic/ Herokuよりも遅めのようなので、とりあえず日本のサーバーで動かしたい
アプリだけこちらに移すことにします。
347 :
デフォルトの名無しさん:2014/06/24(火) 00:30:15.05 ID:QQk/Zaq3
Clojarsがリニューアルしてた、トップのメッセージが
Clojars is a dead easy community repository for open source Clojure librarie
とかでちょっとニヤリとしてしまった
clojarsはマジでdead easyだよね。
自分で作って使うだけのライブラリもローカルでどうするか考えるよりclojarsに放り込むほうが簡単で面倒がないという。
ネットでしょっちゅうライブラリを落としてくること前提の開発環境にいまだに違和感があります
せめてclojure.coreだけは固定して、閉じたプラットフォームを確定してくれないだろうか
ネットでしょっちゅうライブラリを落としてこない開発環境って何だろう
352 :
デフォルトの名無しさん:2014/07/04(金) 01:49:36.21 ID:XaGTGyQy
最近はプロジェクトごとにライブラリ管理するのが主流だね。
leinだと、昔はプロジェクトごとにlibsにはいったけど、最近はアカウントごとの.m2だけ。
rubyのgemは、リポジトリがよく落ちたり、ネットのルーティングおかしくなったりするのと、
yumみたいな、ミラー機構が組み込まれてないのもあり、
ローカルにミラー持ってる人がいたりする。
yumだと、CDからインストールしたり出来るね。
rpmにあたるツールが欲しいのかな?
>>352 .m2に落ちてればローカルなサーバに上げなおす事で社内とかプロジェクトローカルにできるっしょ?
つかバージョン番号指定を必須になっているから何処のリポジトリに置いてあっても問題なくない?
354 :
デフォルトの名無しさん:2014/07/05(土) 00:32:10.68 ID:coa4ljqf
ローカルリポジトリ構成も出来るし、
それをまとめて配布というのも出来るが、
困ってる人があんまりいないから、記事にならんのだろうな。
>>354 どういうときに困るのか割とマジで知りたい
mvnリポジトリのサイトに何かしらの障害が発生してアクセス出来ないことが、
一番の問題になるだろうけど、見かけたことないので、機会がない。
rubyなら割とある。
まあ、初めからネットワークアクセス出来ない環境にリリースするなら、uberjarなりにまとめて持ってくだろうから関係ないだろうけど。
>>355 ネットにつながってないコンピュータに移植するとき
>>357 それってローカルリポジトリに突っ込むだけでよくね?
仕事のプロジェクトだとネットに繋がらない事前提にSCMに/Required/Lib/*.jarとか置かない?
>>358 開発環境でGoogle先生が使えないと辛いな
入門Clojurescript買った人居る?
>>360 買った、まさに入門なんだけど、調べるのがめんどくさい所を手順で示してくれるのでとてもありがたかった。
362 :
電波いっぱい:2014/07/09(水) 21:05:45.39 ID:NNs3v/8+
>>360 英語版を買った。
clojurescriptやるなら持っていて損はないと思う。というか、買うべき。
序盤にある、javascriptへのコンパイル(トランスレート?)の仕組みについての解説は、基礎知識として重要。
他にも、clojureとの違いとか、根っこのところからの解説があったりするのに全体的には実践的な内容なので、入門書としてとてもいいと思う。
PlanetClojureみてると、ここのところ事例紹介もだけど、Web API作るなどの実務よりなチュートリアル記事が増えてきた気がする。
364 :
デフォルトの名無しさん:2014/07/12(土) 12:23:18.10 ID:1GK9QQdX
365 :
デフォルトの名無しさん:2014/07/16(水) 23:44:48.62 ID:OHagA9er
lein new luminus +site +mysql がすげー楽だわ。pedestal joodo hoplon とかみて見たが、難しすぎるw
>>366 ringとcompojureはガチ。ViewはHiccupだけで今のところ何とかなってる。
作りながら覚えていけば割と楽ちんだよ。何より楽しくて仕方がないw
Web development with Clojure でDBとかも含めて一通り解説されてる
Kindleだと安いし
おっしゃるとおり、ring compojure hiccupで始めるのが得策のようだね。
あとは、レコードをdbに永続化してくれる軽めなのがあれば。
hiccup危険すぎ
これ使っちゃうとPHPコードのメンテが回ってきたりしたら死ねる(割とマジ泣き)
「コレ(PHPで)書いた奴死ねば良いのに」って職場で口に出てしまいそう
html 書く人は別にいるから hiccup は使わない。
サーバサイドはJSONさえ吐ければ良いと思ってたからそういうの使ったこと無い
>>373 最近は完全にこれだな。
Clojureは良い言語だと思うし俺も使っているが、全部Clojureで固めようという
思想はダメだと思う。その点でHiccupは微妙。
逆に、ぜんぶclojure一色ってのも面白そうだな
ぐぐったらcssもclojureで書けるみたいじゃないか。
これで、いっちょやってみよう!
俺は勉強中
リスト遊び終えてthe little schemerの最終章やりつつあり
on lispとland of lisp終えたらclojureやりたいな
それでAndroid上で動くアウトラインプロセッサ作りたい
来年だなあ
普通のテンプレエンジンだと、luminus が引っ張ってくる selmer か、clostache か、enlive かって感じだろうか。
どれもまともに使ったことないが、luminus でやるので、selmer いじり始めた。
カスケードも出来そうで、まぁ普通って感じ。いまんとこ。
>>376 androidアプリを作るのには、今のとこらclojureは向いてないかも
armのjava vmがショボいのか、やたら重い
>>378 4.4からARTが導入されるから何とかなるかもしれない
>>378 あらら、そうですかあ
するとjavaで開発となりますか?
発 者 同 . 。_ ____ 争
生 同 .じ . /´ | (ゝ___) う
.し 士 .レ .__/'r-┴<ゝi,,ノ ro、 は、
.な で .ベ ∠ゝ (ゝ.//` ./`| }⌒j
.い し .ル } ⌒ /`ヽ、_∠l,ノ ・ヽ´
.! ! か の / ´..:.} >、、___, .r、 ソ、`\
/ ..:.:.} / |∨ ` ̄
/ ..:.:./ | 丶
/ _、 ..:.:.:.{ .{.:.:. \
{ ..:Y .ゝ、 {.:.:.:.:. ヽ
|、 ..:/ 丿 .:〉 >.- ⌒ . ヽ
/ {. ..:./ ソ ..:./ .( ..:.:.:` ..:}
./..:.:}.:.:./ ヘ、 ..:./ .\ ..:.:r_,ノ、.:.:}
./..:.:/|.:/ {.:./ X.:.:}.} X X
/..:.:/ .}.:| }:/ .Y丶ヽ Y.:Y
. __/.:/ { } 《.〈、 _,,__>.:》丶 Y.:\
/.:.:.:.:.::/ !.:.:ゝ ゝ.:. ̄ヾ ´:.:.:.:.:.:.:.:.:ヾゝ \.: ̄>
みんなKorma使ってる?
俺も使ってるんだが、どうもしっくりこないというか、なんか
漠然としてて申し訳ないんだが、コレジャナイ感がぬぐえない。
でも他に無いので使うしか無い。
具体的に何がダメなのかと聞かれると答えられない。
おそらく、ORMというJava/Ruby系のライブラリの発想自体が
Clojureになじまないのかなぁという気がしている。
あと、昔Railsを使っていたのでActiveRecordと比較してしまうと
かゆいところに手が届かない
jdbc直接叩いてもいいかという気になっている
>>383 kormaは触ったこと無い、自分はClojureQLしかつかてない。
kormaは自分が使おうとしたときに原作者が多忙で更新が止まるとか言う話が流れてて手を付けるのやめちゃったんだよね。
おれも先日、clojureのdatabaseまわりのライブラリのどれがいいのか探しまわってたんだけど、
結局、一番プリミティブなclojure.java.jdbcでいいやって決めた。これでも十分にシンプルだし、SQLの文字列を書けばいいから新しいAPIを覚える苦労もない。
あとは、ギャグでDatomicを使ってみるってのはどうだろうか
korma はちょっと使ってやめたー。
master slave 切り替えがちょっと面倒そうだったし、JOIN の結果もあらら感があったし、FK 張らないとbelings to 効かないのかなんなのか良くわかんなかったし。
いまは jdbc で満足してる。ruby の named みたいに書けたらほぼ不満は無いな。
sqlingvo とか lobos とかってのもあるらしいので、気にはなってる。
LL脳だからどうしてもDAO 作りたくなるんだよなー。
kormaは抽象度が少し上がって手間が結構増えるみたいな感じでもにょる
mapをpmapにしただけで並列化できて速度が数倍になったw
さすが関数型言語。感動した。
>>390 SQL関係つかってると内部でIO(io!)があるので時々実行時エラーがでてすげー悩ましい
sql 出すやつは全部 try してるわ
>>391 H2使ってるけど、それはまだ出たことないな。
DBはどれを使ってるの?
BBBという小型基板Linuxで
lein repl
を実行すると起動に80秒くらいかかってやってられないけど
java -jar ~/.m2/repository/org/clojure/clojure/1.6.0/clojure-1.6.0.jar
なら15秒くらいで起動することがわかった。
環境変数の用意とかがガバガバだけど、だいぶマシにはなった。
>>394 lein使うと最終敵な起動までに何回かclojure(というかjvm)を起動してるからしょうがないんじゃね?
>>395 不要なコンポーネントの起動を抑制するアイディアがあれば教えて欲しい。
横レスで申し訳ないけどuberjarを作ればいいだけなのでは。
それとも開発もその基板でやってるの?
>>396 >>397も書いてるけどツールとしてもREPLを使いたいならuberjarで作った奴をREPL起動すればOKじゃね?
>>394を良く見たらclojure単体起動なのか
単体起動で足りるならleinいらなくね?
>>399 lein抜きでは、もはやライブラリの依存の管理が不可能になってる
だからせめて、coreの名のつくライブラリだけはオフラインのスタンドアロンでもOKな状態にしてくれと…
BeagleBone Black 事始め: 45 ドルで買える 1GHz の ARM ...
https://jp.linux.com/Linux%20Jp/tutorial/415684-tutorial20140415 >Apr 15, 2014 - BeagleBone Black (以下 BBB) は、1GHz クロックの ARM Coretex-A8、512Mb の RAM、
>Linux カーネル 3.8 を持っ ... イーサネット、HDMI と自由に扱える IO ピンを使うことで、組み込み Linux
>と Arduino の中間にあるような小型マシンを ...
512Mb のメモリで今日のScalaやclojureが動かせる訳がない!
IBM j9VMは起動時にメモリ少なくても頑張ってくれるので、数年前ぐらいにOpenVZのVPS(メモリ256MBスワップなし)で、compojureのweb動かしてたことある。
-ms16m -mx64mとか付けてたかな。
HotspotVMだと、起動出来なかったか途中で落ちたような記憶がある。
>>403 以前にarmのlinuxで単体のclojureはうごいた記憶があるから、動くことは動くんじゃないかな?
ただ、起動まで死ぬほど時間がかかった。そしてGUIライブラリ読み込もうとしたら、
処理が戻ってこなくなったけどw
すまん、ちょっと話の流れからずれてた。
スルーして
>>403 ラズベリーPiでClojure普通に動くよ。
java自体が重たいから起動時間は掛かるけど起動後はREPLの速度差感じない。
外部のemacsでslime接続してデバッグも開発もできたし。
ローカルなwebサーバインターフェース作るのにそんなに苦労いらないからイベント(スーパーマーケットとかで良く見るクジとか)
とかで使うマシンとしても最近は使わせて貰ってる。(ソリッドステートでUSB電源なのがうれしい)
>>406 ARMとhotspot vmの話題の方が続くので、そちらも聞きたい。
407とか。
REPL起動やGUI周りとか、初期化に時間かかってるところが、更に遅くなるのかな。
windowsと.netだと、そういうところをngen(AOT)して対応したら早くなったみたいなゲームがあったな。
関数型プログラミングの「パラダイムシフト」って一体何なの?
状態変数を許さないってこと?
状態変数が使えないとオブジェクトという概念が崩壊するよね?
パラダイムシフトは関数型言語特有の何かではない
哲学用語、ググれ
>>410はKuhn読めとかいう話じゃないと思うw
オブジェクトなんて概念、関数プログラミングには無いよね?
>413
無いよ。
関数プログラミングは副作用無しが特徴だから、状態を管理するオブジェクトとは相性悪い。
クロージャーでオブジェクト指向
つまりブラジャーはオメコ指向や
男やのう
痴関数は人類の希望やで
>>410 λ抽象を普通の型として扱うようにしたこと
Scalaってオブジェクト指向+関数型って聞いたんだけど
「関数型がある」と「関数型プログラミングができる」と「オブジェクト指向で設計された仕様を容易にプログラミングができる」は全部違う概念だし
関数型チョットデキル
上の qiita 見て darzana ってのに興味もった。
>>421 俺も興味もった。
あとLightTableに移行するかそろそろ本格的に悩みどころ
ただ自分のEmacsキーバインド病が克服できなくて毎度IDEとか使うのが苦痛で困る。
>>421 申請書用のGUIとかバリデータは、別系統になるけれど作れたらいいなあ。
>>421 LightTableにはemacsキーバインドある
>>427 まえ使った時は移行できないくらい中途半端だったけどだいぶマシになったんだろうか?
キルリングがどのエディタ行っても対応しずらくていつも泣く
ちとemacs 0.0.4入れてLightTableさわってみた
1:C-x C-fで新しいファイルを名前を付けて開けない(CMD-NでUntitleからsaveにするしか)
2:C-v でページダウン, M-vでペーストされて泣いた
3:ワード移動しようとしてM-fするとFind、C-M-fは無視
4:既知のkeybindを知る手段が見つからない(emacsのC-h b)
3の辺りでもう無理、それっぽくはなるけど奇病克服はミリだった
というかどのエディタもそうなんだが新規ファイル作成するときにDialog開くの止めて欲しい
もう emacs でいいだろ、、、
EclipseとCCWを使ってる人っている?
おいしいclojureで紹介してあったから使ったけど3日でemacsに戻った
IDEはマウスをクリックするのが面倒臭い
ltは64bitだと接続失敗するのが嫌
compojure と enlive と clojure.java.jdbc でwebサイト作り始めてだいぶ慣れてきたんだけど、webサイトってclojureで書いても面倒な手作業が多いんだな。それでもjavaやphpよりかはすっきりしている気がするが。
webサイトとかwebアプリ作るのって人海戦術が必要なんだなって実感した。
javaで書いた資産を貼りつける糊だと思えば…
html, css, js, http
これだけでもかなり面倒
slimv.vimを使えば結構vimでも戦えると思うんだよね
でも日本語の情報が殆ど無い…
>>437 それはどの言語でも面倒
結局jspも失敗だし
>>439 jspつかサーバサイドjavaはxml地獄が酷いからなぁ
今時のjava・webフレームワークはxmlほとんど書かなくてよくなってるよ。
そのかわりアノテーションだらけと、ルール分かってないとプログラムがどう繋がってるのかさっぱりわからない。
>>441 その点ClojureのWebフレームワークは凄く練られてる感じする
urlマッチングも構成要素の設定も全部s式(というかclojureの通常のリテラル表記)だけどそれが凄く読みやすい。
S式DBが欲しいけど見た事ないんでMongoDBでも使うべきか
>>443 DatomicならS式じゃないけどClojureのリテラルまんまだよ。
でも規模が合わないと予算が見合わないんだよね>>個人敵な実験結果では凄く良いんだけど稟議通すのだけでも至難の業
clojureとかDatomicとかを、稟議必要なシステムで使おうとしてる企業すごいな!
経営者から見たらclojureみたいなマイナー言語で実装するメリットないと思うんだが。
どこの会社?そこで働きたい
>>446 試用じゃないなら、せいぜい大学のゼミくらいではなかろうか
ここも、デザイナーからプログラマーまで使ってるとか。
http://xcoo.jp/ あとは、データ解析やってるの人が、道具として使ってる人が多いみたい。
最近はやりのマイクロサービス(ただのweb api)作ってサービスに組み込むのが、自社サービス利用の早道だとおもう。
clojure使ってる人達って、javaをさんざん使い倒して飽きた人達なの?
lispの資産をjavaで活用したいだけです
同じくです
Javaはほとんど使ったことがなかったけど、
Javaのライブラリが使えるのは非常に便利。
Javaでプログラミングするには人生は短すぎる
rubyやphpから移って来たという人もいるね。
日本の会社だとscalaという話が多いが。
javaからだと、replとして使い始めた人も少しいる。
ただ、clojureが無くなったら代わりに
Scala 35%, Haskell 33%, Python 27%, Ruby 22%, CL 24%, Scheme 19%, Java 19%, Erlang 16% (複数選択)
使うといってるので、2割近くはlisp系をサブで使っていたりするのもしれない。
PHPは童貞といっしょで恥ずかしくて書けないだけ
Clojure って、あるモジュールの、一部の挙動だけ変えたい、みたいな時どうするの?
ruby, perl だと継承して上書きしたり、mixin みたいに外から上書きしたりできるけど。
Clojure でも可能なのかな。
関数型があるし継承なんていらんやん
>>463 そのモジュールのソースコードに手を入れられないって事が前提なんだよね?
>>466 どの言語であっても、とりあえず動いていたら、その機能自体のソースコードには手を入れたくない
>>468 鉄道の信号インフラで40年前に書いたアセンブラがいまだに現役で稼働してるのにメンテできる人間が引退してしまった国の整備士です
>>463 どういう状態とかコードでその機能使いたいのかイマイチわからん。
object指向言語の場合インジェクションとかで必要になるケースはあるけどclojureでそういう事する必要性感じたこと無いんだが。
clojureで、マクロ関数呼び出しの中でifやletなどのマクロ関数のシンタックスに従わないステートメントを入れたい場合、#みたいな何かクオートするものを付ける必要があるんでしょうか?
今、enliveのdeftempleteでこまってて
(deftemplate some-page "public/some-page.html" [condition value]
(if condition
'([:#hoge] (content "hoge")
'([:#gehe] (content "gehe")))
↑いいかげんだけど、こんなことがやりたいんだけど、マクロに入る前にifが評価されるような仕組みってあるのかな〜?
プログラミングClojure第2版には書いてなかったとおもうんだけどなぁ
↑調べたとところ、無理でした。
マクロのマクロを書かないとダメかも
あとは、defmacroではなく、defnぐらいじゃダメなん?
マクロはコンパイル時に処理されるのに引数のconditionの内容は実行時にわかるんだからムリじゃね
conditionが定数って事かと思ったけど、それなら悩むはずもなく
結局ほとんどの場合コードは手に入るから、改変するのがいいのか、、、
それだと、その後のセキュリティ対応とかバグフィックスとか、自分で追従してく必要があるから現実てきじゃないけど。
望む挙動するような柔軟性を実装してp-r するのが今の流れなんだろうな。
え、deftemplate二つ作って関数で振り分けすれば済む話じゃないの…
使ったことないから分からんけど
deftemplate複数だと重複部分がいやなんですよ
あ、そうだ。テンプレートを入力してテンプレートをはくdeftemplateがあればいいのか!フィルターみたいにつかう
重複が嫌ならマクロを使おうと思ってしまうlisp脳
>>471 enliveのサンプルでこんなのあるけどやりたいことできるんじゃないの
(deftemplate microblog-template "net/cgrand/enlive_html/example.html"
[title posts]
[:title] (content title)
[:h1] (content title)
;;; koko
[:div.no-msg] (if (empty? posts)
identity
(substitute nil))
[:div.post] (clone-for [{:keys [title body]} posts]
[:h2 :a] (content title)
[:p] (content body))
[[:a (attr? :href)]] (set-attr :title "it's a link"))
Clojure というか、関数型というか、とにかく副作用の無い関数と、変更不可の value を使ったプログラミングは楽しいんだけど、いざ、ruby とか perl とかの一般的な変数を変更しながら適当に組める世界へ戻ると、あー、楽だわーってなる。
Clojure はなんか、俳句とか短歌とかそういう制限内での表現を楽しむようなそんな感覚なんだよね。もちろん超個人的な印象でしかないチラシの裏だけど。
拙者に才能が無いだけでござるかwww否定できぬwwww
Haskellみたくガチガチじゃないんだから適度にdefればいいよ。
Clojureは凄く楽だよ
reduceって畳み込みのことだよね?
副作用なしでやろうと思っても、配列の要素とか普通に変更されるしな…
変更不可の配列くらいデフォルトで用意してほしかったり
>>487 javaの生配列や生要素食わせたらそりゃそうできるのは普通の事じゃんよ
配列なんてめんどくさいもん、パフォーマンスが必要でもない限り使いたくない
>>489 数学の記述をそのままコーディングしたいときに使いたい
無いは嘘だな。使われないといった方が正しいか。
core.matrixだとイミュータブル、ミュータブルな演算があった。
構文クオート`
アンクオート~
スプライシングアンクオート~@
がdefmacro以外の場所で使えるとは思わなかった。
defmacro以外の場所で使われているソース見たとき何してるのかさっぱり分からなかった。
hiccupのselect-optionsでこういうのを書きたいとき
(hiccup.form/select-options [["aaa" "key1"]
["bbb" "key2"]
["ccc" "key3"]] "key2")
すでにoptionのリストがマップで用意されているときに
(def m {:key1 "aaa"
:key2 "bbb"
:key3 "ccc"})
上記のselect-optionsを書くのは2度手間で愚かしいから、
mを3つのベクタ
["aaa" "key1"] ["bbb" "key2"] ["ccc" "key3"]
に展開してくれるマクロってないかな?って探してみたけどなさそうで、
まあ、リストに入った形で作るのは簡単だけど、この場合はリストが邪魔になる。
自分でマクロつくるのも局所的でダサい感じがするので、どうしようかな〜って悩んだんだけど、こんな感じで出来た。
(hiccup.form/select-options `[~@(map (fn [[k v]] [v (name k)]) m)] "key2")
>>494 Schemeとかはリストつくるときに使ったりするけどClojureだとあんまり出番なさそう
Reducer=関数を畳み込んでseqに対する処理のまとまりをつくる
transducer=reduceを再利用するために弄る道具
という認識でおk?
畳み込まれて弄られてみたい
transducerってhaskellの部分関数適用っぽいよね
Prelude> let chiceOdd = filter odd
Prelude> let double x = x*x
Prelude> let doubleSeq = map double
Prelude> doubleSeq [1,2,3,4,5]
[1,4,9,16,25]
Prelude> chiceOdd $ doubleSeq [1,2,3,4,5]
[1,9,25]
Prelude> sum $ chiceOdd $ doubleSeq [1,2,3,4,5]
35
Prelude>
deffooというマクロを作って、ひとつのファイルの中で
(deffoo bar ...)
(deffoo baz ...)
とやると、
・関数 handle-foo-bar と handle-foo-baz
・変数 foo-handlers = {:bar handle-foo-dar, :baz handle-foo-baz }
が定義されるようなマクロを作りたい。
後者は別のマクロを作って(define-foo-handlers)みたいにファイルのどこかに書くことにしてもいいけど
deffooの引数を再び手で列挙しなくていいようにしたい。
こういうのってできる?
>>500 (defn handler-name [exp]
(symbol (str 'handle-foo- (first exp))))
(defn destruct [exp]
[(handler-name exp)
(second exp)
(rest (rest exp))])
(defmacro deffoos [& exps]
`(do ~@(for [exp exps]
(let [[fname args body] (destruct exp)]
(list* 'defn fname args body)))
(def foo-handlers ~(reduce (fn [dict exp]
(assoc dict
(keyword (first exp))
(handler-name exp)))
{} exps))))
>(deffoos
(bar [x] (print x) (print x))
(baz [y] (print y) ))
>((:bar foo-handlers) 1)
11
nil
>((:baz foo-handlers) 2)
2
nil
502 :
デフォルトの名無しさん:2014/08/29(金) 20:01:57.54 ID:ttFFbJAa
>502
コマンドプロンプトに出てきたエラーをコピペしよう
504 :
502:2014/08/29(金) 20:43:54.98 ID:ttFFbJAa
C:\Users\owner\Documents\Lisp\clojure>lein repl
nREPL server started on port 61020 on host 127.0.0.1 - nrepl://127.0.0.1:61020
Exception in thread "nREPL-worker-0" java.lang.NoSuchMethodError: clojure.tools.nrepl.StdOutBuffer.l
ength()I
at clojure.tools.nrepl.middleware.session$session_out$fn__7630.doInvoke(session.clj:43)
at clojure.lang.RestFn.invoke(RestFn.java:460)
at clojure.tools.nrepl.middleware.session.proxy$java.io.Writer$ff19274a.write(Unknown Source
)
at java.io.PrintWriter.write(Unknown Source)
at java.io.PrintWriter.write(Unknown Source)
at clojure.core$fn__5471.invoke(core_print.clj:191)
at clojure.lang.MultiFn.invoke(MultiFn.java:231)
at clojure.core$pr_on.invoke(core.clj:3392)
at clojure.core$pr.invoke(core.clj:3404)
at clojure.lang.AFn.applyToHelper(AFn.java:154)
at clojure.lang.RestFn.applyTo(RestFn.java:132)
at clojure.core$apply.invoke(core.clj:624)
at clojure.core$prn.doInvoke(core.clj:3437)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invoke(core.clj:624)
at clojure.core$println.doInvoke(core.clj:3457)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.main$repl_caught.invoke(main.clj:158)
at clojure.tools.nrepl.middleware.interruptible_eval$evaluate$fn__7569$fn__7582.invoke(inter
ruptible_eval.clj:76)
at clojure.main$repl$fn__6634.invoke(main.clj:259)
at clojure.main$repl.doInvoke(main.clj:257)
at clojure.lang.RestFn.invoke(RestFn.java:1096)
at clojure.tools.nrepl.middleware.interruptible_eval$evaluate$fn__7569.invoke(interruptible_
eval.clj:56)
at clojure.lang.AFn.applyToHelper(AFn.java:152)
505 :
502:2014/08/29(金) 20:45:46.44 ID:ttFFbJAa
at clojure.lang.AFn.applyTo(AFn.java:144)
at clojure.core$apply.invoke(core.clj:624)
at clojure.core$with_bindings_STAR_.doInvoke(core.clj:1862)
at clojure.lang.RestFn.invoke(RestFn.java:425)
at clojure.tools.nrepl.middleware.interruptible_eval$evaluate.invoke(interruptible_eval.clj:
41)
at clojure.tools.nrepl.middleware.interruptible_eval$interruptible_eval$fn__7610$fn__7613.in
voke(interruptible_eval.clj:171)
at clojure.core$comp$fn__4192.invoke(core.clj:2402)
at clojure.tools.nrepl.middleware.interruptible_eval$run_next$fn__7603.invoke(interruptible_
eval.clj:138)
at clojure.lang.AFn.run(AFn.java:22)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
506 :
502:2014/08/29(金) 20:46:25.91 ID:ttFFbJAa
REPL-y 0.3.2, nREPL 0.2.0-beta5NoSuchMethodError clojure.tools.nrepl.StdOutBuffer.length()I clojure
.tools.nrepl.middleware.session/session-out/fn--7630 (session.clj:43)NoSuchMethodError clojure.tools
.nrepl.StdOutBuffer.length()I clojure.tools.nrepl.middleware.session/session-out/fn--7630 (session.
clj:43)
Error loading namespace; falling back to userException in thread "nREPL-worker-1" NoSuchMethodError
clojure.tools.nrepl.StdOutBuffer.length()I clojure.tools.nrepl.middleware.session/session-out/fn--7
630 (session.clj:43)NoSuchMethodError clojure.tools.nrepl.StdOutBuffer.length()I clojure.tools.nrep
l.middleware.session/session-out/fn--7630 (session.clj:43)java.lang.NoSuchMethodError: clojure.tools
.nrepl.StdOutBuffer.length()I
#<Namespace user> at clojure.tools.nrepl.middleware.session$session_out$fn__7630.doInvoke(sess
ion.clj:43)
at clojure.lang.RestFn.invoke(RestFn.java:460)
at clojure.tools.nrepl.middleware.session.proxy$java.io.Writer$ff19274a.write(Unknown Source
)
507 :
502:2014/08/29(金) 20:47:05.82 ID:ttFFbJAa
at java.io.PrintWriter.write(Unknown Source)
at java.io.PrintWriter.write(Unknown Source)
at clojure.core$fn__5471.invoke(core_print.clj:191)
at clojure.lang.MultiFn.invoke(MultiFn.java:231)
at clojure.core$pr_on.invoke(core.clj:3392)
at clojure.core$pr.invoke(core.clj:3404)
at clojure.lang.AFn.applyToHelper(AFn.java:154)
at clojure.lang.RestFn.applyTo(RestFn.java:132)
at clojure.core$apply.invoke(core.clj:624)
at clojure.core$prn.doInvoke(core.clj:3437)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invoke(core.clj:624)
at clojure.core$println.doInvoke(core.clj:3457)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.main$repl_caught.invoke(main.clj:158)
508 :
502:2014/08/29(金) 20:47:31.29 ID:ttFFbJAa
at clojure.tools.nrepl.middleware.interruptible_eval$evaluate$fn__7569$fn__7582.invoke(inter
ruptible_eval.clj:76)
at clojure.main$repl$fn__6634.invoke(main.clj:259)
at clojure.main$repl.doInvoke(main.clj:257)
at clojure.lang.RestFn.invoke(RestFn.java:1096)
at clojure.tools.nrepl.middleware.interruptible_eval$evaluate$fn__7569.invoke(interruptible_
eval.clj:56)
at clojure.lang.AFn.applyToHelper(AFn.java:152)
at clojure.lang.AFn.applyTo(AFn.java:144)
at clojure.core$apply.invoke(core.clj:624)
at clojure.core$with_bindings_STAR_.doInvoke(core.clj:1862)
at clojure.lang.RestFn.invoke(RestFn.java:425)
at clojure.tools.nrepl.middleware.interruptible_eval$evaluate.invoke(interruptible_eval.clj:
41)
at clojure.tools.nrepl.middleware.interruptible_eval$interruptible_eval$fn__7610$fn__7613.in
509 :
502:2014/08/29(金) 21:43:00.05 ID:ttFFbJAa
voke(interruptible_eval.clj:171)
at clojure.core$comp$fn__4192.invoke(core.clj:2402)
at clojure.tools.nrepl.middleware.interruptible_eval$run_next$fn__7603.invoke(interruptible_
eval.clj:138)
at clojure.lang.AFn.run(AFn.java:22)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
user=>
510 :
502:2014/08/29(金) 21:45:44.73 ID:ttFFbJAa
未定義のaを入力すると
user=> a
Exception in thread "nREPL-worker-3" java.lang.NoSuchMethodError: clojure.tools.nrepl.StdOutBuffer.l
ength()I
at clojure.tools.nrepl.middleware.session$session_out$fn__7630.doInvoke(session.clj:43)
at clojure.lang.RestFn.invoke(RestFn.java:460)
at clojure.tools.nrepl.middleware.session.proxy$java.io.Writer$ff19274a.write(Unknown Source
)
at java.io.PrintWriter.write(Unknown Source)
at java.io.PrintWriter.write(Unknown Source)
at clojure.core$fn__5471.invoke(core_print.clj:191)
at clojure.lang.MultiFn.invoke(MultiFn.java:231)
at clojure.core$pr_on.invoke(core.clj:3392)
at clojure.core$pr.invoke(core.clj:3404)
よくわかんないけど、
lein new hoge
してみて動く?
動かないんなら、インストールがいけてないんじゃない?
512 :
502:2014/08/29(金) 22:36:13.28 ID:ttFFbJAa
C:\Users\owner\Documents\Lisp\clojure>lein new hoge
Generating a project called hoge based on the 'default' template.
The default template is intended for library projects, not applications.
To see other templates (app, plugin, etc), try `lein help new`.
と表示されて、フォルダとその中身は生成されました
C:\Users\owner\.m2かC:\Users\owner\.lein の中身一度消した方がよくね?
514 :
502:2014/08/29(金) 23:18:03.96 ID:ttFFbJAa
.leinないのself-installsいがいと.m2を削除後
new hogeで生成されたフォルダを削除してからもう一回すると
C:\Users\owner\Documents\Lisp\clojure>lein new hoge
(Retrieving org/clojure/tools.nrepl/0.2.3/tools.nrepl-0.2.3.pom from central)
(Retrieving org/clojure/pom.contrib/0.1.2/pom.contrib-0.1.2.pom from central)
(Retrieving org/sonatype/oss/oss-parent/7/oss-parent-7.pom from central)
(Retrieving clojure-complete/clojure-complete/0.2.3/clojure-complete-0.2.3.pom from clojars)
(Retrieving org/clojure/tools.nrepl/0.2.3/tools.nrepl-0.2.3.jar from central)
(Retrieving clojure-complete/clojure-complete/0.2.3/clojure-complete-0.2.3.jar from clojars)
Generating a project called hoge based on the 'default' template.
The default template is intended for library projects, not applications.
To see other templates (app, plugin, etc), try `lein help new`.
C:\Users\owner\Documents\Lisp\clojure>
と出ました
hogeの中身は生成されました
>>514 それエラーじゃないので
.m2に必要なライブラリが無いのでダウンロードして実行しましたってメッセージ
.leinが無いはずないのだけど(leiningenが作る)
.leinにはlein self-installの時にleiningenの本体が入る
.m2はmavenのローカルリポジトリ
lein versionだといくつ?
うちは2.0.0で正常動作してる、もしbetaとか入ってるようならlein.batのバージョン設定部分を
SET LEIN_VERSION=2.0.0
とかしてからlein self-installしなおしてみるのも手かも
lein new hoge できたんか!
じゃあ
cd hoge
lein repl
で動く?
だめなら、インストールがいけてないんじゃね?
517 :
502:2014/08/29(金) 23:49:13.63 ID:ttFFbJAa
>>515 「.leinないの」は「.lein内の」のうち間違いです
C:\Users\owner\Documents\Lisp\clojure>lein version
Leiningen 2.4.3 on Java 1.8.0_20 Java HotSpot(TM) Client VM
>>516 C:\Users\owner\Documents\Lisp\clojure>cd hoge
C:\Users\owner\Documents\Lisp\clojure\hoge>C:\Users\owner\Documents\Lisp\clojure\lein.bat repl
(Retrieving org/clojure/clojure/1.6.0/clojure-1.6.0.pom from central)
(Retrieving org/clojure/clojure/1.6.0/clojure-1.6.0.jar from central)
nREPL server started on port 63616 on host 127.0.0.1 - nrepl://127.0.0.1:63616
REPL-y 0.3.2, nREPL 0.2.3
Clojure 1.6.0
Java HotSpot(TM) Client VM 1.8.0_20-b26
Docs: (doc function-name-here)
(find-doc "part-of-name-here")
Source: (source function-name-here)
Javadoc: (javadoc java-object-or-class-here)
Exit: Control+D or (exit) or (quit)
Results: Stored in vars *1, *2, *3, an exception in *e
user=>
こうなりました
>517
動いてね?
519 :
502:2014/08/29(金) 23:58:12.16 ID:ttFFbJAa
>518
newで作成したフォルダ以外の
場所をカレントディレクトリとして起動すると>504
のようなメッセージが表示されます
これで正常なんでしょうか?
Windowsだとleinプロジェクト直下じゃないとダメだったような。
おれのMacだとどこでも大丈夫。
ー>つまりMacを買えってことだ
leiningenすらも使いずらい
息をするのもめんどくさい
起動
java -cp %CLOJURE_HOME%\clojure-1.5.1.jar clojure.main
終了
(System/exit 0)
はじめて見たときは冗談かと思った
>>520 うちのWin8.1+Leiningen2.0.0だと何処でもlein replできた
違いは何処にあるんだろう?
ちなみに
cd c:\
だと書き込み権限が無いってエラーでreplできない
追記
Win8.1環境で
lein upgrade
したら
lein versionは
2.1.2になって
lein replは普通に通った
その後でさらに
lein upgrade
したら
lein versionが
2.4.3になって
lein replの結果
>>502と同様にlein newしたディレクトリ以外では同じエラーが出た
今のleiningenはproject.cljの無い所だとエラーになるかもしらん。
leiningenの使い勝手変えたいならlein.batのVERSION設定で選択するとよいかもしらん
数値(金額)をカンマ入れ表記に変換するコードが必要になって、書いてみたらすごくながったらしくて、もっといい書き方ないかな?って聞こうかと思ったら、Javaで書けばいいんだって思い出した…
(apply str (reverse (apply str (map #(apply str %) (interpose "," (partition 3 3 nil (reverse (str 1234567))))))))
(-> (NumberFormat/getNumberInstance Locale/JAPAN) (.format 1234567))
Ubuntu14.04でopen-jdk-7入れてlein2.4.3でlein replしたらエラー吐いた
github見て2.4.2にdgしたら直ったけど
2.4.4にしないのは原因が不明かつ開発リソースが足りてないかららしい
leinプロジェクト外でlein replしたら出るエラーだから
>>502>>508と同じ症状かも
>>530 win,mac,linux,bsdどのプラットフォームでもproject.clj無いとエラー吐くね
>>2.4.3
つーわけで2.4.2に戻してみた
来たぜ来たぜ来たぜー
新規案件、モバイルデバイス向けソフト兼サーバ必須、そして言語縛り無し!
ラピッド開発で各週統合
しかも開発に割り当てられた人的資源は自分入れて二人のみ、しかも両者ともにClojarianとくれば、もうClojure使うしか
入門ClojureScriptの和訳がイマイチ
プログラミングClojureの後に読んだからかもしれないけど
>>533 個人でやってるの?
それとも小さい会社?
>>533 悪いことは言わない
clojureはプロトタイプまでにとどめておけ
どうしてもというなら、せめてlispでやるべき
長時間多アクセスのclojureサーバは、再帰の最適化がヘボいからコケるぞ
Clojureは再帰使わないでコード書くものじゃないの?
単なるwebサーバーならそんなに再帰つかわないだろ?
再帰使うんなら書籍のプログラミングClojureのフィボナッチ数列のところ読めば十分じゃね?
俺のコードがヘボいからコケるぞ!
clojure でいくつかサーバサイド書いたけど、再起など一度も使わなかった。そのチャンスさえなかった。
意識せずに遅延seqになって困った事ならあったが。
あと、JVM 起動遅くて辛かった。
1万行のコードの中から再帰を削除しなくてもコケない選択肢と、削除しないとコケる選択肢
(この世で最も信頼できない3ヶ月以上時間を隔てた) 俺のコードがヘボくてもコケない選択肢と、ヘボいとコケる選択肢
なぜあえて金のかかる場面で冒険をしたがるのか…
コケるって結局何がコケたの?
最適化がヘボイからコケるってケースがよくわかんない
ネストが深い再帰をしたい場合はプログラミングClojureのフィボナッチ数列のところよく読んだ方がいいが、浅い再帰ならそんなに気にしなくていいと思うが...
まあ、何も分かってないプログラマがrecur使ってたらゾッとするがね。
>>542 WEBサーバでclojureで作ったサーブレット追加してサーバが落ちた経験一覧
・普通に気付かずにヘボ再帰を書いてる -> 表現が素直だから目の前にあっても気付かない
・ページの文字列連結で落ちた -> 差分リストに変更
・よく見たらletfnで再帰になってた -> 見つけるのに4日かかった
・デバッグ情報追加したら落ちた -> デバッグ情報の持ち回りに超頭使う
・clojureがバージョンアップして落ちた -> 原因不明、関数名の扱いの変更が怪しい
・その他、コードの入れ替えに落とす必要あり
それ再帰の最適化関係ある?
バージョンアップ以外は実装してる人間の能力が問題のように見えるんだけど
>>545 SICP和田本から計算機言語の世界に来た人にとってはもの凄く関係あると思われる
>・デバッグ情報追加したら落ちた -> デバッグ情報の持ち回りに超頭使う
>・clojureがバージョンアップして落ちた -> 原因不明、関数名の扱いの変更が怪しい
再帰関係無いじゃん
>・その他、コードの入れ替えに落とす必要あり
Webサーバ立ち上げたままREPLでコード修正して問題なかったと思うが
warにしてTomcatなりに組み込むのは完成してからでいいよね
SICPは俺も好きだし結構読み込んだけど、どこが関係あるのかわかんないな
末尾最適化してくれないとかそういうの?
それこそループで書けよって思っちゃうんだけど(まあ末尾最適化を仕様で必須にしてくれればそれはうれしいけどね)
Scheme脳なら再帰にこだわるのはわかるけど、CLとかClojureとかは再帰使うよりループ使うほうが自然じゃない?
>>544 それバージョンアップ以外は544が悪くね?
>・デバッグ情報追加したら落ちた -> デバッグ情報の持ち回りに超頭使う
これなんか特に
ユニットテストとか負荷試験とかするよね?
>>548 Clojureだと再帰よりも無限リストへ関数適用で結果得方法使う事多いかなあ
loopやrecurは↑に慣れてなかった頃は良くつかったけど、今だとあんまり使わない。
そもそも再帰の最適化は全くしないから遅延シーケンスやrecurを使ってねっていう言語なのに
>>547 今調べたら関数名の束縛方法が変わってて再帰状態のトレースができなくなってた
>>549 負荷試験するたびに、「lispならサクサク行くのにィィィィィ」とうなることうけあい
シーケンス関数の組み合わせでばっかり書くけどな
なんとなく、jdkまわりの話。
openjdkよりoracle jdk/jreの方がいいかも。
oracle jdkはちょっと前にデグレしてたみたいなので、最新版使う。
jdk8はメモリまわりの改善あり、ただし互換性に関しては慎重に。
ibm j9は、メモリ利用効率がいいがメモリでエラー出さず落ちることがある。あとは、あまり使ってる人がいないのでclojure関連でバグあるかも。
オプションの関係もあり、leinから商用環境サーバー起動しない方がいい。
永続的なサービスに向かない作りであれば、webサービスだと定期的にインスタンス再起動して入れ替えする運用が多いね。
たとえば、apacheはプロセス再起動を組み込みでやってる。
railsのunicornもそんな仕組みがある。
jvmの場合は、特にウオームアップ後の入れ替えが良いと思う。
>>543 フィボナッチはスゴいな
もう、にっちもさっちもいかなくなるわ
こらぁ、うごいてんのかぁ!
もっと腰ふらんかい!
CLバリバリ書いてた人が、プログラミングclojureみたいなclojureの作法が書いてある資料読まずに始めると、確かにハマりそうだね。
>>553 CL使うとfranz使いたくなるし、使うと現場でライセンス料がががががになる
100歩ゆずってサーブレットみたいな部品をclojureで作るとしても、商用でサーバコンテナみたいな本体をclojureで作るなんてことはないよね?
>>560 どのようにしてそのように考えたのかをまず述べてくれないだろうか?
商用でclojure使ってるとこ普通にあるでしょ
まあ少ないだろうけど
egisonの非線形パターンマッチができるライブラリない?
作者が移植してるのは、rubyとhaskellだね。
clojureに移植って、どこから持ってくるのが楽なんだろうね。
>>559 懐かしいね、franz。AllegroStore とか AllegroServe ってどうなったんだろう…
http-kitのコードは結構Javaで書いてあったりするしこういう逃げ道があるだけでも全然実用的では
core.asyncとchannelがイマイチしっくりこない
分かりやすいチュートリアルとかあったら教えてください
なぜアクターモデルをデフォルトにしなかったのか…
>>571 schemeとは別の考え方で作られてるからってのはリッチがどこかで書いてたけど。
lispの資産を移行しながら勉強しようと思ったら、ドット対がなくていきなり挫折しかけてる状態
パターンマッチングプログラム作るときに不便すぎる
え?ドット対がないの?
あらら
じゃあ(cdr l)を(cadr l)に書き換えなきゃね
clojureつかjavax.swingを完全なemacsバインドにするのって凄いめんどくさいのね。
cdr もないじゃないか
578 :
デフォルトの名無しさん:2014/09/12(金) 22:17:52.66 ID:F2dOTuLl
car,cdrって悪しき慣習だったからばっさり切ってくれてよかった。
cons で非リストを対にしたいんですが、どうしたらよいでしょうか
cons 1 '(2) はできる
cons 1 2 はできない
consが返すのはリストじゃなくてシーケンス
まずはリストとシーケンスの違いを勉強しておいで
リストやシーケンスじゃなくて、対が欲しいのですが、どうすればよいでしょうか
代用するのはよいですが、できるだけ一般的に行われている方法を知りたいです
一般的も何もclojureに対がないような
>>581 (defn pair [ f s ] [ f s])
(let [p (pair 1 2)]
(println (first p))
(println (second p)))
じゃ駄目なの?
>>583 (pair 1 2) が()やnilから構成されるリストやベクタではなく、 (pair 1 ()) が '(1) と同値になるような pair が欲しいです
lisp の . や、 prologの | みたいな演算子です
ゆにふぃケーションのプログラムを作っていて、
(1 2 3 4) を (pair x y) にマッチさせたときに、(y . ()) と (2 . (3 . (4 . ())) ではなく、 y と (2 . (3 . (4 . ())) 全部をマッチさせたいのですが、
()から構成したときだけリストと同値になる対やタプルがないとかなり面倒なことになりそうです
>>584 シーケンスでそういう構造つくればいいだろ
ドット対がどんな構造してるか理解してれば簡単だろ?
最終的に作りたいのがprologのコンビネータだとすると、新しいconsシークエンスは作れてもそれをリストのように使えるようにするのはむつかしい
lispをそのまま移行するわけにはいかぬ
consモドキ構造とリストを相互変換できるようにしとけばいいだろ
すみません
(defn a [n]
(if(<= n 0) 0 (b (- n 1))))
(defn b [n]
(if (<= n 0) 0 (+ (a n) 1)))
これ↑を test.clj に書いて (load "./test") や (load-file "./test.clj") を実行すると エラーになります
b の位置を入れ替えて保存したあとにもう一回ロードするとエラーは消えます
2回目以降は、replを再起動するまではエラーはでません
replを起動するたびにこれをやると面倒なのですが、みなさんはどうしてるのでしょうか
>>588 プログラミングClojureを読んだほうがいいぞ
Lispやってた人がそのまま突き進むといろいろ嵌る
翻訳してるのGaucheの人だしCLとかSchemeから移ってくる人には向いてるかも
やっぱり見づらいです
(def db7
(list
(list (mlist "append" NIL "Ys" "Ys"))
(list (mlist "append" (mcons "X" "Xs") "Ys" (mcons "X" "Zs"))
(mlist "append" "Xs" "Ys" "Zs"))))
(def q7 (list (mlist "append" "X" "Y" (range 1 7))))
user=> (prolog-test q7 db7)
((append.(X.(Y.((1.(2.(3.(4.(5.(6.mNIL)))))).mNIL)))))
#{X Y}
ans: ({X mNIL} {Y (1.(2.(3.(4.(5.(6.mNIL))))))})
ans: ({X (1.mNIL)} {Y (2.(3.(4.(5.(6.mNIL)))))})
ans: ({X (1.(2.mNIL))} {Y (3.(4.(5.(6.mNIL))))})
ans: ({X (1.(2.(3.mNIL)))} {Y (4.(5.(6.mNIL)))})
ans: ({X (1.(2.(3.(4.mNIL))))} {Y (5.(6.mNIL))})
ans: ({X (1.(2.(3.(4.(5.mNIL)))))} {Y (6.mNIL)})
ans: ({X (1.(2.(3.(4.(5.(6.mNIL))))))} {Y mNIL})
"end"
leiningen 使ってて、本番用のjar作りたいときに、設定ファイルとかを本番用に置き換えたりするには、それようのシェルを書かないとダメかな?
それかant使うとか。
基本、leiningenってビルドスクリプト書くようにはできていないよね?
Clojure版SICP成功しますように
>>595 Richは否定的じゃなかった?
SICPはプログラミングの概念を学ぶものだからSchemeみたいなプリミティブな言語使うのが適してるとか言っていたような?
リンク探したけど見つからなかったのでうろ覚えなんだけど
僕は、SICPはプログラミング言語の本じゃなくて、あれはプログラミングの本なんだと思ってる。
本の中でSchemeを使っているのは、アトミックなプログラミング言語だからなんだ。
ラムダ計算、末尾再帰、継続を使った抽象制御、抽象構文(マクロ)、可変状態など。軽量で、かつ十分だ。
>>595 ドット対がないんだけど、どうすんだろうか
キャー!
ないの?
キャ!
doted pairsがないとかcar,cdrがないとかClojureってcellsが基本じゃないの?
エヘヘ
セルがいなけりゃ天津飯でも最強になれるぜ
リストぉーふぁーっく
基本データ型として用意されてないので、自分でデータ構造を定義して使う。
女ができて
Lispに興味があると言うから
winタブに入っていたrepl.scmをみせた。
式の評価関数は
(eval-sexp sexp table)
すると
「変態!」
と言われて立ち去られてしまった
な、なんでたぁ!!
そりゃあれだwindows使ってたからだろ
>>606 Ubuntu14.04x86でlein upgradeして試したら直ってた
クロージャーは苦労じゃと思ったことはないの?
go clojure tar
ドット対ないの、困らないのる
のらない
ドット対がないと過去のlisp資産を使えないので困る
>>613 その代わりJavaの資産を使えますしおすし。
java APIは、資産か負債か…
Mavenのセントラルリポジトリから色々引っ張ってこれるから
超便利なんだけど…
lein ring uberwarしてできたwarファイルをTomcatに渡すだけでマジで動くのこれ?
だとしたら便利過ぎる
Tomcatなんてダサいものに入れる必要ないぜ
lein uberjar して java -jar すれば組み込みのJettyが動く。
マジで楽。
>>619 良くできてるねー
でもp2とかが保存した古いdatの受け口とかないのかな?
あれば移行できるんだけど。
>>620 ありがとうございます〜
自分も長い間rep2や公式p2を使っていたので、
datのインポート機能は付ける予定です。
>>621 h2sqlにdat入れてるみたいだからここを他のDB使えたり、過去datのmigrationツール呼び出しオプションとか有ると凄いうれしいです。
自分もclojureで同じような物作ろうとしたけどjsとcssのデザインが死ねるのであきらめたから、UIがこれだけ良くできてる所みるととっても有り難いです。
githubで公開とかあるともっとうれしいけど、binaryでも過去datのimportができれば全然問題ないレベルというか出来過ぎな感じで凄いわ
注文があるとするとお気に入りスレとスレの殿堂みたいにスレ終了後のdatの価値付けがあるといいなぁ(p2の機能ね)
>>622 もともとHerokuで動かすつもりだったので、PostgreSQLには
対応する予定です。他のDBもぜひ試してみたいですね。
ほかの機能もいずれ実装する予定です。オプソにするかどうかは
新datの仕様次第ですね。
GUIは昔から興味がある分野なので頑張ってますw
HiccupのインラインJavaScriptを多用したかなりアクロバティックな
実装になってます。
後このスレ的にはJettyの代わりにHTTP Kitを使ってるのが目新しいかも。
入れ替えの手間はほとんどかからない上にJettyよりだいぶ速くて
WebSocketにも対応していて、いいことづくめですw
>>623 ソシャゲサーバ作ってるのでhttp-kitのwebsocketは次に使う予定だったりします。
でもコネクション維持できない時あるんでそれが凄い困る>>モバイルプラットフォーム
頑張ってくださいね。
lispでCUIの2chブラウザ作ったことがあるから、移行できると思ったらドット対がなくて挫折した
>>624 いいな〜 自分もClojureでもうちょっと規模の大きな開発をしてみたい…
ブラウザのほうはどんどん機能追加してるのでご期待くださいw
>>625 検討しておきます〜
もう移行しなきゃいいじゃん?
629 :
デフォルトの名無しさん:2014/10/03(金) 10:07:36.28 ID:AV4e/r+l
Clojure for Machine Learning買った人いる?
>>630 ググったら、pdfが出てきて、292ページ全部タウンロードできたけど、今ってpdfで配ったモノをわざわざ売るのが流行ってるの?
Clojure Gazzetに掲載されてたUnity3Dでclojure動かすarcadia使ってみたんだが楽しすぎ
RHの記事読んでみてもreducersとtransducersがいまいち分からん
他のTutorial見たらidenty function(恒等関数?)とかmonoidとか出てくるしLYHGG
でも読めばいいの?
http://clojure.org/transducers ;; reducing function signature
whatever, input -> whatever
;; transducer signature
(whatever, input -> whatever) -> (whatever, input -> whatever)
transducer は、reducing functionを受け取ってreducing functionを返す関数みたいになってる。
正直なんかもう java やってる気になってきて嫌。
Sublime2使ってるが、フリーズしすぎで萎える。IntelliJに移行しようか迷い中。
もしかしたらST3は良くなっているのかも知れないが、
なんか開発体制が不安なのでいずれにしろ乗り換えたい。
LightTableを使ったことが無いんだけど、ガチの開発に使える感じ?
まあ、ガチとは言ってもREPLとユニットテスト起動とgitインテグレーションが
あればいんだが。
LightTableはClojureScriptのREPLが気に入った。
っていうかAustinが辛い。
>>638 プラグインが悪いんじゃないの?
Sublime2も3も使ってるがフリーズなんてしたことない。
LightTableを0.7にアップデートしたらカッコの自動補完してくれなくなっちゃいました。
instareplで「(」 をいれたら自動的に 「)」を入力してくれるようにしたいのですが、、
あれなくなったんだ
嬉しいニュースだ
自動補完に戻して欲しい
>>641 ##0.7.0
* CHANGED: parens are not auto-closed by default anymore, add `[:app :lt.objs.settings/pair-keymap-diffs]` to your behaviors to get it back.
↑これでデフォルトじゃ閉じなくなって
##0.7.1
* FIX: Give the auto-close keymap behavior a description: `Editor: auto-close parens/brackets/quotes/pairs`
0.7.1でなおってるみたいだけど↑これじゃね?
よく見たら僕のは0.7.2になってる。
0.7.1で治ってるの?0.7.2で元に戻った??
>>645 うちのは0.7.0飛ばしちゃってた後に0.7.2入れたけど括弧入力の補完効いてるから0.7.0入れたときにpreference設定書き換わってないか見てみたら?
647 :
礼:2014/12/01(月) 18:25:36.09 ID:tHxJROnc
clojureを勉強していくためにslimeってやつを使いたいのだが、環境をつくるのがうまくいかない。lispって詩的だと思ったから勉強しようと思っています。初心者。
LightTableおすすめ
649 :
礼:2014/12/01(月) 21:30:21.30 ID:tHxJROnc
LightTableってやつダウンロードしてみた、、
メモ帳 & コマンドプロンプト
マジオススメ
651 :
デフォルトの名無しさん:2014/12/02(火) 00:45:27.92 ID:S/rHt4Vl
652 :
礼:2014/12/02(火) 07:47:56.28 ID:OOetDlpf
>>651 あ、ありがとうございます。
自分、初心者すぎて、遊べる段階まで行くやり方がわからない、、。
でも、とりあえず、LightTableで
「Instarepl: open a clojure instarepl」って
コマンドを選択したらclojure試せるみたいなので、それでやってみます。
>>652 emacsでslime系試したいなら
clojure cider で検索すると良いよ、emacs24の導入からcider入れるまで解説とか結構あるし(slime clojureとかritzは導入辛いからくじけやすい)
LTの方がモダンだけどreplの使い勝手はemacs系の方が良い感じ。
654 :
礼:2014/12/02(火) 16:51:25.82 ID:l88HCvSs
>>653 ありがとうございます。
少し検索してみました。
http://mizondev.net/d/20131108のページに、
emacsのpackage.elというのを使ってやってみようとして
M-x package-install ciderと打ち込んだら、
no machと出てきてできなかった。
M-x package-ilist-packagesで
リストみることができるみたいだから、
見てみたら、ciderというのがなかったです
やっぱり、TLかなあ、
655 :
電波いっぱい:2014/12/02(火) 18:22:53.48 ID:mRxW3cCO
>>654 パッケージのリボジトリにmarmaladeを追加しないとでてこないよ。
melpaの方はsnapshotが入っているからはじめは使いにくいかも。
リボジトリの追加のしかたはくぐってください。
656 :
礼:2014/12/02(火) 21:53:42.09 ID:es1g8IZo
>>655 うーん、うまくいかない、ちょっとくやしいです、
多分、
(require 'package)
(add-to-list 'package-archives '("melpa" . "
http://melpa.milkbox.net/packages/"))
(add-to-list 'package-archives '("marmalade" . "
http://marmalade-repo.org/packages/"))
(package-initialize)
というのを~/.emacs.d/initsというところに書き込めばいいんだとおもう。
~/ってどういう意味なんだろう、
自分はMacのターミナルを使っているんですが、
そこで、emacs .emacs.d/initsとうって、
そこに上のやつを書き込んだのだけれど、
それでは、うまくいかない、、
"~/" ってのはユーザのホームディレクトリ。
(expand-file-name "~/")
を *scratch* バッファなんかで eval すれば絶対パスを返してくれる。
それと、 ~/.emacs.d/inits ではなくて ~/.emacs.d/init.el だと思う。だから、
$ emacs ~/.emacs.d/init.el
とすればいいはず。
>>656 ~/はターミナル開いたときのhomeディレクトリ
普通だと
/Users/<あなたのアカウント名/
659 :
礼:2014/12/02(火) 23:34:45.34 ID:es1g8IZo
>>657>>658 教えてくれてありがとうございます、、
たすかります。
えーと、$ emacs ~/.emacs.d/init.elとうって、
そこに
(require 'package)
(add-to-list 'package-archives '("melpa" . "
http://melpa.milkbox.net/packages/"))
(add-to-list 'package-archives '("marmalade" . "
http://marmalade-repo.org/packages/"))
(package-initialize)
を貼付けてみました。
そしてM-x package-install sider
としてみたのですが、やっぱりうまくいかない
siderは諦めたほうがいいっぽい、、
common lispもやりたいなとおもっています、
clojureとくらべて、どうですかね、、
>>659 sider じゃなくて cider だよ!w
>>659 その状態でpackage-list-packagesするとcider-0.x.xってのがlistに出るよ
662 :
電波いっぱい:2014/12/03(水) 14:12:04.41 ID:xmz4UdFc
>>659 >>661 init.elを作っただけだと読んでないから読み込ませる。emacsを再起動するのが楽。
また、その設定だとmelpaのが出ちゃうから、melpaは入れない方がいいと思う。marmaladeだけ。
663 :
電波いっぱい:2014/12/03(水) 14:28:44.52 ID:xmz4UdFc
>>659 CLはマルチパラダイムだから、ほんとに何でも作れるし、どのようにでもかける。
でも、新しめの日本語の情報が少ないし、何でも「簡単に」できる訳ではない。
Clojureは、かなり関数型に振っていて、「Clojureならこう書く」みたいなものがあるので、本を一通り読んで理解すれば、Webアプリとか使えるものを作れるようになるのは早い。
裏にJavaがあるので、日本語の情報を含むそれらを、利用できるのも大きい。
664 :
礼:2014/12/03(水) 19:57:13.95 ID:lWmi25JI
>>660>>661>>662 おー、それが、何度試してみても、できないです、、
siderじゃなくciderでやっても、
package-list-packagesでリストを探してみても、できない。
$ emacs ~/.emacs.d/init.elで
(require 'package)
(add-to-list 'package-archives '("melpa" . "
http://melpa.milkbox.net/packages/"))
(add-to-list 'package-archives '("marmalade" . "
http://marmalade-repo.org/packages/"))
(package-initialize)
を書き込んでも、それを消しても
package-list-packagesのリストが変わらないです。
多分、書き込んだとき増えてなければおかしいのに。
(require 'package)
(add-to-list 'package-archives '("marmalade" . "
http://marmalade-repo.org/packa\ ges/"))
(package-initialize)
にしてみてもできなかったです、
おそらく、このコンピュータは、自分が狂っていないと信じ込んでいる精神病の患者みたいなコンピュータなんだろう、、
だからciderをやろうとする気持ちは三階の病棟に閉じ込めておいたほうがいいかも。
三階は二階の患者より酷い人が入るところ。
もちろん、そう診断する自分はヤブ医者なんですが、コンピュータを診断する医者としては。外科医としても。そもそも自分はどんな種類の医者でもない。
自分自身の精神科医ですらないとおもう。そんなに上手く精神的に生きている気がしない、、余計なことを書いてしまった。読書します、、
lighttableでreadって使えないのん?
うちだとこんなんだな
(require 'package)
(add-to-list 'package-archives
'("marmalade" . "
http://marmalade-repo.org/packages/"))
(package-initialize)
(when (not package-archive-contents)
(package-refresh-contents))
Emacsスレで聞いてみるとか
668 :
礼:2014/12/04(木) 02:06:25.10 ID:EifX8RrY
>>655 >>656 >>667 うわー、多分できた、
いつもはinit.elのところ開いたら一度しめてそれからターミナルでemacsとうってインストールしようとしていた。
でも今回はinit.elを開いたままで、
(require 'package)
(add-to-list 'package-archives
'("marmalade" . "
http://marmalade-repo.org/packages/"))
(package-initialize)
(when (not package-archive-contents)
(package-refresh-contents))
を貼って、M-x eval-current-bufferとうって
M-x package-install ciderとやったらなんかciderを読み込んでいるみたいになったよ、、
>>668 cider入ったらleiningen管理のプロジェクトの中でcljファイル(project.cljでもいい)開いてからC-c M-jでreplが開くよ!
670 :
礼:2014/12/04(木) 19:53:34.22 ID:ujZTdShy
>>669 leiningenというのがどういうものかよくわからないけど、
とりあえず、lein new sampleとやって
emacsで、M-x cider-jack-inってやったらできるようになった
よかった、、
けど、なぜかC-c C-jでははじめられなかった。
671 :
礼:2014/12/04(木) 19:55:04.23 ID:ujZTdShy
あ、C-c M-j、、
672 :
電波いっぱい:2014/12/04(木) 21:50:43.67 ID:gxSGbnnh
>>668 >いつもはinit.elのところ開いたら一度しめてそれからターミナルでemacsとうってインストールしようとしていた。
でも今回はinit.elを開いて
これって、init.elの場所が間違ってるんじゃない?
もしくは、保存しないで閉じてるとか?
673 :
礼:2014/12/05(金) 19:26:25.51 ID:x1r9cuUq
>>672 ターミナルでemacs ~/.emacs.d/init.elと
うったらnit.elが開けるとおもっているんですが、、
それで間違っていたら開けていないかもしれない。
保存は、
開いてC-x C-sで保存?してC-x C-cで脱出してます、、
674 :
礼:2014/12/06(土) 23:49:38.91 ID:i3Rn7LUz
開発環境が最小の状態に慣れておかないと、マシン替える度にイライラする
そんな私もsurfaceproでメモ帳コマンドプロンプトです
676 :
礼:2014/12/08(月) 18:07:29.67 ID:5xrTpuJG
>>675 本を読むときもそういう習慣は役に立ちそうですね。
closure、自分はネットの情報だけで勉強しようと思っています、、
でも、やっぱり、本買わないとだめなのかな。
他に欲しい本がたくさんあって、お金がない、、
よし、体売ってこい
つるはしを振るうんだ
チンポるるうなよ
678 :
礼:2014/12/08(月) 20:56:36.65 ID:5xrTpuJG
開発環境ポータブルに出来れば、usbストレージやクラウドにというのもあり
ライブラリが膨大だからカタログてきな参考書に目を通しておいたほうがいいね。
できるだけ新しい情報で
681 :
デフォルトの名無しさん:2015/01/02(金) 08:28:07.96 ID:40BDq3Bs
質問です。
defrecordでレコード型を作ってprotocolでメソッドを追加する事でjavaのクラス相当の物が作れるのはいいんですけど
コンストラクタってどうするものなんですか?
(->xxx 〜) だとすべてのデータを直接指定しないといけないし。
型の内部に持たせるのではなくて、別関数として定義するやり方が一般的なんでしょうか?
(defrecord YourReord [ v1 v2 andmore])
(YourRecord. 1 2 3) => { :v1 1 :v2 2 :andmore 3}
で普通にレコード生成できるっしょ?
683 :
デフォルトの名無しさん:2015/01/03(土) 16:53:30.80 ID:nLUbwEH9
>682
何か色々勘違いしてました。ありがと。
ついでにさらに質問で。
下記だと問題なくassocが使用できるけど、
(let [d [0 0 0 0 0]] (assoc d 0 999))
=> [999 0 0 0 0]
下記はエラー。
(let [d (take 5 (repeat 0))] (assoc d 0 999))
=> エラー(lazySeqをキャスト出来ない〜)
エラー内容からrepeatで作成した遅延シーケンスはassocを使えないってことらしいけど
takeで取り出しても遅延シーケンスってこと?
5つ位のシーケンスなら直接記述してもいいけど、もっと大きいサイズで
assocが使えるようなシーケンスを作成する場合はどうしたらいいんでしょうか?
vec使ったら
>>683 assocは基本mapに使う
vectorへのassocは (assoc vector-data index value)
listへは使えない
なので (take n somting)の結果がlistなのでエラーになる
もしどうしてもtakeした結果に使いたいなら
(let [d (take 5 (repeat 0)] hogehogeでなく
(let [d (vec (take 5 (repeat 0))] (assoc d ...
にしないと駄目
686 :
電波いっぱい:2015/01/07(水) 13:25:19.06 ID:RbdNG2kP
>>683 シーケンスにassocを使いたい理由がわからない。
多分、方法が間違ってる。
ringのwrapper経由でurlのparamとかpostのparamをキーワードにしてるけど、これって外から延々違う文字列でquery stringのnameを食わせるとサーバ落ちたりしないのかな?
Clojureのkeywordってstaticな内部辞書に載っちゃうのでgcされないよね?
(doseq [id (range 1000000)]
(keyword (str "hoge" id)))
(System/gc)
ってやるとkeywordで作ったメモリは帰ってこないから延々やれば落とせるんだろうけど(↑ので8MByte位食う)
8M潰すために100万回httpリクエストされる方が非道いと言う事なんだろうか?
>>687 (System/gc)でガーベッジコレクタが確実に動作するとは限らないぞ。
Javascriptのソースを難読化するためにClojureScriptで書き直しはじめたんだけど、
ClojureScriptの難読化って直感的には結構なものだと思うんだけど、みんなはどう思う?
:optimizations :advanced で読みづらくなってる上に、Clojureコードをコンパイルしたjavascriptコードだから、コンパイルのルールを分かってないとすごく読みづらくなると思うし
難読化なんて意味ない事しない。
>>687 キーワードのテーブルはWeakReference使ってるからGCされるで
ChromeAppとかスマホアプリで、プロダクトを作ろうとすると必要になるでしょ? -> 難読化
>>690 ソースコードを納品するときには難読化してる
>>695 本当にそんなところあるのか…誰も得しないような気がする
難読化なんて大した効果はない
ていうかクズプログラムなんてわざわざ解読されないよ
価値あると思われればたかが難読化なんてプププだし
ま、それでも依頼もあって、うん十年前はn88-BASICソースを難読化したけどな
わははははは
馬鹿には読めないソースにするには
継続を使った末尾再帰で書くのがいいな
あはははははは
2000年問題のときに、コードの難読こそが給料の素だと経験により理解した
仕事なら複数人でするから難読化などあり得ない。
ソースで納品してメンテナンスを他に回されても
どうせ(ゴミのようなソースになって)戻ってくるので
難読化しない。
勿論引き継ぎはメンテナンス契約じゃなくて新規契約でw。
趣味でプログラムするならメンテナンスを自分でするから
難読化などあり得ない。
どちらにしろ難読化する必要がない。
ソースの難読化はあくまでも納品時です
専用のスパゲッティ化スクリプトもきちんと用意してます
移行までやったら、どうせソースなんて見やしないので、問題が起きるまでそのままです
酷いときは、納品したコードすら紛失してます
一方、趣味や社内のコードは極限まで読みやすくします
難読化する目的はたった一つ
「コードをいじらせない」です
難読化が必要なのってAndroidのアプリコード位じゃないのけ?(カジュアルパクリ防止とアプリサイズ縮小にしかならんけど)
Web用のJSで難読化必要ってのはカジュアルコピーして欲しくないってだけならcljsでadvancedな最適化かければ十分じゃないの?(まるパクはどうしようもないのは難読化と関係ない)
>>700 良く其れで金もらえるよね、難読化されたソースなんて納品したら普通はRejectされるよ?
SQLインジェクションで開発会社が3割賠償責任おわされた判例でてるし、難読化して事故ったら全責任おわされても文句言えないんじゃないかな?
>>701-702 Cとlisp系の良いところは正しく難読化できる点だから、難読化と正しさは関係ない
そもそもSQL文やHTMLが壊れる理由は、「納品先が勝手にコードをいじるから」だし
我々のところはソースをソースのままスパゲッティにしてるからまだいい方で、酷いところ(大手)になると、ソースコードにアセンブリ埋め込む形式の難読化してる
SQLインジェクションってSQL壊れるのとはなんの関係もないような・・・。
ソースにアセンブリ埋め込むのって高速化のためには普通にするような気がするけど、
難読化のためにすることもあるものなの?
だから勝手に文字列をエスケープする関数を外すなとあれほど…
>ソースコードにアセンブリ埋め込む形式の難読化してる
ここ嗤うところですよね
clojureは知らんけど、
CLだとマクロを全部展開しちゃえば読む気も起きなくなるという意味で難読化みたいなの昔読んだな
改行全部削除するだけでも効果的
いまiOSとAndroid(とchromeアプリ)でアプリ作ってて、
極力楽しようとしてWebView主体で作り始めたからJavascript難読化しないといけなくなったのです。(WebViewで作るのは結局良くないといまは思いますが・・・)
iOSやAndroidだとJavascriptファイルは丸見えになるので、部分的にでも丸パクリされたら嫌だなと思って。
まあ、ClojureScript初めてやってみて、最初はDOM操作とか苦労したけど、core.async を使って非同期処理を同期処理のようなコードで書くやりかたはすごく面白かった。Javascriptのコールバック地獄にはうんざりしてたから
>>709 Javaとかclojureなら、オブジェクトをシリアライズすればいいかと
>>710 Androidでシリアライズしたオブジェクトでアプリを動かすのって面白いアイディアですね。思いもよらなかった。できるんだろうか・・・
とはいえ、Webviewで動かすjavascriptはファイルに書いとかなきゃいけなくて、このファイルはアプリのアーカイブを展開すると丸見えなんですよ
でもシリアライズしたオブジェクトを使うためのクラスファイルが必要になるから、どちらにせよソースは必要ですね
>>711-712 むしろ、シリアライズオブジェクトを展開するソースはきちんと公開してオープンで開発した方がよいかと
デシリアライズしたオブジェクトを使うためにはそのオブジェクトのクラスって必要なかったでしたっけ?
クラスの有無よりもクラスの同一性の方がやっかいだった記憶がある
Boot使ってる人いる?
Clojure Gazzetの記事で見たけどいまいち何が変わるのかがわかんないので困ってる
Clojureで作り込みしたプロダクトにswankサーバ同封してるせいで利点が見えないっていうか
bootは、フロントエンドのツールチェインが多いjsみたいな、cljs環境を意識して作ったとなんかで見た。