5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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

1 :デフォルトの名無しさん:2011/10/13(木) 18:41:38.12
JVM上で動作するLisp方言「Clojure」のスレ。

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

前スレ:
【Lisp】プログラミング言語 Clojure【JVM】
http://hibari.2ch.net/test/read.cgi/tech/1255533519/

2 :デフォルトの名無しさん:2011/10/13(木) 18:42:06.81
【リファレンス】
API Overview - Clojure v1.3 (stable)
ttp://clojure.github.com/clojure/
Clojure-contrib API Reference
ttp://richhickey.github.com/clojure-contrib/index.html
ClojureDocs
ttp://clojuredocs.org/
Clojure Examples Wiki
ttp://clojure-examples.appspot.com/
逆引きClojure (日本語)
ttp://rd.clojure-users.org/
Rosetta Code
ttp://rosettacode.org/wiki/Main_Page
clojure-euler
ttp://clojure-euler.wikispaces.com/

【ブログ・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
github.com clojure
ttp://github.com/languages/Clojure
Clojure-jp (日本語)
ttp://groups.google.com/forum/#!forum/clojure-ja

3 :デフォルトの名無しさん:2011/10/13(木) 18:42:25.94
【チュートリアル】
Clojure Programming
ttp://en.wikibooks.org/wiki/Clojure_Programming
labrepl (おすすめ)
ttp://github.com/relevance/labrepl
4Clojure
ttp://www.4clojure.com/
Clojure - Functional Programming
ttp://java.ociweb.com/mark/clojure/article.html
Clojure Tutorial For the Non-Lisp Programmer | Moxley Stratton
ttp://www.moxleystratton.com/article/clojure/for-non-lisp-programmers
Clojure - Functional Programming for the JVM
ttp://java.ociweb.com/mark/clojure/article.html
PCL -> Clojure (Practical Common Lisp のサンプルコードを Clojure に)
ttp://blog.thinkrelevance.com/2008/9/16/pcl-clojure

【コーディング規則】
ttp://en.wikibooks.org/wiki/Learning_Clojure/Coding_Conventions
Library Coding Standards
ttp://dev.clojure.org/display/design/Library+Coding+Standards

4 :デフォルトの名無しさん:2011/10/13(木) 18:42:49.55
【その他】
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
Writing/Coding: Clojure Series: Table of Contents
ttp://writingcoding.blogspot.com/2008/06/clojure-series-table-of-contents.html

【本】
Programming Clojure
ttp://www.pragprog.com/titles/shcloj/programming-clojure
ttp://www.amazon.co.jp/dp/4274067890 (日本語版)
The Joy of Clojure (本は電子ブックがついてくる 要 manning 登録)
ttp://joyofclojure.com/
ttp://www.amazon.co.jp/dp/1935182641
ttp://www.infoq.com/jp/articles/the-joy-of-clojure
Practical Clojure
ttp://www.apress.com/9781430272311
ttp://www.amazon.co.jp/dp/1430272317
Clojure Programming
ttp://shop.oreilly.com/product/0636920013754.do
ttp://www.amazon.co.jp/dp/1449394701
Clojure in Action
ttp://www.manning.com/rathore
ttp://www.amazon.co.jp/dp/1935182595

【テンプレ終了】
テンプレ収集場所 http://tinyurl.com/clojure-2ch (ID:guest Pass:cl)

5 :デフォルトの名無しさん:2011/10/13(木) 19:12:09.10
京都大学霊長類研究所では、未知の感染症が蔓延し、
感染した研究員はどのスレッドにも同じコピペを
繰り返すといった症状が報告されています。

研究員によると思われる書き込みがあっても
近づかないようにしてください。

                  京都大学

6 :デフォルトの名無しさん:2011/10/13(木) 20:53:34.46

開発サイトが1.4に書き換わってる

7 :デフォルトの名無しさん:2011/10/14(金) 15:54:21.82
lispで書かれた実用的なソフトってなんかあるのか?

8 :デフォルトの名無しさん:2011/10/14(金) 17:43:27.01
Emacsとか初代Yahoo!のWebsiteとか。

9 :デフォルトの名無しさん:2011/10/14(金) 17:51:25.35
http://www.byflow.com/ はClojureで作ってるらしいね
開発者ブログとか始めてくれないかな

10 :デフォルトの名無しさん:2011/10/14(金) 18:21:38.05
人工知能のための超マイナー言語とおもっていたが、
結構面白いことできるんだな。

11 :デフォルトの名無しさん:2011/10/14(金) 18:55:17.54
最初に発明された頃人工知能の研究がブームだったので自然にそれに
使われた例が初期には多いってだけなんだが

12 :デフォルトの名無しさん:2011/10/14(金) 18:59:20.37
当時GCを持つ言語がLispぐらいしかなかったってのが大きい

人工知能みたいな大きな問題をGCがない言語でやりたいとは思わん

13 :デフォルトの名無しさん:2011/10/14(金) 19:32:09.87
「Lispは人工知能の言語」は、今は「Cはカーネルの言語」よりも怪しい
Lispの後、1970年代にPrologが開発されたし
最近のAI系研究室は(Perl|Python|Ruby)を使ってる所もあるってたまに聞くし

14 :デフォルトの名無しさん:2011/10/14(金) 19:34:20.58
>>7
Lispだと却下される案件でもClojureだとWarファイルで納品できるので通ったりする
実際2つほどプロダクトをリリースしてる。

今3つめの案件をClojureで書いてる

15 :デフォルトの名無しさん:2011/10/14(金) 22:04:14.16
いいね。実運用での所感聞かせてよ。

16 :デフォルトの名無しさん:2011/10/14(金) 22:15:03.81
eclipseでもemacsでもswank経由のREPLで即時実行テストができるのでコードが完成系になる為のサイクルがもの凄く短い
HTMLテンプレート展開はPHPとかのフロントエンドとデザイナ組に任せてバックエンドのロジックをringでガンガンつくっておいて、実サーバではTomcat等にWarで渡せる
なので実運用時のメンテコストも既存のservletと変わらないが開発サイクルが短いのとプログラマが嬉々としてコード書くのでチームのモチベーションが高い

最初上を説得するの大変だったんだけど、あっという間にプロダクトがリリースできるのを目の当たりにさせたら通った。
#ドカタが戦力になったというか


17 :初心者:2011/10/15(土) 23:12:14.89
Clojureを勉強しようと思って、
Eclipseで counterclockwise(以下 CCW)をインストールしました。

新しいClojureプロジェクトを作ると、
自動的に、プロジェクトフォルダ直下に
clojure.jar, clojure-contrib.jar, clojure-contrib-src.jar, clojure-src.jar
が置かれていて、
すぐに、Clojureのプログラムが始められて便利でした。

それで、最近、1.3がリリースされたようなので、
1.3を使おうと思ったんですが、
CCWで作成されるプロジェクトは依然、1.2のままです。
(CCWは最新にアップデートしているつもりです。)

プロジェクト作成時に、Clojreの1.3 を選んだり、あるいは、プロジェクト作成後にClojure1.3
にする方法はありますか?

後者は、ホームページから、clojure.jar, clojure-src.jar くらい探してきて
置き換えれば十分でしょうか?? (1.3からはcontribがなくなっているようなので、削除して。)

ちょっとよくわからないので、教えてください
よろしくお願いします。

18 :初心者:2011/10/16(日) 03:50:52.02
自己レスです。

要はEclipseの使い方でつまずいていたようです。
Clojureのサイトからダウンロードしてくると、clojure-1.3.jarなどが入ったファイルが落とせるので、
それを、Eclipseのプロジェクトの中に入れます。

それで、Project>Properties>JavaBuildPath
で、Librariesに clojure-1.3.jarを追加して、Orderで、srcディレクトリの上に追加。
もとの、clojure.jarとかclojure-contrib.jarなどは削除する。

という感じで、一見問題なく使えています。

sourcepath を設定していませんが、(デフォルトでは、clojure.jarはclojure-src.jarなどをsourceパスとして設定していましたが)
自分での作り方がわからないので、設定していません。

一応、問題なく使えています。
以上

19 :デフォルトの名無しさん:2011/10/17(月) 11:51:28.16
eclipse/netbeans/inteliJで、mavenやleinningen、cakeのmaven経由で管理できるんだろうけど
IDEとの連携ってそれで機能するのかな

20 :デフォルトの名無しさん:2011/10/17(月) 12:33:40.07
lein-eclispを入れればいい。

21 :デフォルトの名無しさん:2011/10/17(月) 12:36:21.25
inteliJはla clojure+leiningen プラグインを入れる。eclispよりか
こっちのほうが出来がいいと思う。

22 :デフォルトの名無しさん:2011/10/17(月) 12:43:11.47
前スレが埋まる前に新スレ使っちゃうのがクロージャ使い
ユーザーの民度が低い言語です

23 :デフォルトの名無しさん:2011/10/17(月) 12:48:09.06
スレ違いだけど、>>16の開発者が嬉々としてって羨ましいな。
俺がちゃんとコスト対効果と有用性を提示できてないのが悪いんだけど、
「コードなんて若い奴らに書かせとけばいいだろw」と言われて凹んだわ。
そして若手からも「今Javaで出来てるんだから、それでいいじゃないですか」と。
ジョブズ並とは言わんが、もちっと説得力あるプレゼンしないとな。スレチごめんなさい。

24 :デフォルトの名無しさん:2011/10/17(月) 12:51:04.51
>>23
うん、お前が悪い

25 :デフォルトの名無しさん:2011/10/17(月) 12:59:37.82
チュートリアルみたいなのを作って、啓蒙するとか。

Clojureは、チュートリアル的なものが少ない。英語でも。

26 :デフォルトの名無しさん:2011/10/17(月) 14:07:23.19
簡単なところなら、演習問題や実例は99problemsやProject Eulerを使えばいいしね。

27 :デフォルトの名無しさん:2011/10/17(月) 18:09:50.83
>>25
>>3のlabreplはマジオススメ


28 :デフォルトの名無しさん:2011/10/17(月) 21:20:08.61
>>16
>プログラマが嬉々としてコード書く
kwsk.....。

29 :デフォルトの名無しさん:2011/10/18(火) 00:09:36.78
結局、JVMを捨てて.NETメインにするまではマイナー言語のままなんだよな。

30 :デフォルトの名無しさん:2011/10/18(火) 01:43:20.82
JVM言語だと、haskellがまともに動くようにいじってたり競争が激しいが、
作者さんは、2003年にDotLisp(.net)、2007年にclojure(JVM)と移ったのであまり.netに手を出す気はないらしい。
なので、別の人がclojure-clrをポートしてる。

31 :デフォルトの名無しさん:2011/10/18(火) 13:37:01.57
Clojure1.3です。
defvar ってよくわからないんですが、
どういう働き、使い方をするんでしょうか。

変数を初期値とドキュメント文字列で定義する、もののようなので、
下記のようにしていますが、エラーがでます。。

(defvar vartest 123 "document")
(println vartest (class vartest))

defvar が何かわからないというエラーなんですが。。
def と同じような働きをすると思って、使ってみたんですが。。

32 :デフォルトの名無しさん:2011/10/18(火) 15:19:28.51
(defvar vartest 123 "document" )

(def ^{:doc "document"} vartest 123)
これをするのと一緒


33 :31:2011/10/18(火) 21:03:13.70
defvar 使うと、
Exception in thread "main" java.lang.Exception: Unable to resolve symbol: defvar in this context
というエラーが出てしまうんですよね。

インストールの仕方が悪いのでしょうか。。

34 :31:2011/10/18(火) 21:10:07.39
https://github.com/getwoven/clj-time/pull/13
もしかして、1.3では、defvar はデフォルトで削除されている??

35 :デフォルトの名無しさん:2011/10/18(火) 21:40:36.51
see http://clojuredocs.org/clojure_contrib/clojure.contrib.def/defvar


36 :デフォルトの名無しさん:2011/10/19(水) 09:28:09.80
defvarは大分前からcontribにあるし、1.3ではdefがdocstringを受け付ける

(def foo "A meaningless number." 123)

これはdefnやnsと同じdocstring→内容という順番に揃えられた

(ns bar
"A useless namespace."
(:require [clojure.string :as str]))

(defn baz
"Returns \"foo,bar,baz\" always."
[]
(str/join \, ["foo" "bar" "baz"]))

1.2で関数ではないvarにdocstringを付けるには、contribを使うなり、>>32のように書くなりすれば良い

37 :デフォルトの名無しさん:2011/10/19(水) 09:39:30.11
s/docstring→内容/名前→docstring→内容/

38 :31:2011/10/19(水) 22:45:49.36
なるほど。そういう流れだったんですね。

39 :デフォルトの名無しさん:2011/10/19(水) 23:05:02.26
>>28
今時入ってくる新人ってREPL以前にMSXみたいなBASIC環境すらしらないんだ
で、コンピュータが対話環境で使えるときに感じる自分の能力の拡張みたいな感覚にアヘン吸ったみたいな快楽を覚えてしまって
ものすごい集中力でコード書きだして周りのほうがびっくり状態になってる。
実際ここ数年Unitテストとかで対話に近いテストサイクルでもモチベーションが少しだけ上がったんだけど
Realな対話環境がもたらす単体関数の即時テスト(たんにSlimeでevalするだけなんだけど)が面白くてしょうがないって言ってる。
だから16で「ドカタが」って最後に書いたんだけど、こいつらがそのまま会社に居着いてくれればうれしいけど、収入上がんないとこれ何人かは流れちゃうかもしれない。


40 :デフォルトの名無しさん:2011/10/19(水) 23:42:45.18
アヘン吸わせると良いのか

41 :デフォルトの名無しさん:2011/10/20(木) 00:00:15.66
>>39
それはぜひどこかの媒体で発表してもらいたいな。Clojure党支援につながる 笑

42 :デフォルトの名無しさん:2011/10/20(木) 10:12:07.78
BASICを知らない新人が多いのは想像できるが
今時REPLを知らない新人が多いなんてことがあるのか

43 :デフォルトの名無しさん:2011/10/20(木) 10:38:50.24
まだ「プログラミング教育はJavaでやってます()」って結構多いだろ

Windowsしか使ってないとテキスト端末環境を使うことにすら慣れない奴も多いし

44 :デフォルトの名無しさん:2011/10/20(木) 19:07:49.41
まるでプログラミング教育をJavaでやるのがおかしいかのような書き方だな

45 :デフォルトの名無しさん:2011/10/20(木) 19:51:51.16
>>44
初めて使う言語スレに移動すればこの手の話はいっぱい出てる。これを話しだすと
フレーム論争になるし、オフトピになってしまう。

46 :デフォルトの名無しさん:2011/10/20(木) 19:55:40.69
>>41
ここに書いただけでもばれたらやばいので雑誌や論文誌でとかミリ


47 :デフォルトの名無しさん:2011/10/20(木) 23:20:09.54
うん

48 :デフォルトの名無しさん:2011/10/21(金) 00:02:17.41
煽りでもなさそうなのに「ドカタ」とか「Java()」みたいなことを平気で書いてしまうのは痛いな
プロダクトを2つリリースして今3つめって、見る人が見れば一発でバレるようなことを書いといて
バレたらやばいってのも意味が分からん

ちょっと頭の弱い人なのかな…
こういうのがいると言語自体の印象が悪くなるし、ホント迷惑だわ

49 :デフォルトの名無しさん:2011/10/21(金) 00:26:02.75
2チャンの中ってほんとキチガイめいた人(キチガイかもしれない。)が
いて、行動の善悪の判断がずれてる人がいるから慎重になったほうがいい
ところ。彼らの思い込む正義のためなら何でもしてしまう危険な連中がい
るから。

JavaをしらんからJava()で煽りになるんかどうかすら俺は知らん。土方は
この板じゃ差別用語なのは知ってるが。

50 :デフォルトの名無しさん:2011/10/21(金) 22:45:23.90
KCLの御大がご退官されるとのこと。


51 :デフォルトの名無しさん:2011/10/21(金) 23:30:54.79
Smalltalkだったら失神するな

52 :デフォルトの名無しさん:2011/10/22(土) 14:12:36.72
東大京大どっち?

53 :デフォルトの名無しさん:2011/10/22(土) 17:18:47.63
lispスレに書き込むべきだったが誤爆したな。
京大のほう。

54 :デフォルトの名無しさん:2011/10/23(日) 16:25:10.65
〜 Clojureで改行はいつするのかとRubyist 〜

Clojureでのコーディング規約というか、改行をどこで入れるのかとか、
説明したサイトありますか??

55 :デフォルトの名無しさん:2011/10/23(日) 17:35:04.23
>>54
スレの1からのリンク集いおいてある。

56 :デフォルトの名無しさん:2011/10/24(月) 12:44:11.48
FP Day 2011, Cambridge UK
http://www.fpday.net/fpday2011/programme.php
名前に対してこじんまりとしたイベントだけど、
キーノートにMSRのhaskellとF#の御仁が来て、
Hands-onとCaseStudyには追加でClojureコースがあったという。

57 :デフォルトの名無しさん:2011/10/25(火) 19:18:36.65
Clojureで、 [ ]括弧を使うのは、
let, defn の仮引数部 ,with-open とかだけど、
これらに共通するのは何か??

なぜ、def では[ ] 括弧を使わないのだろうか。。

58 :デフォルトの名無しさん:2011/10/25(火) 23:09:16.71
defを含むスペシャルフォームだと、let,fn,loop
http://clojure.org/special_forms

59 :デフォルトの名無しさん:2011/10/26(水) 12:16:53.17
シンタックスの一部としてベクタを要求するフォームは主に二種類ある。
・引数を表すベクタ(例:fn、defn、defmacro)
・その式の「内側」で有効な束縛を作るベクタ(例:let、binding、dotimes、loop)

defはそのどちらでもない

60 :デフォルトの名無しさん:2011/10/26(水) 12:25:13.19
あ、引数のベクタも書式は名前と値のペアではないが
「内側」で通用する束縛を作っている点で共通すると考えてもいいな

61 :デフォルトの名無しさん:2011/10/26(水) 14:21:51.20
Lispの生みの親が逝ってしまった・・

62 :デフォルトの名無しさん:2011/10/26(水) 16:00:36.34
クソ言語生み出した奴は死んで当然

63 :デフォルトの名無しさん:2011/10/26(水) 17:40:00.11
>>62 死んで詫びろ今すぐ

64 :デフォルトの名無しさん:2011/10/26(水) 18:42:02.83
ClojureのSTMは使い物にならない ? JUMPERZ.NET Blog
ttp://kanatoko.wordpress.com/2011/05/06/clojure_stm_too_slow/

Clojure での並列プログラミングはシンプルな記述も出来ない、パフォーマンスも悪い、という事ですが。

Clojure はマルチスレッドプログラミングの複雑さを解決するとか聞いていたのに、話と違うような気が……

どう思いますか?


65 :デフォルトの名無しさん:2011/10/26(水) 19:31:17.00
またそれか

66 :デフォルトの名無しさん:2011/10/26(水) 21:09:31.58
あまり共有せずイミュータブルな構造に見合った設計すればいいんじゃないかな?

最近なイントロ用スライド
https://github.com/strangeloop/2011-slides/raw/master/Sierra-ClojureIntro.pdf

67 :デフォルトの名無しさん:2011/10/26(水) 21:11:49.07
https://github.com/strangeloop/2011-slides/blob/master/README.md
Richyの講演 simple made easyのビデオ

68 :デフォルトの名無しさん:2011/10/26(水) 21:17:10.72
https://github.com/strangeloop/2011-slides/raw/master/Marz-Storm.pdf
http://github.com/strangeloop/2011-slides/raw/master/Tellman-EventDrivenProgrammingInClojure.pdf
こういうのやってるぐらいだから、なんとかなんじゃないの?

69 :デフォルトの名無しさん:2011/10/26(水) 21:31:15.21
>>64
匿名でブログことは余りコメントしたくないな。コード規約的に余り見たくないんだよな。

70 :デフォルトの名無しさん:2011/10/26(水) 22:32:52.96
>コード規約的にあまり見たくない

日本人の方、いらっしゃいましたら翻訳をお願いします

71 :デフォルトの名無しさん:2011/10/26(水) 23:47:21.13
_で始まる変数がキモイとかそういうことかしらね?

72 :デフォルトの名無しさん:2011/10/27(木) 03:06:23.37
他人のコード見ると、コード規約を忘れてしまう、とエスパー。

73 :デフォルトの名無しさん:2011/10/27(木) 09:11:32.09
> 匿名でブログこと

日本語でおk

74 :デフォルトの名無しさん:2011/10/27(木) 10:11:06.01
ensureとかcommuteとか
http://www.slideshare.net/kakuda/clojure-3844723
http://www.slideshare.net/marblejenka/clojurestm

変更を観測するadd-watchというのがあるのか
http://groups.google.com/group/akka-user/browse_thread/thread/ff909a4cd9f6159c
http://java.ociweb.com/mark/stm/STM_1up.pdf

あとは、retry回数とかの統計も欲しい。

75 :デフォルトの名無しさん:2011/10/28(金) 01:03:32.08
http://rob-rowe.blogspot.com/2011/10/getting-started-with-clojure-clr.html

少し使ってみた感じ、monoがターゲットじゃない(.netメインにする意味はwinでWPFやVSぐらい?)、ikvmとかでjvm向けの命令補完する仕組みがあるとちょっといいのになと思った。
なにに使えばいいのか分からん。
そういえば、dynamic導入するのかな。

76 :デフォルトの名無しさん:2011/10/28(金) 13:38:25.12
Clojureと、elisp とで、クオートの意味合いは少し違いますか??

たとえば、.emacsの設定ファイルにある
(add-to-list 'foo-bar-alist '(name . value))
のは、

普通のClojureの関数だと、
(add-to-list foo-bar-alist '(name value))
こういう感じで、foo-bar-alistに、クオート必要ないですよね。
(もちろん、クオートが必要なようにadd-to-list関数を書くこともできると思いますが。。)

ClojureからLispに入っているので、
普通の人にはわかない疑問かもしれませんが、
皆さんの感覚を教えてください。

77 :76:2011/10/28(金) 13:40:56.12
クオートというよりは、
あるいは、デフォルトの、
変数や、シンボルの扱いが違うのでしょうか?

その辺り教えてください。よろしくおねがいします。

78 :電波いっぱい:2011/10/28(金) 20:25:16.28
言語やの違いとかではなくて、破壊的な変更をしたいときのやり方が違うだけ。
emacsのadd-to-listは破壊的な関数で、内容を書き換えたい変数そのものを渡すためにクォートしてる。clojureで同じことをするにはatomなんかをはさむからそうならない。


79 :電波いっぱい:2011/10/28(金) 20:33:35.12
あ、言語の違いではあるな。クォートの違いではない。ごめん。

80 :デフォルトの名無しさん:2011/10/29(土) 05:21:18.42
>>76
クオートは評価を遅らすという意味で違いはないでしょ。
確かにクオートとかシンボルはすごい混乱しやすい所。 俺も初心者の頃はreplでずっと考えを整理してた。
まず先頭が関数かマクロかをはっきり認識しておく。
関数なら引数は左から順に'評価'されていく。
評価とは以下のことだ。
(ここでめんどくさくなったのでやめる)

81 :デフォルトの名無しさん:2011/10/29(土) 13:13:38.75
http://toki.2ch.net/test/read.cgi/scienceplus/1319679294/

82 :デフォルトの名無しさん:2011/10/29(土) 13:42:10.79
>>76-77
中途半端にいろいろ考えるよりも、
Lispにおける関数とマクロについて勉強してみたらいいんじゃないかな?
なぜ関数の引数にクオートが必要になる場合があるのか。
なぜマクロなんてものが必要になるのか。
クオート、関数、マクロ、に対する考え方は、elispもClojureも変わらないはず。

83 :デフォルトの名無しさん:2011/10/30(日) 00:01:10.88
elispのadd-to-listでは、
foo-bar-listというシンボルが何を束縛するかを変更するから、
foo-bar-listをクオートしてシンボル自体をadd-to-listに渡す必要がある。

普通のClojureの関数?では、
シンボルが何を束縛するかを変更するのではなく、
シンボルが束縛してる物の状態を変えるから、
シンボル自体を渡す必要が無く、シンボルが束縛してる物を渡せば良い。
したがってシンボルをクオートする必要が無い。

84 :デフォルトの名無しさん:2011/10/30(日) 03:00:44.69
lein-multi, clj-stacktrace, slingshot, lein-difftest, robert-bruce
http://technomancy.us/154

85 :デフォルトの名無しさん:2011/10/30(日) 03:41:12.09
1.3系って1.2の頃とcontribの扱いが違うのですげー戸惑っちゃうんだけど、感覚的に行き先がわかるようなドキュメント転がってないかな。


86 :デフォルトの名無しさん:2011/10/30(日) 09:57:36.37
1.2でもばらばらのやつ使えるってあるけど、coreに取り込まれた奴はどうすればいいんだ。

>85 感覚的か分からんけど
概要や関数名インデックスで検索とか
API Overview -clojure-contrib v1.3 (in development)
http://clojure.github.com/clojure-contrib/branch-master/index.html
開発サイトのドキュメント(まとめ、新旧対応表)
http://dev.clojure.org/display/doc/Clojure+Contrib
http://dev.clojure.org/display/design/Where+Did+Clojure.Contrib+Go

87 :デフォルトの名無しさん:2011/10/30(日) 10:59:52.87
>>86
おおー、この最後のリンクだわ欲しかったの
感謝感謝!


88 :デフォルトの名無しさん:2011/10/30(日) 12:11:14.32
1.2でコアに入ってなくて、1.3で入ったcontrib由来のライブラリって何があったっけ

89 :デフォルトの名無しさん:2011/10/31(月) 09:08:37.59
2週間で80レスか。22−3週でレスを消費するペース

90 :デフォルトの名無しさん:2011/11/01(火) 13:23:41.36
http://www.cafepress.com/technomancy?utm_medium=cp_social&utm_source=addthis&utm_campaign=CafepressShop#.TqoexsC5DuE.twitter

91 :デフォルトの名無しさん:2011/11/01(火) 14:13:43.12
LeiningenよりかClojureのロゴが入ってるマグカップが欲しいわ。

92 :デフォルトの名無しさん:2011/11/01(火) 17:50:17.95
>>91
いいなそれ
Land Of Lispでもいいや

93 :デフォルトの名無しさん:2011/11/01(火) 18:11:02.67
この際、Half-Lifeでもいいよ

94 :デフォルトの名無しさん:2011/11/01(火) 19:33:03.52
>>93
λしか合ってねぇ

95 :デフォルトの名無しさん:2011/11/02(水) 00:48:27.74
http://www.zazzle.co.jp/clojure?st=date_created&ps=15#products
そこのサイトもこちらのサイトも勝手に作れるのかな?
マグカップは無いようだ、、

96 :デフォルトの名無しさん:2011/11/06(日) 06:51:00.51
先月22日に、ClojureCLRの(開発者ほぼひとりなので個人でなく)公式blogが始まってた。
いきなり10日間の利用調査をおこなって、
http://clojureclr.blogspot.com/2011/10/2011-clojureclr-survey-is-open.html
結果発表してる。
http://clojureclr.blogspot.com/2011/11/results-of-2011-clojureclr-survey.html

clojure(.core)1.3の99%機能実装してる
javaのweb,db環境に依存してる
開発環境に不安
CLRのジェネリックスのサポートがない
monoで動かない
調査中2人しか個人利用でも常時使ってない
など、いろいろ書いてあった。

97 :名無しさん@お腹いっぱい。:2011/11/06(日) 10:04:05.57
GUIやDB操作のClojure独自の使用できないのかね

98 :名無しさん@お腹いっぱい。:2011/11/06(日) 10:57:19.00
>>97
使用×
仕様

99 :デフォルトの名無しさん:2011/11/06(日) 19:11:20.97
>>97
jdbcとかコネクションプールとか、チョロく使えすぎるのでだれもわざわざ書いたりしないんだよね

100 :デフォルトの名無しさん:2011/11/06(日) 23:46:51.95
GUIだったらseesawとか。

101 :デフォルトの名無しさん:2011/11/09(水) 10:13:06.73
を、非公式な1.3互換のclojure.contribだって
https://github.com/arohner/clojure-contrib/tree/1.3-compat
いまのところ、clojarsなどには置いてないので、ローカルに置いて使うようだ。

102 :デフォルトの名無しさん:2011/11/09(水) 23:06:18.43
clojure 1.3にすると1.3へ未対応なライブラリが一杯あって^dynamicせいや!と山ほど警告が出るのがいやだなぁ
clojarsのサイトみてもdependencyは実際読むまでわからんから困る(clojarqlが山ほど居てどれが対応版かわからんとか)


103 :デフォルトの名無しさん:2011/11/10(木) 00:54:43.02
^{:dynamic true}なら1.2で構文エラーにならずに済むらしい


104 :デフォルトの名無しさん:2011/11/11(金) 07:27:02.56
ループ内でpersistent hashをassoc,dissocして新しいの作ってばかりだとGCやら処理コストで遅いかとおもってたらjava.util.HashMapと殆ど速度かわらないのね。
ものすげー驚いたわ
現実的な部分だとSTMを高速に書き換えるスレッドが競合するようなアホな事しなければjavaでsynchronizeに神経使うよりも開発効率めちゃくちゃいいわ。




105 :デフォルトの名無しさん:2011/11/11(金) 12:13:51.00
clojure/conjスライド
https://github.com/relevance/clojure-conj/tree/master/2011-slides

ことしのツイートは大分増えた気がする
http://twitter.com/#!/search/%23clojure_conj%20-rt

106 :デフォルトの名無しさん:2011/11/12(土) 02:10:22.64
>>104
haskellでもミュータブルなArray使って実用的な速度出したりしてたから、
実装を工夫してイミュータブルでGC減らしたりするのは、
関数型全体でも実装面で影響が有ったみたい。

107 :デフォルトの名無しさん:2011/11/13(日) 00:30:59.40
>>16
二つのプロダクトは何人で開発していたの?
完成形になる速度は、どのくらい違うもん?
もっと熟練度が上がれば、どのくらいになりそう?

108 :デフォルトの名無しさん:2011/11/13(日) 02:43:53.39
Evangelizing Clojure
http://rhebus.posterous.com/79870335

・Know your enemy
Scala, Clojure and Groovy are in competition, but they are not enemies of each other. The real enemy is the status quo.

status quo - ラテン語で現状(というか現実?)
http://dictionary.goo.ne.jp/leaf/ej3/81156/m0u/status+quo/

マインドシェアって英語はWP7で聞くようになったな。


109 :デフォルトの名無しさん:2011/11/13(日) 03:21:53.85
Scala,Clojure,Groovyは競走中じゃが、お互いに敵ちゃうよ。本当の敵じゃ
現状じゃよ。
*Clojureやるなんてデカイリスク抱えるやん。確かなのがいい
*ClojureはJavaよりええ選択やとおもうけど、Javaは産業の標準や
わしは、Clojureを選んでプロジェクトが失敗しよったら、より非難しそうや。
*Clojureを選んだら、よう知ってるClojure開発者をやとえるか知らん。

とこんなところがthe status quoの内容ですね。

110 :デフォルトの名無しさん:2011/11/13(日) 09:49:42.45
2つめのこと
(Javaを使ってプロジェクトが失敗する時)より非難しそうや。


111 :デフォルトの名無しさん:2011/11/15(火) 09:58:13.31
https://groups.google.com/forum/#!msg/clojure-cake/GG7DbCQmmW4/Uh7IdWNFmdwJ
cakeとleiningenが統合するらしい。
これでlein replは最初は起動は普通だが2回目は速くなりそうだな。

112 :デフォルトの名無しさん:2011/11/15(火) 11:40:27.98
>>110
昔、「IBMを選ぶ理由は、IBM以外を選んで失敗したら何言われるか判らないから」って話があった。

113 :デフォルトの名無しさん:2011/11/15(火) 12:52:17.49
そういうどうしようもない底辺は相手にする価値がない

114 :デフォルトの名無しさん:2011/11/15(火) 13:27:32.58
結局管理者の立場になると、自分の責任になってくることをなるべく減らす
ために、既存の権威というのか常識にあわせて、そちらに責任転嫁をするように
できるというのは魅力的なんだろう。
海外ですら(あのブログの人どこの人かしらんけど。)あの状態だから、より
保守的な日本ならその常識がもっと重要なんだろうね。

115 :デフォルトの名無しさん:2011/11/15(火) 20:51:52.28
http://groups.google.com/group/clojure-dev/browse_thread/thread/dd506abb7f0188cb
ライブラリ作ったら、clojure MLで発表しよう。
そこが、みんなの集まる場所(だとおもっているので)
RH

うろ翻訳。開発MLで呼びかけてるんだなー。大黒柱っぽくていいね。

116 :デフォルトの名無しさん:2011/11/16(水) 05:35:56.30
なんでその内容をdevで周知してるんだろ。

117 :デフォルトの名無しさん:2011/11/16(水) 07:29:02.90
clojureを購読してる人に「お前らもっと自分のコードアピールしろよ」ってことではなく
「clojure-devはcontributor向けのMLだから、こっちでアナウンスしても気付けない人がいるよ」ってことじゃね

118 :デフォルトの名無しさん:2011/11/16(水) 14:05:38.06
そうだと思うけど、ツイートするだけじゃなくって言ってるのが一般向けに見えた。
それにdevでアナウンスしてる人なんて見当たらないし。

119 :デフォルトの名無しさん:2011/11/16(水) 20:47:43.78
そこのあなた(ライブラリ作成者)に呼びかけるんだったら、(無いから開発サイトになってしまうが)公式ブログやtwitterに書いた方がいい内容だよね。
開発MLは閲覧自由だけど、core,contribの開発という目的にあわせてコントリビューター宣誓しないとメンバー登録出来ない。
逆説的なせいか、なんかこうしっくりこないんだよなー。

http://clojure.org/contributing
http://dev.clojure.org/display/design/JIRA+workflow

120 :デフォルトの名無しさん:2011/11/16(水) 23:32:47.34
遅ればせながら意訳してみた。

君はClojureライブラリの開発者かい? 何かリリースしたばかり?
メインのClojureグループでアナウンスした? もししてないならやった方が良い。
あっちは現在でも何千もの人々に情報提供できる主たる場所なんだ。ツイートも良いけど、Clojureグループも入れてやってよ。
よろしくね。
リッチより

121 :デフォルトの名無しさん:2011/11/18(金) 09:10:53.52
http://www.manning.com/rathore/
正式に発売されたみたいね。
Clojure in Action is a hands-on tutorial for the working programmer who
has written code in a language like Java or Ruby, but has no prior
experience with Lisp.
とあるんで、すでに一つ言語を習得した人向けの本かな。
Clojure in Action は職業プログラマーのための実践的チュートリアルです。
JavaやRubyの言語でプログラムを組んでいる人向けで、Lispの経験はなくて
もいいよ。(使ってる言語:他の情報からだとOOPを扱った言語のことを指してるのかな。)
というようなこと。内容は多義に渡ってるのかな。基本から応用まで、実践例
を交えてるとのこと。manningは掲示板に登録したりしてメール広告をもらうよう
にしておくとクーポンは簡単に手に入る。


122 :デフォルトの名無しさん:2011/11/18(金) 20:56:19.81
スレタイだけど、clojureならスレの番号はベクタで
[3]
とかにして
(プログラミング言語 clojure [3])
っていうのはどう?

123 :デフォルトの名無しさん:2011/11/18(金) 21:25:21.20
>>122
なんか nilとか戻されそう


124 :デフォルトの名無しさん:2011/11/19(土) 16:06:40.75
conterclockwiseで開発しようとしてるんですが、何度も再起動ってどうやってやるんですか?
どうも、起動するたびにREPLというのが起動してとても遅い気がします
簡単な計算ならLoad File in REPLで素早くREPL内で起動するようですが、Swingを使うと
Load file in REPLでウィンドウが現れなくなってしまうようです

125 :124:2011/11/19(土) 16:33:45.32
うーん、REPLが起動していないと、エディタ内の補完も効かないみたいですね
しかもSwingアプリを終了させるとREPLも終了してるようで、
補完が効かなくなってしまう
しかも特定の補完の仕方をするとめちゃくちゃ遅いですね
intelliJ IDEAのLa Clojureはこうした問題が何もないので、
こっちを使うことにします。

126 :デフォルトの名無しさん:2011/11/19(土) 16:41:22.11
intellJ IDEAのほうがいいと思うよ。leiningenプラグインもあるから
そちらも入れておけばいい。外部ライブラリを使うようになれば
こちらはかなり重要だ。
でも、一番いいのは、leiningen+slime+emacsだから。
ものによったら、eclipseに限らずSwing アプリを終了したときにREPLも落ちることはある。

127 :124:2011/11/19(土) 16:53:43.92
>>126
親切にありがとうございます。leiningenってツールが良いんですね。
Emacsという手もありましたか。
検討してみます。

128 :デフォルトの名無しさん:2011/11/19(土) 20:11:59.60
Swingアプリケーションを終了した時にREPLが終了するのって
setDefaultCloseOperationにEXIT_ON_CLOSE(ウィンドウを閉じたら終了する)を指定したとか
どこかでSystem.exitを呼んでるとかではなく?

129 :デフォルトの名無しさん:2011/11/19(土) 20:16:21.89
あと、IDEは一連の作業でそう何度も再起動するようなものじゃないと思うが……
viやnanoならファイルを開く度に起動して用が済んだら閉じるけど

130 :デフォルトの名無しさん:2011/11/19(土) 20:21:45.78
viで開発するならscreenつかってバックグラウンドでreplを動かさないと
効率が上がらん。

131 :デフォルトの名無しさん:2011/11/19(土) 20:54:44.61
俺も時間取って書く時はバックグラウンドで走らせる

132 :デフォルトの名無しさん:2011/11/20(日) 19:32:51.60
viよりemacsの方が良いのか

133 :デフォルトの名無しさん:2011/11/20(日) 21:42:45.45
>>132
一種のIDEだし, なじめば, まぁ...
slimeなれたら離れられなくなるとおもう


134 :デフォルトの名無しさん:2011/11/20(日) 22:25:04.20
clojure 1.3で、
(def a 1)は警告でないのに(def *a* 1)は警告が出る。
二つの使い分けってあるの?
あと警告文の「名前を変えろ」の意味がよくわからんけど*取れってこと?



135 :デフォルトの名無しさん:2011/11/20(日) 23:13:09.48
vimも良くなってる。vim+lein(cake)+screenという組み合わせは、
かなり機動力が高いと思うよ。vimclojureかslimzかどちらかのvimプラグイン
を入れれば、シンタックスは対応できるから。

136 :デフォルトの名無しさん:2011/11/21(月) 00:03:26.02
>>154
1.3から*で囲われたvarは再束縛できなくなった、んで ^dynamicつけないといかんぞって警告が出てくる
CommonLisp慣れしてると結構面食らう


137 :デフォルトの名無しさん:2011/11/21(月) 01:49:11.33
monoにも、llvmのバイトコード吐く仕組みがあって、
http://www.mono-project.com/Mono_LLVM
http://www.mono-project.com/Mono:Runtime:Documentation:LLVM
この記事の通り下のSciMarkをmono-llvmで回したら通常の1.5倍ぐらいのスコアだった。
ただし起動時の初期化が長いので短いプログラムでは遅くなるかも。
http://www.cs.ucsb.edu/~ckrintz/racelab/PhxCSBenchmarks/index.html

ちなみに同じくubuntu11.10 amd64で、gcc -O2で2倍、-O3 i7-avx最適化で、2.5倍ぐらいだった。
openjdk7で2.1倍。


138 :デフォルトの名無しさん:2011/11/21(月) 01:50:06.86
誤爆

139 :デフォルトの名無しさん:2011/11/21(月) 01:54:58.65
*var-name*をclojure.jarでは定数に使ってるので、みんなも定数に使ってねって事だったかも。

140 :デフォルトの名無しさん:2011/11/21(月) 03:11:36.80
>>136
あー、*で始まって*で終わる名前はdynamic専用の名前にすっからよろしく、ってことか。

>>139
定数・・・なのかな。定数は*なしで定義するのかなと思った・・・けど*clojure-version*が謎。

141 :デフォルトの名無しさん:2011/11/21(月) 03:24:59.74
*つけるのはbindingで値を変える前提のVarだけにしとけって事。
みんなバラバラの意味で使って混乱するから強制にしたんじゃね。
逆に^dynamicついてないとbindingできなくなったし。
ついてないのを無理やり変えるならwith-redefsかalter-vat-rootかな。

142 :デフォルトの名無しさん:2011/11/21(月) 04:03:30.08
http://clojuredocs.org/quickref/Clojure%20Core
変数だから、警告は名前変えてじゃなくて、dynamic付けろっていってくれた方がいいよね。

143 :デフォルトの名無しさん:2011/11/21(月) 04:11:50.98
http://clojuredocs.org/clojure_core
http://clojuredocs.org/clojure_contrib
索引

144 :デフォルトの名無しさん:2011/11/21(月) 10:02:15.44
>>142
二文目で

・(動的に再束縛することを意図しているなら):dynamicメタデータにtrueを付加する(indicate ^:dynamic)
・(慣習を知らずに、単に*で囲ってるvarをよく見かけるから付けたのなら)名前を変える(change the name)

のどちらかをやれ(Please either)と明記してるだろ?

145 :デフォルトの名無しさん:2011/11/21(月) 10:30:56.37
それから、>>136は「*で囲んだシンボルだけがデフォルトで再束縛できない」という意味合いにも解釈できるから
>>139は「Clojureでは*で囲んだシンボルを定数に使っているんだろう」と解釈したんだろうけど
「すべてのvarが動的に再束縛できる」→「:dynamicがtrueなvarだけが動的に再束縛できる」に変わっただけで
*で囲んだvarだけ特別に動的な再束縛を禁止しているわけではない

>>136は、Common Lispのdefvarから類推すると、Clojureの"var"はすべて動的に再束縛できて当然だから面食らったって話……だよな?)

146 :デフォルトの名無しさん:2011/11/21(月) 10:33:15.76
あ、ごめん
もしかして136と139は同じ人?

147 :デフォルトの名無しさん:2011/11/21(月) 12:10:00.67
>>145
面食らった件はそう、他のライブラリでも*db*とかを再束縛してたりしたので1.3で結構面食らった
*付きじゃないと警告でなかったような気もしたのだけど気のせいかな?
>>146
136だけど139じゃないです


148 :デフォルトの名無しさん:2011/11/21(月) 12:44:32.03
>>147
*で囲まれていなければ警告は出ないが、動的に再束縛できない点は変わらない
*で囲んだ時だけ警告されるのは、慣習と実際が食い違っているから

逆に、1.2まではこんなこともできた(:inlineでインライン化される場合は効かない)

(binding [println (fn [& args] nil)]
(println "hello, world")) ; 出力されない

149 :デフォルトの名無しさん:2011/11/21(月) 20:34:13.12
>>148
動的束縛全面禁止になったのか、で、*はよく用いられていたから警告だすようになったって事でFAってことかな?


150 :デフォルトの名無しさん:2011/11/21(月) 21:12:01.18
全面禁止じゃなくて、:dynamicがtrueなvarに限定された
よく使われているというか、Clojureでも動的に再束縛できる変数は*で囲む慣習がある
ただ、名前によって動的な再束縛の可否という振る舞いを変えるのではなく
移行時に警告で振る舞いの変更を知らせるようにした

151 :デフォルトの名無しさん:2011/11/22(火) 09:28:11.55
まったくの初学者で、labreplはじめたんだけど、It's all dataとloopingの間に
深い深い溝があるような・・・みんな、軽々と乗り越えたん?
いきなりrecurだのベクター中の&だのif-letだの出てきてわけわからん状態で挫折しそう。

152 :デフォルトの名無しさん:2011/11/22(火) 15:41:09.31
https://sites.google.com/site/clojurejapanesedocumentation/home/reference
labreplやるにも、
ここら辺は必要なのかな?

&は残りの引数という意味らしい。

153 :デフォルトの名無しさん:2011/11/22(火) 16:47:58.20
全くの初学者でよくそれを見つけたなw
今動かしてみたけど、結構良くできたチュートリアルだね。
でも確かにloopingの2番はいきなりdefn、loop、分配束縛、if-let出してきてそれ使えってのは無茶だな。
たっぷり例示してからやればいいのに。

154 :デフォルトの名無しさん:2011/11/22(火) 17:45:00.44
テンプレでおすすめに入れてるから。

155 :デフォルトの名無しさん:2011/11/22(火) 18:05:38.78
http://vimeo.com/channels/fulldisclojure
このビデオキャストイイね。advanced course だけど、プログラミングclojure
を読み終わって更に力を付けたいという人には向いてる。
ただし、英語の放送ですが。

156 :デフォルトの名無しさん:2011/11/22(火) 18:55:25.38
おまえら予約した?

Amit Rathore "Clojure in Action"


157 :デフォルトの名無しさん:2011/11/22(火) 20:26:31.69
>>156
ebook版なら先週くらいに買ったよ


158 :デフォルトの名無しさん:2011/11/22(火) 21:09:21.64
>>152さん、ありがとうです。やっぱり難しいですよね。
labreplは>>154さんのいうとおり、テンプレのお勧め見て
試して見ました。・・・が、>>153さんの言われている単語すら
よくわからない状態で。精進します。

159 :デフォルトの名無しさん:2011/11/22(火) 22:12:48.46
>>155
まだ2つしか見てないけどいいわこれ
教えてくれてありがと


160 :デフォルトの名無しさん:2011/11/22(火) 22:59:16.34
joy of clojure買ったのに読んでなかったわ

161 :デフォルトの名無しさん:2011/11/22(火) 23:55:04.58
http://media.pragprog.com/newsletters/2011-11-21.html
どこ標準時か判らないけれど、11/25(金)だけ40%オフだそうで。
pragmatic bookshelf
http://pragprog.com/titles
プログラミングClojure第二版
翻訳されるなら英語版買わんでも、と思うがどうなんだろう。

162 :デフォルトの名無しさん:2011/11/23(水) 01:16:19.86
in actionのmanningは感謝祭の前日50%引きセールだそうで。
西海岸は、22日の午前8時過ぎだから日本時間だと今日17時までかなあ。

163 :157:2011/11/23(水) 04:03:33.67
くぅ、まだ100ページ(四分の一)しか読んでないのに半額セールとか涙出そうだ
ショボーン
木曜休みとってあるからこの連休で全部読むしか orz


164 :デフォルトの名無しさん:2011/11/23(水) 04:33:38.69
感謝祭前後には毎年なにか割引があること覚えておかないとなあ。
apressの場合、去年は12中旬ぐらいに25%セールがあったけど今年はどうだろ。

165 :デフォルトの名無しさん:2011/11/23(水) 14:44:07.82
clojureスレにきてるやつって
なにげに英語余裕で読み書きできそうなやつがそろってそうな
気がしてならない。

166 :デフォルトの名無しさん:2011/11/23(水) 16:07:52.55
>>165
まだ裾野が狭いからね。日本語のリソースをもっと増やさないといけ
ないのはわかってんだが。手が回らない。

167 :デフォルトの名無しさん:2011/11/23(水) 21:28:11.01
クックブックみたいのが出るといいと思うんだがねえ。
入門はあの翻訳本でいいとして。

168 :デフォルトの名無しさん:2011/11/23(水) 22:22:12.21
> 入門はあの翻訳本でいいとして。
取り上げてる例に興味が持てなかったので未だに積んであるんだが


169 :デフォルトの名無しさん:2011/11/23(水) 22:41:40.13
俺もLancetには興味なかったけど、あの本のLancetパートは
別に熱心に読まなくてもいいというか、章末の復習ついでに実装が進んでいく感じ
第二版は全体の構成が少し変わってるけど、Lancetパートはあるんだろうか

170 :157:2011/11/23(水) 23:58:22.32
Leiningenを例にする本がでればいいのにとか重いながら、Clojure in Actionをこの2日で180ページまで読んだ
どんどん濃くなるのでうれしいが今年中に読み終われるかギリギリな感じ

>>165
高卒のおばかなプログラマの俺でも興味のあるものの為に辞書片手に読むようになったらここ2年ですごい読めるようになったよ。
なんで生徒時代あんなに英語赤点だったんだろうかってくらい(大学入試ムリなくらいなレベル)




171 :デフォルトの名無しさん:2011/11/24(木) 02:41:49.52
第二版は、はじめの方でちょろっとlein使ってるぐらい。
実践の部分はclojure.test(.generative),clojure.java.jdbc,compojureの説明があって、
それを使ってゲームを作る流れ。(jdbcは使ってないかも)
パフォーマンスの説明は、いまのところ、メモ化やlongとuncheck使った四則演算の話が少しある。

172 :デフォルトの名無しさん:2011/11/24(木) 18:49:15.23
Lancetのところはみなすっ飛ばしたわ。笑 キョーミなかったし。
それでもなんとでもなるよ。基本的なことはそれ抜きに書かれてるから。
私はLisp系の基本だと思ってる関数で関数を返すといった技法絡みは無いけどさ。

173 :デフォルトの名無しさん:2011/11/24(木) 18:56:52.57
技術的なことは分からんが、leinが簡単過ぎて嬉しい。
Mavenとかantとか複雑過ぎて俺の脳みそには入らん。
自動化ツールを自動化しなきゃダメな時点でどうなんだと。
アホのeclipseのために専用のプロジェクト作らなくても、emacsでほいほい開発できるし単純に楽だわ。

174 :デフォルトの名無しさん:2011/11/24(木) 21:24:18.01
>>173
激しく同意

175 :デフォルトの名無しさん:2011/11/24(木) 23:43:11.28
質問です。
LinuxerのサンデープログラマLisperなんですがJava未学習者がclojureを
覚える強いメリットっありますか?
あとOSごとにソフトを作り込んだ方がヘビーなエンドユーザーは使いやすいと
思うんですが、実際の所はどうなんでしょうか?

176 :デフォルトの名無しさん:2011/11/25(金) 00:46:13.24
こういうメリット云々ぬかす奴は嫌い。

177 :デフォルトの名無しさん:2011/11/25(金) 00:47:09.55
JAVA嫌いなら出来ない おわり

178 :デフォルトの名無しさん:2011/11/25(金) 01:07:46.30
俺ジャバは知らないけど、使ってるよ。若干困るところはjavaの機能を
使おうとする部分かな。ライブラリ知らないのは資料だけならネットに
いっぱいあるから問題なしかな。protocolところは混乱するかもしれな
いけど、固有の機能を使うGUIだってseesawのようなものも出てきてるので
そんなに問題はないかな。
迷信のように、Javaを知らなければ、Clojureを使えないと言ってる人は
いるようだけど、(検索などで見かけた。)あれは真っ赤な嘘か、発言者の
頭のスペックの問題と考えていいよ。

179 :デフォルトの名無しさん:2011/11/25(金) 01:21:03.33
>>175
javaしらなくても十分やる価値があるよ
Lispよりも純粋関数型言語の思想の方が強く関与してるおかげで副作用なしの関数の学習に適してるから
Emacs+Slimeの様なインタラクティブ環境でそれができるのは希有な上に学習曲線が緩いClojureは一押しだったりする
他にも関数型でHaskellやML系とかJVMならScalaもいるがこれらよりは優しいと思う

まぁ本人が何したいのかにもよるんだけどね。


180 :デフォルトの名無しさん:2011/11/25(金) 03:29:57.95
みんなLancet飛ばしててわろた。

181 :デフォルトの名無しさん:2011/11/25(金) 03:50:23.70
ビルドツールが例ってのはちょっとややこしいよなぁ。
そもそもAntって何だっけ状態だったし。

182 :デフォルトの名無しさん:2011/11/25(金) 04:20:46.34
leiningenは良くできてるよなー。
このビルドツールの使いやすさもclojure普及に一役かってると思う

183 :デフォルトの名無しさん:2011/11/25(金) 06:22:55.93
>>178-179
純粋関数型言語を勉強する気が起きたらならそれに適した言語で勉強します。言語マニアでも
ないので無駄な勉強時間は割きたくありません。

ようするに強いメリットはないようですね。こちらのスレが伸びていたのは知っていたので
もっと明確な答えが返ってくると期待したのですが間違いでした。

回答、ありがとうございました。

184 :デフォルトの名無しさん:2011/11/25(金) 07:00:39.64
>>182
一役どころじゃないよな。
プラグインを個々にインストールする仕組みになったからproject.cljも変更しないで済んで更に便利になったし。

185 :デフォルトの名無しさん:2011/11/25(金) 08:48:20.69
>>183
web屋さんには強いメリットはあるけどね。

186 :デフォルトの名無しさん:2011/11/25(金) 08:49:08.28
415 名前:デフォルトの名無しさん [sage] :2011/11/25(金) 06:41:33.57
>>410
各ディストリでそんなに環境依存ってあるもんなんですか?
>>395のリンクでもありますがCで触れるのは最後にチューニングできるのは強みのような気もするんですが。
Richちゃんのいつごろ書いた記事?
>>411
朝、起きて気づいた。こっちの方が書き込み多いのは驚いた。Clojureスレのヤツはウンコだな。
>>412
それならGaucheで良くね?
CLならsbcl, clisp。個人の日本語解説サイトもあるから日本語資料には困らんよ。
日本語資料では間に合わなくなったら辞書片手に読めば良い。以上。

Clojureスレのヤツはウンコだな。

187 :デフォルトの名無しさん:2011/11/25(金) 09:15:58.30
最近は質問する奴の方が偉そうなの多くなったのかねぇ
>>183
後出し設定乙でありますとしか、何がしたいために知りたかったのかが伝わらない質問した自分を恥じなさいな


188 :デフォルトの名無しさん:2011/11/25(金) 09:46:08.48
ClojureスレからCLスレに転載したかと思えば、CLスレからClojureスレに再び転載
お前は一体何がしたいんだ

189 :デフォルトの名無しさん:2011/11/25(金) 10:20:59.99
煽れば教えて貰えると思ってるんだろ。
皆通る道だ。

190 :デフォルトの名無しさん:2011/11/25(金) 12:22:51.15
lisp使いでこっち見てるなら、関連スレにもいるに決まってんだろ。
本当頭悪い奴だな。
頭悪いついでに、LISP総合スレは
Lisp Scheme Part33
http://hibari.2ch.net/test/read.cgi/tech/1318150738/

191 :デフォルトの名無しさん:2011/11/25(金) 12:54:33.21
Herokuはいいとして、
GAEやbeanstalk,RUN@cloudなんかは、javaのインフラが使えること分からないとどう利用してるのかイメージつき難いのかな。

192 :デフォルトの名無しさん:2011/11/28(月) 19:52:07.72
googleのえらいさんでPAIP/AIMAの著者とhyperspecの中の人の文章です。
http://www010.upp.so-net.ne.jp/okshirai/tutorial-on-good-lisp-programming-style-ja.txt
これはcommon lispのスタイルについて書いてる文章だけど、
基本的なことはclojureのプログラミングについてもつながってるので、
読んでない人がいたら一読をおすすめする。



193 :デフォルトの名無しさん:2011/11/29(火) 00:07:18.76
翻訳頼むわ↓

194 :デフォルトの名無しさん:2011/11/29(火) 00:21:56.62
http://blog.raynes.me/blog/2011/11/27/the-clojure-community-and-me/
>I had a lot of time to do these things because I’ve always been
> home-schooled.
>I always say that Haskell was my first language.
>I’m 17
>I also landed a book deal with No Starch Press. I’m currently
> writing a book called Meet Clojure for them.

17ってのも驚きだけど、Land of LispやLearn You A Haskellの堅苦しくない
出版からClojureの本を出すことになってるってのも驚き。
Learn You~は大学生が出したHaskellの本だが。
中学生でHaskellをやったんかなぁ。

195 :デフォルトの名無しさん:2011/11/29(火) 00:23:26.41
http://meetclj.raynes.me/ これがアナウンスしてる予定の本。
Land~もLearn~も好評だったからなぁ。

196 :デフォルトの名無しさん:2011/11/29(火) 00:38:46.33
http://nostarch.com/
伝統(?)の黄色い表紙は、キッチリしてるんじゃないかな。
オーム社のマンガガイドの科学シリーズが翻訳されててベストセラーにいつもはいってる。
英訳で始めてオーム社でこんなの出してたんだというのを知った。

197 :デフォルトの名無しさん:2011/11/29(火) 04:49:12.48
>>193
ハングルはアニョハセヨぐらいしか知らんよ


198 :デフォルトの名無しさん:2011/11/29(火) 19:54:39.36
user=> (map doc '(list))
java.lang.Exception: Can't take value of a macro: #'clojure.core/doc (NO_SOURCE_FILE:179)
というエラーが出てしまうんですが、どうすれば欲しい結果を返すことができるんでしょうか? version1.3.0

user=> (doc list)
-------------------------
clojure.core/list
([& items])
Creates a new list containing the items.
nil
user=> (map + '(1 3))
(1 3)
user=> (type list)
clojure.lang.PersistentList$1
user=> (map type '(1 list))
(java.lang.Integer clojure.lang.Symbol)


199 :デフォルトの名無しさん:2011/11/29(火) 20:26:53.31
これならとりあえず動いた。versionは1.2.1。
user> (map print-doc (list (var list)))
(-------------------------
clojure.core/list
([& items])
Creates a new list containing the items.
nil)

200 :デフォルトの名無しさん:2011/11/29(火) 20:55:40.85
レス、ありがとうございます。
version 1.2.1で動作確認しました。
;;version 1.3.0
user=> (map print-doc (list (var list)))
CompilerException java.lang.RuntimeException: Unable to resolve symbol: print-doc in this context, compiling:(NO_SOURCE_PATH:22)

欲しい結果がちょっと抽象的でしたので具体的にします。sbclでやるとこんな感じです。
CL-USER> (mapcar #'(lambda (f) (documentation f 'function)) '(list setq defun))
("Return constructs and returns a list of its arguments." NIL
"Define a function at top level.")
あと"(defun &ENVIRONMENT ENV NAME ARGS &BODY BODY)"という情報も欲しいです。

で、最終的にはこんな感じにしたいです。
("-------------------------
clojure.core/list
([& items])
Creates a new list containing the items.
nil" "-------------------------
hogehoge ..." "-------------------------
fugehoge ..." ...)

201 :デフォルトの名無しさん:2011/11/29(火) 21:04:47.37
clの場合 (describe シンボル名)

202 :デフォルトの名無しさん:2011/11/29(火) 21:06:28.19
(mapcar #'(lambda(x)(describe x)) '(cons defun))

203 :デフォルトの名無しさん:2011/11/29(火) 21:32:55.00
>>198はメッセージの通り、docというマクロ自体を引数として与えようと事によるエラー
Clojureのマクロは今の所それ自体の「値」を直接手に入れることができない

>>200は1.2では内部関数であるprint-docが外部にむき出しになっていたのが
1.3でちゃんと外部から直接呼べないようになったので動かなくなった

ところで、要するにdocの出力を文字列として受け取ればいいんだよな?
Clojureでは標準入出力を直接使う代わりに*in*や*out*という名のvarを使い、それらがデフォルトで標準入出力になってる
with-out-strは内側で*out*を動的にStringWriterへ束縛して、*out*に出力された文字列を返り値にする
なので、こうすれば望んだ結果が得られる

(map (fn [name] (with-out-str (doc name))) '(list))

204 :デフォルトの名無しさん:2011/11/29(火) 21:45:56.51
あ、*in*などを使うのは強制ではないし、System/inなどをハードコードしてる場合もリダイレクトできるってわけじゃない
coreは勿論、大抵のClojureライブラリも*in*などを使ってるんだけど、出力先を指定できないJavaライブラリを使うときは注意

205 :デフォルトの名無しさん:2011/11/29(火) 21:56:08.39
>>203
俺もそんな感じでいけるんじゃないかと思ったが
docが変数名そのものから展開してしまって思うようにいかなかったわ
そのコード例だと、(fn …)の返り値が全部#'clojure.core/nameのドキュメントになる

>>200
(defmacro docs [& xs]
(apply list 'list (for [x xs] `(with-out-str (doc ~x)))))
とマクロを定義して
(docs print println def defn)
で(doc …)の文字列のリスト取得できるようになる…と思う
可変長引数じゃなくてベクタやリストを渡したければ[& xs]を[xs]にでもしてくれ



206 :デフォルトの名無しさん:2011/11/29(火) 21:57:50.54
(source doc)してみれ docのマクロは読める。

207 :デフォルトの名無しさん:2011/11/29(火) 22:07:29.05
1.3で(macroexpand '(doc list))するとどうなるの?
1.2.1だと(clojure.core/print-doc (var list))になるんで>>199にしてみたんだが。

208 :デフォルトの名無しさん:2011/11/29(火) 22:13:49.63
>>207
1.3だと((var clojure.repl/print-doc) (clojure.core/meta (var list)))になったよ

それじゃあと、(use '[clojure.repl :only (print-doc)])としてみたんだが
IllegalAccessError print-doc is not public clojure.core/refer (core.clj:3774)
というエラーが出た。

209 :デフォルトの名無しさん:2011/11/29(火) 22:15:50.28
>>205
ああ、本当だ。間違ってたごめん
最初に#()で書いたら""が返ってきて「%というシンボルを探してるのか」と気付いてたのに大ボケかましてしまった

210 :デフォルトの名無しさん:2011/11/29(火) 22:25:52.02
>>208
ならば、これでどうだ。もう本題から離れちゃってる気がするけどw
(map (var clojure.repl/print-doc) (list (clojure.core/meta (var list))))

211 :デフォルトの名無しさん:2011/11/29(火) 22:28:04.52
>>207-208
1.3でprint-docはvarではなくメタデータを取るようになった
(source doc)すれば分かるけど、docにはいくつかの特別な名前の為の処理があるから、print-docだけではうまくいかない
useのエラーは上で書いた通り、内部関数のprint-docは1.3からは直接呼べない(:privateがtrue)が、シャープクォートを使えば迂回できる
(docの内部でシャープクォートを使ってるのも、展開先で呼び出せる必要があるから)

(#'clojure.repl/print-doc (meta (var list)))

212 :デフォルトの名無しさん:2011/11/29(火) 22:39:18.85
>>203-208
みなさん、ありがとう。
とりあえず、長考するわ。

長考する前にデバック(on slime)についてのおすすめの英語サイトありますか?

213 :デフォルトの名無しさん:2011/11/29(火) 22:41:11.81
>>211
なるほど。:privateみたいなのでアクセス制限できて、それを (var xxxx) = #'xxxx で回避できるのね。

214 :デフォルトの名無しさん:2011/11/30(水) 05:32:02.34
docの結果は値としては返ってこないのか。
返ってくるのは結果をどこかへ出力する副作用をもった遅延シーケンスだから、
>>203みたいなことしないと出力を文字列として得ることができないと・・

215 :デフォルトの名無しさん:2011/11/30(水) 05:58:24.60
>>214
最終形は>>205ね。まだコードの行数も少ないからgitで追っかけるかな。

216 :デフォルトの名無しさん:2011/11/30(水) 16:33:31.53
結構面白い問題だから、公式のグループで聞いた方がいい。

217 :デフォルトの名無しさん:2011/11/30(水) 18:05:27.24
求人伸び率最強はClojure…元々が少なかっただけだろうけど
http://yfrog.com/ocsykp

218 :デフォルトの名無しさん:2011/12/02(金) 01:45:33.47
金持ちが居たら受けて感想でも教えてくれ。$325だってよ。
http://codelesson.com/courses/view/introduction-to-clojure

219 :デフォルトの名無しさん:2011/12/02(金) 22:57:23.02
clojureで作った関数をjavaから呼び出す方法ってありますか?
出来上がった.classファイルを解析するしかない?

220 :デフォルトの名無しさん:2011/12/02(金) 23:26:49.80
Clojureの関数はCallableとRunnableを実装してるので
それらを実装した他のクラスと同じ感覚で呼び出せる
望むならjava.util.concurrentのタスクスケジューラなどに渡すこともできる

221 :デフォルトの名無しさん:2011/12/03(土) 01:16:22.04
>>219
http://clojure.org/compilation

222 :デフォルトの名無しさん:2011/12/03(土) 16:45:38.26
>>220
>>221
ありがとう。
英語苦手だからとりあえず:gen-classって付けてみたけど、
欲しい関数はどこにあるかわからなかった。
ゆっくり読みながら試してみます。

とりあえず"hello"ってStringを返すだけのdefnを
javaから呼べるようにすることからはじめてみます。

223 :デフォルトの名無しさん:2011/12/03(土) 18:30:08.22
>>222
最近MLで見たよ、その話。書いておいた。
Java から Clojure の関数を呼び出す
http://rd.clojure-users.org/entry/view/77001

あと、Google Group の メンバーステータスを
「各メッセージが投稿されるたびに受け取る」にしておくのおすすめ。
メールがうざくないなら。

224 :デフォルトの名無しさん:2011/12/03(土) 18:57:06.14
おいら、java側コードを道具としてつかっちゃうからjava側からclojureの関数呼び出すとかいう発想自体無かった
どんなときに有用なん?(出来ないのは困るってのはあるけど)


225 :デフォルトの名無しさん:2011/12/03(土) 19:23:12.22
Javaアプリケーションのスクリプト環境として使う時?
GIMPのScript-Fuみたいな感じ

226 :デフォルトの名無しさん:2011/12/03(土) 22:04:38.82
Clojureで作成したライブラリをJVMで使いたいときは、下記の機能知ってると、細かいところまで用意できるけど、
まず上に出てきた、コンパイル時の-Dclojure.conpile.path=classesと実行時の -cp classes:…、ソースの(:gen-class)とdefn -main[&args]で、javaのメイン関数的な呼び出しさえ出来れば良いんじゃないかと。(かleinのコマンドと設定)

227 :デフォルトの名無しさん:2011/12/03(土) 22:05:26.14
Java Interop
http://clojure.org/java_interop
のSupport for Java in Clojure Library Functionsの項

Clojure で適切な型定義を選択 するためのフローチャート
http://cemerick.com/2011/08/09/flowchart-for-choosing-the-right-clojure-type-definition-form-jp-translation/

228 :デフォルトの名無しさん:2011/12/04(日) 09:51:34.33
>>227
わかりやすくて感動した!

229 :デフォルトの名無しさん:2011/12/04(日) 10:12:52.20
>>227
壁紙にした!


230 :デフォルトの名無しさん:2011/12/04(日) 16:28:18.48
Clojureの勉強のつもりで、EvernoteのAPIを使ってみようと。
んで、

(import '[com.evernote.edam.userstore UserStore$Client])

って叩いたら、
IncompatibleClassChangeError Implementing class java.lang.ClassLoader.defineClass1 (ClassLoader.java:-2)
とか怒られるんですよね−。
他のインナークラスは大抵importできるのに。implementsされてたらアカンいう事?

色々調べたけど、英語がそんなに得意でないこともあってもう限界。
だれか解決方法ご存知の人教えて下さい。

231 :デフォルトの名無しさん:2011/12/04(日) 16:28:33.22
Clojureの勉強のつもりで、EvernoteのAPIを使ってみようと。
んで、

(import '[com.evernote.edam.userstore UserStore$Client])

って叩いたら、
IncompatibleClassChangeError Implementing class java.lang.ClassLoader.defineClass1 (ClassLoader.java:-2)
とか怒られるんですよね−。
他のインナークラスは大抵importできるのに。implementsされてたらアカンいう事?

色々調べたけど、英語がそんなに得意でないこともあってもう限界。
だれか解決方法ご存知の人教えて下さい。

232 :デフォルトの名無しさん:2011/12/04(日) 16:42:30.39
大切なことなので2階言いました。

233 :デフォルトの名無しさん:2011/12/04(日) 17:38:59.42
ミスっただけです

234 :デフォルトの名無しさん:2011/12/04(日) 18:02:20.53
>>231
そのAPIを使ったことが無いので、ちょっと試してみたけど
そのコード自体は問題なく通ったよ

user=> (import '[com.evernote.edam.userstore UserStore$Client])
com.evernote.edam.userstore.UserStore$Client
user=>

自分がやった方法は
leiningenを使って、プロジェクト作ってlein depsした後
lib/以下にevernote-api-1.19/java/lib/に入ってあった
* evernote-api-1.19.jar
* libthrift.jar
の2つを置くだけ

そのエラーの原因は、メソッドやクラスの関係にズレが生じて
整合性がとれなくなるときに起きるエラーのようだよ

例示すると
"interface Aが定義された.classと、それをimplementsしたclass Bが定義された.classがあるとして
Aをabstract classとして定義し直して再コンパイルしたがclass Bのほうは古いまま"
のような場合に起きるらしい

>>231がどういう環境を使ってるかは良くわからないので
これでは解決にはならないかもしれないが、良ければ参考にしてくれ

235 :デフォルトの名無しさん:2011/12/04(日) 18:37:59.57
>>234

おおお、ありがとう!
なんかかんやと出したり引いたり弄くっているうちにズレたのかも。

未知のバグだったら手も足も出んなぁ思っていたから、
そうじゃないと判っただけでもとても助かりましたです。

236 :デフォルトの名無しさん:2011/12/06(火) 00:38:49.33
http://www.infoq.com/news/2011/12/date4j-vs-joda-time
JSR-310がJoda Timeそのままでは無いようなのだけど、
JVM言語はどうするんだろう。
すでにJSR-310の勝手バックポートがあるみたいだし、
ちょうどclojure1.4になにかしら用意したいという話から意見募集してるみたいだけど。
http://groups.google.com/group/clojure-dev/browse_thread/thread/940c4225b439367e/8d1563a2e13df1b1?#8d1563a2e13df1b1

237 :デフォルトの名無しさん:2011/12/06(火) 11:12:10.34
勝手→リファレンス
あと、記事のdate4jはjsr-310と無関係

238 :デフォルトの名無しさん:2011/12/08(木) 04:46:02.38
よろしくお願いします。
リスト操作・lambdaの扱いが慣れていないlisper見習いなんですが、clojureを効率よく
勉強するにはclojureでの再実装を意識しながらsbcl or cclで実装してからcloujureで再
実装した方が基礎を固める意味で良いでしょうか?
それとも動くはずなのにエラーに苦しみながら何度も調べながらclojureで実装した方が
したっぽいが良いでしょうか?

clojureに慣れたらわざわざ他のclで実装する必要もなくなると思いますが。

239 :デフォルトの名無しさん:2011/12/08(木) 08:45:00.24
動かないのなら、「動くはず」はただの思い込みだよ、ClojureでもCLでも
Clojureを学ぶのが目的なら最初からClojureをやればいいし
どのLisp方言を学ぶか選んでる最中ならCLと比較しながらやればいい

あと、念のために言うけど、Clojureの頭にCLの二文字が付いてはいるけど
SBCLやCCLのCL (Common Lisp)とは特に関係ない、別の言語だからね

240 :デフォルトの名無しさん:2011/12/08(木) 12:07:36.94
驚き最小の法則()

241 :デフォルトの名無しさん:2011/12/08(木) 12:42:22.08
Clojureは他のLisp方言に比べたらちょっと個性的だと思う。(破壊的処理
のところがね。副作用の部分をモナドで囲むようなHaskellのようなわけ方を
してる。もっともJava固有のコレクションや配列を直接扱うときはこの保護
機構を使わなくても書き換え可能)

242 :デフォルトの名無しさん:2011/12/08(木) 12:55:58.35
>>239
Clojure is not CL.は知りませんでした。
後出しですがemacs lispも勉強したいのでCLベースで基礎を固めた方が良いのかな。
>>241
ちょっと個性的ですよね。記法を覚えていないとか、慣れの問題があるんでしょうけど。

243 :デフォルトの名無しさん:2011/12/08(木) 13:46:12.60
Clojureは可変な値ではなく、refなどの可変な参照が指し示す値を変える事で可変な状態を扱う、って考え方だから
同じように「囲んで」いるように見えても、モナドとは考え方の背景が違うけどな
printlnみたいにむき出しにしてる部分も多いし、Clojureではそれも悪くはない

モナドが欲しい時はalgo.monadsを試すといい

244 :デフォルトの名無しさん:2011/12/08(木) 16:01:06.27
>>242
JVM で動く CL 実装は ABCL 。
一応書いとくと、elisp も CL とは違うよ。

245 :デフォルトの名無しさん:2011/12/08(木) 16:30:56.69
>>243
当然背景も考え方も違うよ。

246 :デフォルトの名無しさん:2011/12/08(木) 16:53:57.78
>>238
ClojureはCommonLispとはかなり性格が違うので一緒にやると混乱するよ
EmacsLispも学びたいって言う事から察するとLisp族初めたばかりだと思うからいくつか助言するとしたら
1.Clojureから先に覚えれば、破壊操作が楽な他のLisp族へは移行が優しい
2.通常の言語で高度なプログラムが書けるならCommonLsipからやる方が優しい
3.興味や学術方面から入るならSchemeがオススメ

の3つの選択肢があるのでどれか一つから始めるといいよ。
どれから始めてもカッコが気にならなくなったらいつでも他のLisp族にうつれるから気にしなくて良いよ、ただし3つのどれも同時に始めるとLisp族が嫌いになると思うのでできれば一つに集中してほしい


247 :デフォルトの名無しさん:2011/12/08(木) 18:50:09.35
>>244
I know "Emacs lisp is not CL".

Why clojure?
Clojureが流行っているのは大量書き込みに難があると噂だけど並列処理ができるから?
>>246
(1)重要な要素ではないです。(3)Schemeでcar, cdrを覚えました。そして、本格的にプログラミング
しようと思って、速くて下品そうなCLに移って来ました。CLはEmacs lispと多少コードの互換性がある
ので再利用できるのもCLを選びました。(2)高度なブログラムを書けないけど、CLが体に馴染んで来ました。
カッコがないとむしろ気持ち悪いくらいです。
自分の判断としては(2)のコースで必要があればClojureで再実装なのかな。今、そこまで実装したいと
いう気持ちはありませんが、簡易なBlogシステムとか、Web関連でちょっとした遊びがしたいですね。

248 :デフォルトの名無しさん:2011/12/09(金) 01:38:27.41
既にCL使ってるのか、
それなら、CLでもweb frameworkあるよ。
比較するならclojureだとjavaのservletを使ったSaaSにデプロイするのという手段がとれるので楽だと思うけど。(Herokuなど)
あと、CLとClojure比較するのに参考になる話題ではないけれど、
java以外のJVM言語のなかでは言語の組み込みなデータ構造と機構だけで、
デーモン上にて大量のオブジェクトを扱った場合でも比較的ヒープの使い方がうまいらしい。
(1,2年前の話。良く分かってないけど、2GB以上ヒープメモリつかっても、GC周りの地獄になりにくい?)


249 :デフォルトの名無しさん:2011/12/09(金) 08:25:12.93
ヒープの使用効率は永続的なデータ構造(persistent data structure)の影響かな
今年のClojure/conjで発表した人だと、Phil Bagwellが永続的なデータ構造の論文をいくつも発表している

250 :デフォルトの名無しさん:2011/12/09(金) 08:50:14.37
>>248
Clojureであってもヒープを大量に消費すればfull GCが走って遅くなる
ただ、可能な限りデータ構造を共有する(不変性のおかげで、書き換えられる心配がないからコピーしなくてもいい)ので、例えば

(def a [1 2 3])
(def b (conj a 4))
(def c (conj b 5))

と書いても[1 2 3]と[1 2 3 4]と[1 2 3 4 5]をヒープに置く必要はなく
[1 2 3]と[<aの内容を参照> 4]と[<bの内容を参照> 5]を持っていればいい
これが>>249の「永続的なデータ構造」で、ヒープの効率向上に貢献する

実際の仕組みはもう少し複雑なので、正確に知りたい人はこれを読むといい
http://blog.higher-order.net/2009/02/01/understanding-clojures-persistentvector-implementation/

251 :デフォルトの名無しさん:2011/12/09(金) 10:04:41.70
>>250
これってCommonLispで明示的に書いてできないもんなの?

252 :デフォルトの名無しさん:2011/12/09(金) 11:31:41.32
>>251
もちろん永続的データ構造を実装すればできる

253 :デフォルトの名無しさん:2011/12/09(金) 11:46:21.54
Common Lispで永続的なデータ構造を実装した例
http://d.hatena.ne.jp/sile/20100929/1285733544
ここで参照されてる"Ideal Hash Trees"はPhil Bagwellの論文

254 :デフォルトの名無しさん:2011/12/10(土) 11:21:11.16
>>253
(loop FOR i FROM 0 TO 9 COLLECT i)という書き方が興味深かった。(loop For i From 0 To 9 Collect i)と
いう書き方ってコストじゃないからこういう書き方の方が良いのかな。

74 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)