- 1 名前:デフォルトの名無しさん [2008/02/04(月) 13:22:29 ]
- プログラミング言語Arc
あのPaul Grahamが長年考案しつつもベーパーウェアだったArcがとうとう発表された。 これを使えば今日から君もスーパーハッカーだ(*注: Arcは現在のところASCII以外の 文字を適切に扱えません)。 公式サイト www.arclanguage.org/ インストール www.arclanguage.org/install チュートリアル ycombinator.com/arc/tut.txt 非公式リファレンス practical-scheme.net/wiliki/arcxref * なぜArcはとりたててオブジェクト指向でないのか practical-scheme.net/trans/noop-j.html
- 2 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 13:25:01 ]
- ヲタク言語
- 3 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 14:01:07 ]
- へーあのグレアムの。
暇が出来たらやってみよう。
- 4 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 18:18:13 ]
- 文字列を内部的にはリストにしてるんかいなぁ?
arc> (subst 'a '(b) '(a b c)) "aac" arc> (+ '(a b c) '(d e f)) (a b c d e f) arc> (+ "abc" "def") "abcdef"
- 5 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 18:24:27 ]
- 慣れるとわりといいかも
arc> (= x '((a . a1)(b . b1))) ((a . a1) (b . b1)) arc> x ((a . a1) (b . b1)) arc> (= (caar x) 'z) z arc> x ((z . a1) (b . b1)) arc>
- 6 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 18:31:12 ]
- なんか静ですね
- 7 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 18:54:39 ]
- これいい
arc> (trues [if (odd _) (+ _ 10)] '(1 2 3 4 5)) (11 13 15)
- 8 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 20:52:02 ]
- >>4
subst は substring の略っぽい。 practical-scheme.net/wiliki/arcxref?subst List に対する subst(itute) は tree-subst という関数がある。 practical-scheme.net/wiliki/arcxref?tree-subst この辺の命名規則はまだ適当みたいだな。 ソースは簡単に読めるので一度読んでみるといいかも。
- 9 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 21:56:42 ]
- >>8
なるほど〜。疑問解消。 ソース、読んでみるよ。
- 10 名前:デフォルトの名無しさん [2008/02/05(火) 00:41:19 ]
- いまさら、こんな糞言語使わなくても、動的言語ならrubyでいいだろ。
- 11 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 00:44:31 ]
- 動的言語w
- 12 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 00:46:17 ]
- プ rubyww
- 13 名前:デフォルトの名無しさん [2008/02/05(火) 00:57:57 ]
- >>10
わかりやすすぎ
- 14 名前:デフォルトの名無しさん [2008/02/05(火) 01:08:27 ]
- マジな話、arcがrubyより優れている所ってあるの?
- 15 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 01:10:11 ]
- rubyは嫌いじゃないが、ruby使ってる人は厭な人が多いな
- 16 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 01:10:57 ]
- >>14
rubyを知らなくても使えるという点じゃないかな
- 17 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 01:13:51 ]
- まだ生まれて間もないという所が優れている
- 18 名前:デフォルトの名無しさん [2008/02/05(火) 01:21:10 ]
- まだまだこれからってことだな。5年後まだ残ってたら使ってみるよ。
- 19 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 01:27:06 ]
- はい、さよおなら
- 20 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 01:43:06 ]
- >>8
あ、ごめん、やっぱり subst の引数は seq になってるから まだ、string にしか実装されてないってことだった。
- 21 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 01:52:50 ]
- だれかEmacsの環境作れてるひといる?
inferior-lisp-programでArcを指定する方法はやったんだけど、 SLIME とかで使えんのかな
- 22 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 02:14:10 ]
- チュートリアルプレインテキストw
- 23 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 03:06:02 ]
- だが、それがいい
- 24 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 07:36:38 ]
- >>20
seq ってのは文字列とリストのことなんかね。 arc> (findsubseq '(c) '(a b c d)) 2 arc> (findsubseq "c" "abcd") 2 arc>
- 25 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 09:26:41 ]
- >>22
ワクワクするよな
- 26 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 17:38:15 ]
- とりあえず階乗。
Schemeと何が違うんじゃ ってのは勘弁して。 (def fact (n) (if (is n 0) 1 (* n (fact (- n 1)))))
- 27 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 17:45:10 ]
- 26向けじゃなくて、Schemeと大きく違うところって何?
- 28 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 19:10:10 ]
- isが同一、同値、同形判定のどれを意図してるのか判らん
- 29 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 19:47:27 ]
- >>27
Schemeはマクロやモジュールをどうするかで悩んでる その結果、変な言語でマクロを記述したりR6RSでREPLがなくなったりしてる Arcはその辺に関して楽観的というか何も考えてないっぽい
- 30 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 19:52:01 ]
- >>29
若くて元気で楽観的な青年 = Arc は、そのうち何とかな〜るだろ〜お。
- 31 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 20:07:05 ]
- 試してみた。
arc> (is 1 1) t arc> (is 'a 'a) t arc> (is "a" "a") t arc> (is '(a b) '(a b)) nil arc> (iso '(a b) '(a b)) t arc>
- 32 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 21:47:27 ]
- Rubyの方が断然いいね。
- 33 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 21:56:36 ]
- Rubyのどこがいいのか判らん
- 34 名前:デフォルトの名無しさん [2008/02/05(火) 21:57:50 ]
- Pythonのほうが断然いいね
- 35 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:33:16 ]
- リアルハッカーなら断然Perlだよね
- 36 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:33:45 ]
- リアルハッカーw
- 37 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:35:34 ]
- Arcに欠けているもの、それは、、、、、
Guy L Steel兄貴の存在
- 38 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:37:07 ]
- schemeが.netに対応してVisual Studioに統合されたら最強だわ。
- 39 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:39:05 ]
- わしはコモンリスプのほうがいいのお
- 40 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:39:50 ]
- > 欠けているもの
オライリーの本
- 41 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:43:03 ]
- やれやれ、グレアム自身が実装されたArcの発表は当分先だな。
- 42 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:45:01 ]
- 彼自身が人工知能になっちまうのかい?
- 43 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:00:05 ]
- ArcのうちSchemeで書かれたコアな部分は1000行くらいなんで読んでる。
けっこう発見があって面白い。黒川利明先生のLispの本にあったLispでLispを記述 する部分を思い出している。 ところでnamespace-set-variable-value!ってどこで定義しているのかと探しても 見つからない。プリミティブだった。へ〜。そんなのあるんだ。 (namespace-set-variable-value! 'a 1) > a 1 > namespace-set-variable-value! #<primitive:namespace-set-variable-value!> >
- 44 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:02:23 ]
- 今のグレアムは既にVer.11ぐらいらしい。
- 45 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:09:32 ]
- 誰が保守してんだ
- 46 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:10:08 ]
- グレアム
- 47 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:14:38 ]
- :aでSchemeに抜けて acompileを使うとコンパイルされた結果が
Schemeファイルとして出力される。 > (acompile "fact.arc") #t > ((lambda () 'nil (ar-funcall3 _sref _sig '(n . nil) 'fact) ((lambda () 'nil (if (not (ar-false? (ar-funcall1 _bound 'fact))) ((lambda () 'nil (ar-funcall1 _disp "*** redefining ") (ar-funcall1 _disp 'fact) (ar-funcall1 _writec #\newline))) 'nil) (begin (let ((| fact| (lambda (n) 'nil (if (not (ar-false? (ar-funcall2 _is n 0))) 1 (ar-funcall2 _* n (ar-funcall1 _fact (ar-funcall2 _- n 1))))))) (namespace-set-variable-value! '_fact | fact|) | fact|))))))
- 48 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:25:29 ]
- >>44
スレ違いだがストールマンは?
- 49 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:32:51 ]
- スレ違いです
- 50 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:33:02 ]
- &restが要らなくなったー
- 51 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:33:30 ]
- >>48
ストールマンは何で実装されてるの?
- 52 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:40:00 ]
- TECO
- 53 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:40:22 ]
- 三角関数がないのは(xdef 'sin sin)をac.scmに追加すれはOK。
で、xdefで関数名に _ を追加して名前空間にセットしているらしい。 (sin 3.14)がコンパイルされると (ar-funcall1 _sin 3.14) 1000行くらいなら読めるしPaul Grahamが残したらしいコメントから 彼の思考過程を探ることもできそうだ。こりゃ、面白いぜ。
- 54 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 00:11:16 ]
- これ、なんでシンボルを| fact|とかにしてるの?
- 55 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 00:18:17 ]
- > '(1 . 2 . 3)
(2 1 3) なにこれ
- 56 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 07:27:58 ]
- >>38
IronScheme
- 57 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 19:15:19 ]
- ラムダ計算プログラムを書いてみた
natal.web.fc2.com/lambda.arc.txt
- 58 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 19:53:26 ]
- >>57
あなた、すごい人だね。 解説、頼みます。
- 59 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 21:37:26 ]
- やっぱりrubyには敵わないな
- 60 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:17:19 ]
- そうだな。RubyはLispの方言としてはずば抜けてるからな。
- 61 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:34:06 ]
- S式に囚われている限りRubyには勝てないね
- 62 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:42:45 ]
- 逆。S式に(逆向きに)囚われてるのはMatzなんだから
> S式に囚われている限りRubyは勝てないね だよ。
- 63 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:43:38 ]
- 俺のarcスレで関係ない言語の話すんなよ
- 64 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:45:10 ]
- arcってschemeと何が違うんだよ。
単なるschemeの別バージョンならschemeスレでやれってこと。 糞スレ立てるなってこと。
- 65 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:47:27 ]
- すまん。おまえのスレで。
- 66 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:48:10 ]
- >>64
SchemeよりはむしろLispに近いと思うが
- 67 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 23:29:34 ]
- 57の人には感心してしまった。
(ac s env) のssyntax? って何だろう?と首をひねっていた。 car:cdr は〜、なるほど。 cccの使い方ってそれはバックトラック? 忙しいのかね〜。出てきて教えて欲しいね〜。
- 68 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 00:10:35 ]
- Lisp-2 + パッケージシステム + legacy macro = CL
Lisp-1 + hygienic macro = Scheme Lisp-1 + legacy macro - パッケージシステム = Arc らしい。ここの shiro さんのコメントより。 ttp://d.hatena.ne.jp/archacker/20080203/1201988205#c
- 69 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 00:18:28 ]
- >>67
57じゃないけど、このcccの使い方はいわゆる大域脱出ってやつかな。 Common Lispだとblock/return-from、他の言語だとtry/catch/throw等の 例外機構を使う。
- 70 名前:67 mailto:sage [2008/02/07(木) 00:22:36 ]
- >>69
なるほど〜。
- 71 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 00:34:46 ]
- >>68
マクロは竹内先生の本で覚えたのでlegacy macroの方が 自分にとってはわかりやすい。 Arcの方がなんとなくLispっぽいし気楽な感じでいいかも。
- 72 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 00:38:36 ]
- >>68
「- パッケージシステム」は必要ない希ガス
- 73 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 00:43:16 ]
- つまり Arc + パッケージシステム を作れば無敵w
- 74 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 00:54:04 ]
- >>72
あーそうだね、そのまま引用しちゃったから気がつかなかった。 ちょっと補足。 関数と変数の名前空間に区別がないのがLisp-1で、区別があるのがLisp-2。
- 75 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 01:18:07 ]
- 黒田涙目w
- 76 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 01:46:35 ]
- arc> (頭良くなれー頭良くなれー 俺)
- 77 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 11:22:18 ]
- >>75
いやー、あの人は現状のArcの出来だったらボロクソに言うと思うけどww 今後Arcは開発コミュニティによってどう育って行くのか楽しみだね。
- 78 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 13:46:02 ]
- 黒田さんじゃなくても現状のArcは出来はアレだと思うだろ
バージョン0のものを叩くってのは空気の読めないアホだけだよ
- 79 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 21:39:43 ]
- trace untrace って無いみたいなのでしょうがなく
こんなことをやってみた。 arc> :a done > (require (lib "trace.ss")) > (trace _fact) (_fact) > (tl) Use (quit) to quit, (tl) to return here after an interrupt. arc> (fact 10) |(_fact 10) | (_fact 9) | |(_fact 8) | | (_fact 7) | | |(_fact 6) | | | (_fact 5) | | | |(_fact 4) | | | | (_fact 3) | | | | |(_fact 2) | | | | | (_fact 1) | | | |[10](_fact 0) | | | |[10]1 省略 |3628800 3628800 arc> もっとスマートは方法はないかな? (ar-funcall(n) ... )をいじればいいのかな。
- 80 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 06:42:25 ]
- Arc Forumでジョークなのか$かsevalでScheme関数を呼び出すってのがあるなんてやってた。
そんなの無かったので追加してみた。 (ac s env)に加える。 ((eq? (xcar s) '$) (ac-seval (cadr s))) そして (define (ac-seval x) `(eval ,x)) arc> (= x "hello") "hello" arc> (($ string-fill!) x #\a) #<void> arc> x "aaaaa"
- 81 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 03:43:45 ]
- [ ... ]っていいね。かなり記述量減らせる。
明示的に変数名も入れられるとベターなんだけど。 [< a b c > ...]みたいな
- 82 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 08:05:39 ]
- 記述量減らせるけど、カッコ以外の記号覚えるの嫌だ>[]
- 83 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 08:21:22 ]
- あれあれ、'とか.とか:とか#とか`とか,とか,@とか&とかいっぱいありますよ?
[]は元々違う意味ですよ?(superbrace)
- 84 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 08:50:36 ]
- おれは#L()の方がいいよ
- 85 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 09:55:53 ]
- 覚えるのが嫌だとは思わないが、カスタマイズできない構文が増えると嫌だな
しかし fn や if の定義は変更できないほうがいい
- 86 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 10:07:42 ]
- shiro氏公開のポールエッセイに数学的だから長生きだ、
みたいな事書いてたけど、[]は数学的根拠はないよね。 if辺りの拡張も俺言語オナニーと発想レベルは同じ。 長生きしないでしょう。
- 87 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 11:58:02 ]
- 根拠がないなら作ればいい
たとえば、関数適用とラムダ抽象は全然違うんだから全然違うカッコを使うべきだとか
- 88 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 15:15:45 ]
- 昔は ' も無かったんだし、単なるsyntax sugarでしょ。目くじら立てるようなもんじゃない。
まあ定着するかどうかは微妙だと思うけど。
- 89 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 22:04:44 ]
- >>86
長生きさせる気無いんじゃない? というか最近、彼の一流の技術者的なジョークなんじゃないかという疑いを持つようになった。 あーだこーだ言ってる俺を見てほくそ笑んでるんでは無いかと。 Ctrl-Cの人はそれに気付いてジョークで返したんでは無いかと。 そうやっていつもアイツらは俺を笑ってるんだ。クソ!
- 90 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 22:24:53 ]
- >>89
Paranoid schizophreniaの可能性がありますので医師に御相談ください
- 91 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 22:29:35 ]
- 100%ジョークってことはないが
Arcのソースにdefine-syntaxが一度たりとも出てこないのはわざとだろうなぁ
- 92 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 10:16:44 ]
- >>83
>[]は元々違う意味ですよ?(superbrace) いつの時代の話してんの?w その処理系つかったことあるの?w
- 93 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 11:12:31 ]
- >>92
なめんな。お前みたいな俄かLisperとは違うわ。 大した手間でもないから、わざわざ自分の 処理系には必ず入れていたぐらい精通してるよ。 後でマイナーな存在だと知ったけどな。 結局、閉じ括弧が減った程度じゃ、 一般人にLispは受け入れられないと悟った。 俺も色々変態構文は作ってきた方だが、 arcの[]みたいな使い方は思いつかなかった。 #fn <args> <expr> => (lambda <args> <expr>) みたいな物ならいくつもあるが。
- 94 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 11:22:21 ]
- ニヤニヤ
- 95 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 12:31:02 ]
- >> 93
わりと論旨がとっちらかってて、なにが言いたいのか分からないんだけど、 でも、なんだか凄い人なのは理解できたかも!!!!! Arcに超カッコが取り入れられる日も近い! 一般人への啓蒙のためにも[]は超カッコで、#L()を採用するべきだわ。 それか、gooみたいに(op _)とかね!まあ、cutでも良いか! ちなみに#fn <args> <expr>って俄Lisperの漏れには 一見全然便利そうに見えないんですけど、どういうところで、 便利なんですか?!!! どこまでが後悔関数の引数なのか分かんなくなって混乱しちゃいそうです!!
- 96 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 13:46:05 ]
- ニヤニヤ
- 97 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 14:07:14 ]
- パンチカードを使ってた頃は便利だったなあ>超カッコ
まともなエディタがあれば要らないね。w あと [ ] を vector と解釈する処理系も無かったっけ。Interlispだっけか。
- 98 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 14:22:41 ]
- Emacs Lisp も (vector 'a 'b 'c) => [a b c]
- 99 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 15:35:48 ]
- Taoではprintで[]を再現出来るんじゃなかったっけ?
- 100 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 16:01:42 ]
- >>95
「わりとなんだか凄い人」なのは判ってくれたようだが、 分からないのは理解しようと努力してないからだ。 >ちなみに#fn <args> <expr>って俄Lisperの漏れには さて、この変態構文の例を>>7のコードで示せばこうなる。 (trues #fn (_) (if (odd _) (+ _ 10)) '(1 2 3 4 5)) 何が便利かはこれで判るだろ。 少なくともarcの[]の様なナンセンスな仕組みよりも、 何を意図するものか判り易い。 付け足すなら、短く書きたいという願望は判るが、 arcの[]は引数が'_'限定では述語ぐらいにしか使えないし、 '_'という名前が名前だけに、読み手に意図も伝えられない。 実際に[]が入っているコードを見たら、頭を1回転させないと 判らない難解さを感じた。 いくら短く書けてもぱっと見で意味不明なのは問題だろうよ。 lambdaをfnに変えたぐらいのセンスで、もうひと捻り欲しい。
- 101 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 16:20:44 ]
- かえって分かりづらいね。
センスが悪いと生きるのも大変だろうね。
- 102 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 16:28:41 ]
- _決め打ちだとネストできないのは困るな
|

|