5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  
レス数が950を超えています。1000を超えると表示できなくなるよ。

【Lisp】プログラミング言語 Clojure #3【JVM】

1 :デフォルトの名無しさん:2013/09/28(土) 11:03:28.38
JVM上で動作するLisp方言「Clojure」のスレ。

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

前スレ:
【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/

467 :デフォルトの名無しさん:2014/08/15(金) 15:20:20.29 ID:qWbEfk/6
>>466
どの言語であっても、とりあえず動いていたら、その機能自体のソースコードには手を入れたくない

468 :デフォルトの名無しさん:2014/08/15(金) 22:20:40.43 ID:TIrh0e3z
>>467
どこの発展途上国の整備士だよwww

469 :デフォルトの名無しさん:2014/08/15(金) 22:24:42.21 ID:qWbEfk/6
>>468
鉄道の信号インフラで40年前に書いたアセンブラがいまだに現役で稼働してるのにメンテできる人間が引退してしまった国の整備士です

470 :デフォルトの名無しさん:2014/08/15(金) 22:57:30.63 ID:8BWzrSgf
>>463
どういう状態とかコードでその機能使いたいのかイマイチわからん。
object指向言語の場合インジェクションとかで必要になるケースはあるけどclojureでそういう事する必要性感じたこと無いんだが。

471 :デフォルトの名無しさん:2014/08/17(日) 16:50:12.38 ID:Zw9zZO1f
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版には書いてなかったとおもうんだけどなぁ

472 :デフォルトの名無しさん:2014/08/17(日) 17:17:04.64 ID:Zw9zZO1f
↑調べたとところ、無理でした。
マクロのマクロを書かないとダメかも

473 :デフォルトの名無しさん:2014/08/17(日) 21:45:39.55 ID:fVh2eGMw
http://d.hatena.ne.jp/sy-2010/touch/20110408/1302243154
これは、参考になるかな?

474 :デフォルトの名無しさん:2014/08/17(日) 21:58:50.26 ID:fVh2eGMw
あとは、defmacroではなく、defnぐらいじゃダメなん?

475 :デフォルトの名無しさん:2014/08/18(月) 02:55:55.46 ID:2INT0ULh
マクロはコンパイル時に処理されるのに引数のconditionの内容は実行時にわかるんだからムリじゃね

476 :デフォルトの名無しさん:2014/08/18(月) 07:55:45.78 ID:Zm5JvuSQ
conditionが定数って事かと思ったけど、それなら悩むはずもなく

477 :デフォルトの名無しさん:2014/08/18(月) 09:17:10.73 ID:xQ9PYIZO
結局ほとんどの場合コードは手に入るから、改変するのがいいのか、、、
それだと、その後のセキュリティ対応とかバグフィックスとか、自分で追従してく必要があるから現実てきじゃないけど。
望む挙動するような柔軟性を実装してp-r するのが今の流れなんだろうな。

478 :デフォルトの名無しさん:2014/08/18(月) 10:04:47.48 ID:FxPIiMhs
え、deftemplate二つ作って関数で振り分けすれば済む話じゃないの…
使ったことないから分からんけど

479 :デフォルトの名無しさん:2014/08/18(月) 13:13:34.45 ID:iY7TED8z
deftemplate複数だと重複部分がいやなんですよ
あ、そうだ。テンプレートを入力してテンプレートをはくdeftemplateがあればいいのか!フィルターみたいにつかう

480 :デフォルトの名無しさん:2014/08/18(月) 14:16:58.49 ID:2INT0ULh
重複が嫌ならマクロを使おうと思ってしまうlisp脳

481 :デフォルトの名無しさん:2014/08/19(火) 01:55:21.95 ID:aPIs3Yjx
>>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"))

482 :デフォルトの名無しさん:2014/08/27(水) 00:12:03.04 ID:VHuSWHvx
http://blog.cognitect.com/blog/2014/8/6/transducers-are-coming

読んでみたけど何のことやらさっぱり
transform + reducer で transducer なのはわかったけど

483 :デフォルトの名無しさん:2014/08/27(水) 01:46:11.68 ID:NgR5SA5u
Understanding Clojure Transducers Through Types
http://conscientiousprogrammer.com/blog/2014/08/07/understanding-cloure-transducers-through-types/

Clojure's Transducers are Perverse Lenses (self.haskell)
http://www.reddit.com/r/haskell/comments/2cv6l4/clojures_transducers_are_perverse_lenses/

型が決まる場合に限定すると、こういう説明が出来るらしい。
それはそれで前提知識が必要だけど。

484 :デフォルトの名無しさん:2014/08/27(水) 23:08:38.23 ID:13naRB3B
Clojure というか、関数型というか、とにかく副作用の無い関数と、変更不可の value を使ったプログラミングは楽しいんだけど、いざ、ruby とか perl とかの一般的な変数を変更しながら適当に組める世界へ戻ると、あー、楽だわーってなる。

Clojure はなんか、俳句とか短歌とかそういう制限内での表現を楽しむようなそんな感覚なんだよね。もちろん超個人的な印象でしかないチラシの裏だけど。

拙者に才能が無いだけでござるかwww否定できぬwwww

485 :デフォルトの名無しさん:2014/08/28(木) 06:24:50.44 ID:dvSjenwP
Haskellみたくガチガチじゃないんだから適度にdefればいいよ。
Clojureは凄く楽だよ

486 :デフォルトの名無しさん:2014/08/28(木) 10:17:58.59 ID:TNwY21bF
reduceって畳み込みのことだよね?

487 :デフォルトの名無しさん:2014/08/28(木) 17:53:40.70 ID:z8VcNRtv
副作用なしでやろうと思っても、配列の要素とか普通に変更されるしな…
変更不可の配列くらいデフォルトで用意してほしかったり

488 :デフォルトの名無しさん:2014/08/28(木) 18:12:09.74 ID:Gw1dAD8r
>>487
javaの生配列や生要素食わせたらそりゃそうできるのは普通の事じゃんよ

489 :デフォルトの名無しさん:2014/08/28(木) 20:23:21.88 ID:EjGlzjxq
配列なんてめんどくさいもん、パフォーマンスが必要でもない限り使いたくない

490 :デフォルトの名無しさん:2014/08/28(木) 20:40:22.09 ID:z8VcNRtv
>>489
数学の記述をそのままコーディングしたいときに使いたい

491 :デフォルトの名無しさん:2014/08/28(木) 20:44:38.20 ID:ZFv6krbe
>>486
yes

492 :デフォルトの名無しさん:2014/08/28(木) 20:50:22.93 ID:ZFv6krbe
http://www.slideshare.net/mobile/mikeranderson/2013-1114-enter-thematrix
https://github.com/mikera/core.matrix

行列計算のためにイミュータブルな配列用意するって他の言語でもあまり聞かないような。

493 :デフォルトの名無しさん:2014/08/28(木) 20:55:32.77 ID:ZFv6krbe
無いは嘘だな。使われないといった方が正しいか。
core.matrixだとイミュータブル、ミュータブルな演算があった。

494 :デフォルトの名無しさん:2014/08/28(木) 23:49:46.31 ID:q1Nilail
構文クオート`
アンクオート~
スプライシングアンクオート~@
がdefmacro以外の場所で使えるとは思わなかった。
defmacro以外の場所で使われているソース見たとき何してるのかさっぱり分からなかった。

495 :デフォルトの名無しさん:2014/08/29(金) 00:25:56.65 ID:gwJnPSQu
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")

496 :デフォルトの名無しさん:2014/08/29(金) 00:54:43.30 ID:ZNTD6qKu
>>494
Schemeとかはリストつくるときに使ったりするけどClojureだとあんまり出番なさそう

497 :デフォルトの名無しさん:2014/08/29(金) 00:59:13.84 ID:n2eqBKYr
Reducer=関数を畳み込んでseqに対する処理のまとまりをつくる
transducer=reduceを再利用するために弄る道具
という認識でおk?

498 :デフォルトの名無しさん:2014/08/29(金) 10:02:46.86 ID:FcRVFksi
畳み込まれて弄られてみたい

499 :デフォルトの名無しさん:2014/08/29(金) 13:45:05.03 ID:SalYkWyb
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>

500 :デフォルトの名無しさん:2014/08/29(金) 15:30:50.58 ID:VZ6uxtiu
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の引数を再び手で列挙しなくていいようにしたい。

こういうのってできる?

501 :デフォルトの名無しさん:2014/08/29(金) 18:06:15.82 ID:SalYkWyb
>>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
rein repl するとエラー出るんですがどうしたら良いんでしょう
環境はwindows7
ttps://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein.bat
からlein self-installして
lein versionは
Leiningen 2.4.3 on Java 1.8.0_20 Java HotSpot(TM) Client VM
です

503 :デフォルトの名無しさん:2014/08/29(金) 20:32:24.74 ID:SalYkWyb
>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)

511 :デフォルトの名無しさん:2014/08/29(金) 22:28:36.86 ID:gwJnPSQu
よくわかんないけど、
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`.
と表示されて、フォルダとその中身は生成されました

513 :デフォルトの名無しさん:2014/08/29(金) 22:59:13.58 ID:y3Bk7XLE
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の中身は生成されました

515 :デフォルトの名無しさん:2014/08/29(金) 23:32:51.55 ID:y3Bk7XLE
>>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しなおしてみるのも手かも

516 :デフォルトの名無しさん:2014/08/29(金) 23:41:13.55 ID:gwJnPSQu
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=>
こうなりました

518 :デフォルトの名無しさん:2014/08/29(金) 23:52:13.95 ID:SalYkWyb
>517
動いてね?

519 :502:2014/08/29(金) 23:58:12.16 ID:ttFFbJAa
>518
newで作成したフォルダ以外の
場所をカレントディレクトリとして起動すると>504
のようなメッセージが表示されます
これで正常なんでしょうか?

520 :デフォルトの名無しさん:2014/08/30(土) 00:15:26.95 ID:NlcNxbCo
Windowsだとleinプロジェクト直下じゃないとダメだったような。
おれのMacだとどこでも大丈夫。
ー>つまりMacを買えってことだ

521 :デフォルトの名無しさん:2014/08/30(土) 00:19:47.90 ID:g4GRl5RV
leiningenすらも使いずらい

522 :デフォルトの名無しさん:2014/08/30(土) 00:49:42.05 ID:NlcNxbCo
息をするのもめんどくさい

523 :デフォルトの名無しさん:2014/08/30(土) 00:56:21.25 ID:g4GRl5RV
起動
java -cp %CLOJURE_HOME%\clojure-1.5.1.jar clojure.main

終了
(System/exit 0)

はじめて見たときは冗談かと思った

524 :デフォルトの名無しさん:2014/08/30(土) 01:24:57.73 ID:2I7W1a/t
>>494
あんまり詳しくないが、
そいつらリーダーマクロっていって、S式を評価する前(リードした時)に評価される文字という認識
https://gist.github.com/ponkore/4195740

525 :デフォルトの名無しさん:2014/08/30(土) 01:27:31.04 ID:2I7W1a/t
windowsのleiningenインストーラー
http://leiningen-win-installer.djpowell.net

526 :デフォルトの名無しさん:2014/08/30(土) 07:43:43.79 ID:TXjyMgKn
>>520
Linuxで良いじゃん

527 :デフォルトの名無しさん:2014/08/30(土) 08:43:13.34 ID:8H1iBGWr
>>520
うちのWin8.1+Leiningen2.0.0だと何処でもlein replできた
違いは何処にあるんだろう?

ちなみに
cd c:\
だと書き込み権限が無いってエラーでreplできない

528 :デフォルトの名無しさん:2014/08/30(土) 08:51:34.88 ID:8H1iBGWr
追記
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設定で選択するとよいかもしらん

529 :デフォルトの名無しさん:2014/08/30(土) 19:13:43.58 ID:NlcNxbCo
数値(金額)をカンマ入れ表記に変換するコードが必要になって、書いてみたらすごくながったらしくて、もっといい書き方ないかな?って聞こうかと思ったら、Javaで書けばいいんだって思い出した…

(apply str (reverse (apply str (map #(apply str %) (interpose "," (partition 3 3 nil (reverse (str 1234567))))))))

(-> (NumberFormat/getNumberInstance Locale/JAPAN) (.format 1234567))

530 :デフォルトの名無しさん:2014/09/01(月) 11:26:36.25 ID:TlhTHmWT
Ubuntu14.04でopen-jdk-7入れてlein2.4.3でlein replしたらエラー吐いた
github見て2.4.2にdgしたら直ったけど

531 :デフォルトの名無しさん:2014/09/01(月) 11:37:06.61 ID:TlhTHmWT
2.4.4にしないのは原因が不明かつ開発リソースが足りてないかららしい
leinプロジェクト外でlein replしたら出るエラーだから>>502>>508と同じ症状かも

532 :デフォルトの名無しさん:2014/09/01(月) 12:02:34.46 ID:z1FNQfnD
>>530
win,mac,linux,bsdどのプラットフォームでもproject.clj無いとエラー吐くね>>2.4.3
つーわけで2.4.2に戻してみた

533 :デフォルトの名無しさん:2014/09/02(火) 15:10:40.76 ID:O+cfco8y
来たぜ来たぜ来たぜー
新規案件、モバイルデバイス向けソフト兼サーバ必須、そして言語縛り無し!
ラピッド開発で各週統合
しかも開発に割り当てられた人的資源は自分入れて二人のみ、しかも両者ともにClojarianとくれば、もうClojure使うしか

534 :デフォルトの名無しさん:2014/09/02(火) 15:31:36.68 ID:kfD3d1pR
入門ClojureScriptの和訳がイマイチ
プログラミングClojureの後に読んだからかもしれないけど

535 :デフォルトの名無しさん:2014/09/02(火) 15:58:16.49 ID:QR3Wyv0t
>>533
個人でやってるの?
それとも小さい会社?

536 :デフォルトの名無しさん:2014/09/02(火) 18:42:46.09 ID:/dSRrT7Z
>>533
悪いことは言わない
clojureはプロトタイプまでにとどめておけ
どうしてもというなら、せめてlispでやるべき

長時間多アクセスのclojureサーバは、再帰の最適化がヘボいからコケるぞ

537 :デフォルトの名無しさん:2014/09/02(火) 20:13:34.08 ID:IqVW5NOO
Clojureは再帰使わないでコード書くものじゃないの?

538 :デフォルトの名無しさん:2014/09/02(火) 21:13:35.89 ID:l/NwgCei
単なるwebサーバーならそんなに再帰つかわないだろ?
再帰使うんなら書籍のプログラミングClojureのフィボナッチ数列のところ読めば十分じゃね?

539 :デフォルトの名無しさん:2014/09/02(火) 21:18:03.06 ID:dVCJIvZO
俺のコードがヘボいからコケるぞ!

540 :デフォルトの名無しさん:2014/09/02(火) 21:30:17.75 ID:sMeqRneA
clojure でいくつかサーバサイド書いたけど、再起など一度も使わなかった。そのチャンスさえなかった。
意識せずに遅延seqになって困った事ならあったが。
あと、JVM 起動遅くて辛かった。

541 :デフォルトの名無しさん:2014/09/02(火) 21:33:42.88 ID:/dSRrT7Z
1万行のコードの中から再帰を削除しなくてもコケない選択肢と、削除しないとコケる選択肢

(この世で最も信頼できない3ヶ月以上時間を隔てた) 俺のコードがヘボくてもコケない選択肢と、ヘボいとコケる選択肢

なぜあえて金のかかる場面で冒険をしたがるのか…

542 :デフォルトの名無しさん:2014/09/02(火) 21:37:20.54 ID:uBvsTbOp
コケるって結局何がコケたの?
最適化がヘボイからコケるってケースがよくわかんない

543 :デフォルトの名無しさん:2014/09/02(火) 22:03:43.74 ID:l/NwgCei
ネストが深い再帰をしたい場合はプログラミングClojureのフィボナッチ数列のところよく読んだ方がいいが、浅い再帰ならそんなに気にしなくていいと思うが...
まあ、何も分かってないプログラマがrecur使ってたらゾッとするがね。

544 :デフォルトの名無しさん:2014/09/02(火) 22:12:58.16 ID:/dSRrT7Z
>>542
WEBサーバでclojureで作ったサーブレット追加してサーバが落ちた経験一覧
・普通に気付かずにヘボ再帰を書いてる -> 表現が素直だから目の前にあっても気付かない
・ページの文字列連結で落ちた -> 差分リストに変更
・よく見たらletfnで再帰になってた -> 見つけるのに4日かかった
・デバッグ情報追加したら落ちた -> デバッグ情報の持ち回りに超頭使う
・clojureがバージョンアップして落ちた -> 原因不明、関数名の扱いの変更が怪しい
・その他、コードの入れ替えに落とす必要あり

545 :デフォルトの名無しさん:2014/09/02(火) 22:19:51.63 ID:uBvsTbOp
それ再帰の最適化関係ある?
バージョンアップ以外は実装してる人間の能力が問題のように見えるんだけど

546 :デフォルトの名無しさん:2014/09/02(火) 22:35:51.34 ID:/dSRrT7Z
>>545
SICP和田本から計算機言語の世界に来た人にとってはもの凄く関係あると思われる

547 :デフォルトの名無しさん:2014/09/02(火) 22:51:52.26 ID:IqVW5NOO
>・デバッグ情報追加したら落ちた -> デバッグ情報の持ち回りに超頭使う
>・clojureがバージョンアップして落ちた -> 原因不明、関数名の扱いの変更が怪しい
再帰関係無いじゃん

>・その他、コードの入れ替えに落とす必要あり
Webサーバ立ち上げたままREPLでコード修正して問題なかったと思うが
warにしてTomcatなりに組み込むのは完成してからでいいよね

548 :デフォルトの名無しさん:2014/09/02(火) 22:53:15.77 ID:uBvsTbOp
SICPは俺も好きだし結構読み込んだけど、どこが関係あるのかわかんないな
末尾最適化してくれないとかそういうの?
それこそループで書けよって思っちゃうんだけど(まあ末尾最適化を仕様で必須にしてくれればそれはうれしいけどね)
Scheme脳なら再帰にこだわるのはわかるけど、CLとかClojureとかは再帰使うよりループ使うほうが自然じゃない?

549 :デフォルトの名無しさん:2014/09/02(火) 22:54:22.16 ID:O+cfco8y
>>544
それバージョンアップ以外は544が悪くね?
>・デバッグ情報追加したら落ちた -> デバッグ情報の持ち回りに超頭使う
これなんか特に
ユニットテストとか負荷試験とかするよね?

550 :デフォルトの名無しさん:2014/09/02(火) 22:58:10.29 ID:O+cfco8y
>>548
Clojureだと再帰よりも無限リストへ関数適用で結果得方法使う事多いかなあ
loopやrecurは↑に慣れてなかった頃は良くつかったけど、今だとあんまり使わない。

551 :デフォルトの名無しさん:2014/09/02(火) 23:04:18.75 ID:IqVW5NOO
そもそも再帰の最適化は全くしないから遅延シーケンスやrecurを使ってねっていう言語なのに

552 :デフォルトの名無しさん:2014/09/02(火) 23:28:49.29 ID:/dSRrT7Z
>>547
今調べたら関数名の束縛方法が変わってて再帰状態のトレースができなくなってた

553 :デフォルトの名無しさん:2014/09/02(火) 23:32:18.63 ID:/dSRrT7Z
>>549
負荷試験するたびに、「lispならサクサク行くのにィィィィィ」とうなることうけあい

554 :デフォルトの名無しさん:2014/09/02(火) 23:32:47.97 ID:jxF8XaRa
シーケンス関数の組み合わせでばっかり書くけどな

555 :デフォルトの名無しさん:2014/09/02(火) 23:50:21.81 ID:/9mshiOI
なんとなく、jdkまわりの話。

openjdkよりoracle jdk/jreの方がいいかも。
oracle jdkはちょっと前にデグレしてたみたいなので、最新版使う。
jdk8はメモリまわりの改善あり、ただし互換性に関しては慎重に。
ibm j9は、メモリ利用効率がいいがメモリでエラー出さず落ちることがある。あとは、あまり使ってる人がいないのでclojure関連でバグあるかも。
オプションの関係もあり、leinから商用環境サーバー起動しない方がいい。

556 :デフォルトの名無しさん:2014/09/03(水) 00:27:50.58 ID:PvOs3K6+
永続的なサービスに向かない作りであれば、webサービスだと定期的にインスタンス再起動して入れ替えする運用が多いね。
たとえば、apacheはプロセス再起動を組み込みでやってる。
railsのunicornもそんな仕組みがある。
jvmの場合は、特にウオームアップ後の入れ替えが良いと思う。

557 :デフォルトの名無しさん:2014/09/03(水) 05:04:16.50 ID:3zk9T5qQ
>>543
フィボナッチはスゴいな
もう、にっちもさっちもいかなくなるわ
こらぁ、うごいてんのかぁ!

もっと腰ふらんかい!

558 :デフォルトの名無しさん:2014/09/03(水) 11:05:15.04 ID:grGI9d1X
CLバリバリ書いてた人が、プログラミングclojureみたいなclojureの作法が書いてある資料読まずに始めると、確かにハマりそうだね。

559 :デフォルトの名無しさん:2014/09/03(水) 11:19:05.25 ID:00AxUh/f
>>553
CL使うとfranz使いたくなるし、使うと現場でライセンス料がががががになる

560 :デフォルトの名無しさん:2014/09/03(水) 23:18:38.44 ID:mfAODgKx
100歩ゆずってサーブレットみたいな部品をclojureで作るとしても、商用でサーバコンテナみたいな本体をclojureで作るなんてことはないよね?

561 :デフォルトの名無しさん:2014/09/03(水) 23:22:39.08 ID:00AxUh/f
>>560
どのようにしてそのように考えたのかをまず述べてくれないだろうか?

562 :デフォルトの名無しさん:2014/09/04(木) 06:20:48.19 ID:ZW5BEuQC
商用でclojure使ってるとこ普通にあるでしょ
まあ少ないだろうけど

563 :デフォルトの名無しさん:2014/09/04(木) 16:53:57.73 ID:IshzZhlV
egisonの非線形パターンマッチができるライブラリない?

564 :デフォルトの名無しさん:2014/09/04(木) 18:59:44.24 ID:jk5K1tbR
作者が移植してるのは、rubyとhaskellだね。
clojureに移植って、どこから持ってくるのが楽なんだろうね。

565 :デフォルトの名無しさん:2014/09/04(木) 23:11:30.07 ID:KIcCGqHh
>>559
懐かしいね、franz。AllegroStore とか AllegroServe ってどうなったんだろう…

566 :デフォルトの名無しさん:2014/09/05(金) 11:16:58.89 ID:xDuN/XcD
httpサーバもあるぞ。

HTTP client/server for Clojure
http://http-kit.org/
Ring
https://github.com/ring-clojure/ring/blob/master/README.md
アクセス多い場合、ringをセルフホスティングしてることは、少ないと思うけど。

Clojure web server shoot-out
https://github.com/ptaoussanis/clojure-web-server-benchmarks/blob/master/README.md

263 KB
新着レスの表示

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :


read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)