【普通のやつらの】 Arc Language 0 【上を行け】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/02/04(月) 13:22:29あのPaul Grahamが長年考案しつつもベーパーウェアだったArcがとうとう発表された。
これを使えば今日から君もスーパーハッカーだ(*注: Arcは現在のところASCII以外の
文字を適切に扱えません)。
公式サイト
http://www.arclanguage.org/
インストール
http://www.arclanguage.org/install
チュートリアル
http://ycombinator.com/arc/tut.txt
非公式リファレンス
http://practical-scheme.net/wiliki/arcxref
* なぜArcはとりたててオブジェクト指向でないのか
http://practical-scheme.net/trans/noop-j.html
0005デフォルトの名無しさん
2008/02/04(月) 18:24:27arc> (= 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>
0006デフォルトの名無しさん
2008/02/04(月) 18:31:120007デフォルトの名無しさん
2008/02/04(月) 18:54:39arc> (trues [if (odd _) (+ _ 10)] '(1 2 3 4 5))
(11 13 15)
0008デフォルトの名無しさん
2008/02/04(月) 20:52:02subst は substring の略っぽい。
http://practical-scheme.net/wiliki/arcxref?subst
List に対する subst(itute) は tree-subst という関数がある。
http://practical-scheme.net/wiliki/arcxref?tree-subst
この辺の命名規則はまだ適当みたいだな。
ソースは簡単に読めるので一度読んでみるといいかも。
0009デフォルトの名無しさん
2008/02/04(月) 21:56:42なるほど〜。疑問解消。
ソース、読んでみるよ。
0010デフォルトの名無しさん
2008/02/05(火) 00:41:190011デフォルトの名無しさん
2008/02/05(火) 00:44:310012デフォルトの名無しさん
2008/02/05(火) 00:46:170013デフォルトの名無しさん
2008/02/05(火) 00:57:57わかりやすすぎ
0014デフォルトの名無しさん
2008/02/05(火) 01:08:270015デフォルトの名無しさん
2008/02/05(火) 01:10:110016デフォルトの名無しさん
2008/02/05(火) 01:10:57rubyを知らなくても使えるという点じゃないかな
0017デフォルトの名無しさん
2008/02/05(火) 01:13:510018デフォルトの名無しさん
2008/02/05(火) 01:21:100019デフォルトの名無しさん
2008/02/05(火) 01:27:060020デフォルトの名無しさん
2008/02/05(火) 01:43:06あ、ごめん、やっぱり subst の引数は seq になってるから
まだ、string にしか実装されてないってことだった。
0021デフォルトの名無しさん
2008/02/05(火) 01:52:50inferior-lisp-programでArcを指定する方法はやったんだけど、
SLIME とかで使えんのかな
0022デフォルトの名無しさん
2008/02/05(火) 02:14:100023デフォルトの名無しさん
2008/02/05(火) 03:06:020024デフォルトの名無しさん
2008/02/05(火) 07:36:38seq ってのは文字列とリストのことなんかね。
arc> (findsubseq '(c) '(a b c d))
2
arc> (findsubseq "c" "abcd")
2
arc>
0025デフォルトの名無しさん
2008/02/05(火) 09:26:41ワクワクするよな
0026デフォルトの名無しさん
2008/02/05(火) 17:38:15Schemeと何が違うんじゃ ってのは勘弁して。
(def fact (n)
(if (is n 0)
1
(* n (fact (- n 1)))))
0027デフォルトの名無しさん
2008/02/05(火) 17:45:100028デフォルトの名無しさん
2008/02/05(火) 19:10:100029デフォルトの名無しさん
2008/02/05(火) 19:47:27Schemeはマクロやモジュールをどうするかで悩んでる
その結果、変な言語でマクロを記述したりR6RSでREPLがなくなったりしてる
Arcはその辺に関して楽観的というか何も考えてないっぽい
0030デフォルトの名無しさん
2008/02/05(火) 19:52:01若くて元気で楽観的な青年 = Arc
は、そのうち何とかな〜るだろ〜お。
0031デフォルトの名無しさん
2008/02/05(火) 20:07:05arc> (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>
0032デフォルトの名無しさん
2008/02/05(火) 21:47:270033デフォルトの名無しさん
2008/02/05(火) 21:56:360034デフォルトの名無しさん
2008/02/05(火) 21:57:500035デフォルトの名無しさん
2008/02/05(火) 22:33:160036デフォルトの名無しさん
2008/02/05(火) 22:33:450037デフォルトの名無しさん
2008/02/05(火) 22:35:34Guy L Steel兄貴の存在
0038デフォルトの名無しさん
2008/02/05(火) 22:37:070039デフォルトの名無しさん
2008/02/05(火) 22:39:050040デフォルトの名無しさん
2008/02/05(火) 22:39:50オライリーの本
0041デフォルトの名無しさん
2008/02/05(火) 22:43:030042デフォルトの名無しさん
2008/02/05(火) 22:45:010043デフォルトの名無しさん
2008/02/05(火) 23:00:05けっこう発見があって面白い。黒川利明先生のLispの本にあったLispでLispを記述
する部分を思い出している。
ところでnamespace-set-variable-value!ってどこで定義しているのかと探しても
見つからない。プリミティブだった。へ〜。そんなのあるんだ。
(namespace-set-variable-value! 'a 1)
> a
1
> namespace-set-variable-value!
#<primitive:namespace-set-variable-value!>
>
0044デフォルトの名無しさん
2008/02/05(火) 23:02:230045デフォルトの名無しさん
2008/02/05(火) 23:09:320046デフォルトの名無しさん
2008/02/05(火) 23:10:080047デフォルトの名無しさん
2008/02/05(火) 23:14:38Schemeファイルとして出力される。
> (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|))))))
0048デフォルトの名無しさん
2008/02/05(火) 23:25:29スレ違いだがストールマンは?
0049デフォルトの名無しさん
2008/02/05(火) 23:32:510050デフォルトの名無しさん
2008/02/05(火) 23:33:020051デフォルトの名無しさん
2008/02/05(火) 23:33:30ストールマンは何で実装されてるの?
0052デフォルトの名無しさん
2008/02/05(火) 23:40:000053デフォルトの名無しさん
2008/02/05(火) 23:40:22で、xdefで関数名に _ を追加して名前空間にセットしているらしい。
(sin 3.14)がコンパイルされると
(ar-funcall1 _sin 3.14)
1000行くらいなら読めるしPaul Grahamが残したらしいコメントから
彼の思考過程を探ることもできそうだ。こりゃ、面白いぜ。
0054デフォルトの名無しさん
2008/02/06(水) 00:11:160055デフォルトの名無しさん
2008/02/06(水) 00:18:17(2 1 3)
なにこれ
0056デフォルトの名無しさん
2008/02/06(水) 07:27:58IronScheme
0057デフォルトの名無しさん
2008/02/06(水) 19:15:19http://natal.web.fc2.com/lambda.arc.txt
0058デフォルトの名無しさん
2008/02/06(水) 19:53:26あなた、すごい人だね。
解説、頼みます。
0059デフォルトの名無しさん
2008/02/06(水) 21:37:260060デフォルトの名無しさん
2008/02/06(水) 22:17:190061デフォルトの名無しさん
2008/02/06(水) 22:34:060062デフォルトの名無しさん
2008/02/06(水) 22:42:45> S式に囚われている限りRubyは勝てないね
だよ。
0063デフォルトの名無しさん
2008/02/06(水) 22:43:380064デフォルトの名無しさん
2008/02/06(水) 22:45:10単なるschemeの別バージョンならschemeスレでやれってこと。
糞スレ立てるなってこと。
0065デフォルトの名無しさん
2008/02/06(水) 22:47:270066デフォルトの名無しさん
2008/02/06(水) 22:48:10SchemeよりはむしろLispに近いと思うが
0067デフォルトの名無しさん
2008/02/06(水) 23:29:34(ac s env) のssyntax? って何だろう?と首をひねっていた。
car:cdr は〜、なるほど。
cccの使い方ってそれはバックトラック?
忙しいのかね〜。出てきて教えて欲しいね〜。
0068デフォルトの名無しさん
2008/02/07(木) 00:10:35Lisp-1 + hygienic macro = Scheme
Lisp-1 + legacy macro - パッケージシステム = Arc
らしい。ここの shiro さんのコメントより。
ttp://d.hatena.ne.jp/archacker/20080203/1201988205#c
0069デフォルトの名無しさん
2008/02/07(木) 00:18:2857じゃないけど、このcccの使い方はいわゆる大域脱出ってやつかな。
Common Lispだとblock/return-from、他の言語だとtry/catch/throw等の
例外機構を使う。
0071デフォルトの名無しさん
2008/02/07(木) 00:34:46マクロは竹内先生の本で覚えたのでlegacy macroの方が
自分にとってはわかりやすい。
Arcの方がなんとなくLispっぽいし気楽な感じでいいかも。
0072デフォルトの名無しさん
2008/02/07(木) 00:38:36「- パッケージシステム」は必要ない希ガス
0073デフォルトの名無しさん
2008/02/07(木) 00:43:160074デフォルトの名無しさん
2008/02/07(木) 00:54:04あーそうだね、そのまま引用しちゃったから気がつかなかった。
ちょっと補足。
関数と変数の名前空間に区別がないのがLisp-1で、区別があるのがLisp-2。
0075デフォルトの名無しさん
2008/02/07(木) 01:18:070076デフォルトの名無しさん
2008/02/07(木) 01:46:350077デフォルトの名無しさん
2008/02/07(木) 11:22:18いやー、あの人は現状のArcの出来だったらボロクソに言うと思うけどww
今後Arcは開発コミュニティによってどう育って行くのか楽しみだね。
0078デフォルトの名無しさん
2008/02/07(木) 13:46:02バージョン0のものを叩くってのは空気の読めないアホだけだよ
0079デフォルトの名無しさん
2008/02/07(木) 21:39:43こんなことをやってみた。
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) ... )をいじればいいのかな。
0080デフォルトの名無しさん
2008/02/08(金) 06:42:25そんなの無かったので追加してみた。
(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"
0081デフォルトの名無しさん
2008/02/09(土) 03:43:45明示的に変数名も入れられるとベターなんだけど。
[< a b c > ...]みたいな
0082デフォルトの名無しさん
2008/02/09(土) 08:05:390083デフォルトの名無しさん
2008/02/09(土) 08:21:22[]は元々違う意味ですよ?(superbrace)
0084デフォルトの名無しさん
2008/02/09(土) 08:50:360085デフォルトの名無しさん
2008/02/09(土) 09:55:53しかし fn や if の定義は変更できないほうがいい
0086デフォルトの名無しさん
2008/02/09(土) 10:07:42みたいな事書いてたけど、[]は数学的根拠はないよね。
if辺りの拡張も俺言語オナニーと発想レベルは同じ。
長生きしないでしょう。
0087デフォルトの名無しさん
2008/02/09(土) 11:58:02たとえば、関数適用とラムダ抽象は全然違うんだから全然違うカッコを使うべきだとか
0088デフォルトの名無しさん
2008/02/09(土) 15:15:45まあ定着するかどうかは微妙だと思うけど。
0089デフォルトの名無しさん
2008/02/09(土) 22:04:44長生きさせる気無いんじゃない?
というか最近、彼の一流の技術者的なジョークなんじゃないかという疑いを持つようになった。
あーだこーだ言ってる俺を見てほくそ笑んでるんでは無いかと。
Ctrl-Cの人はそれに気付いてジョークで返したんでは無いかと。
そうやっていつもアイツらは俺を笑ってるんだ。クソ!
0090デフォルトの名無しさん
2008/02/09(土) 22:24:53Paranoid schizophreniaの可能性がありますので医師に御相談ください
0091デフォルトの名無しさん
2008/02/09(土) 22:29:35Arcのソースにdefine-syntaxが一度たりとも出てこないのはわざとだろうなぁ
0092デフォルトの名無しさん
2008/02/10(日) 10:16:44>[]は元々違う意味ですよ?(superbrace)
いつの時代の話してんの?w
その処理系つかったことあるの?w
0093デフォルトの名無しさん
2008/02/10(日) 11:12:31なめんな。お前みたいな俄かLisperとは違うわ。
大した手間でもないから、わざわざ自分の
処理系には必ず入れていたぐらい精通してるよ。
後でマイナーな存在だと知ったけどな。
結局、閉じ括弧が減った程度じゃ、
一般人にLispは受け入れられないと悟った。
俺も色々変態構文は作ってきた方だが、
arcの[]みたいな使い方は思いつかなかった。
#fn <args> <expr> => (lambda <args> <expr>)
みたいな物ならいくつもあるが。
0094デフォルトの名無しさん
2008/02/10(日) 11:22:210095デフォルトの名無しさん
2008/02/10(日) 12:31:02わりと論旨がとっちらかってて、なにが言いたいのか分からないんだけど、
でも、なんだか凄い人なのは理解できたかも!!!!!
Arcに超カッコが取り入れられる日も近い!
一般人への啓蒙のためにも[]は超カッコで、#L()を採用するべきだわ。
それか、gooみたいに(op _)とかね!まあ、cutでも良いか!
ちなみに#fn <args> <expr>って俄Lisperの漏れには
一見全然便利そうに見えないんですけど、どういうところで、
便利なんですか?!!!
どこまでが後悔関数の引数なのか分かんなくなって混乱しちゃいそうです!!
0096デフォルトの名無しさん
2008/02/10(日) 13:46:050097デフォルトの名無しさん
2008/02/10(日) 14:07:14まともなエディタがあれば要らないね。w
あと [ ] を vector と解釈する処理系も無かったっけ。Interlispだっけか。
0098デフォルトの名無しさん
2008/02/10(日) 14:22:410099デフォルトの名無しさん
2008/02/10(日) 15:35:480100デフォルトの名無しさん
2008/02/10(日) 16:01:42「わりとなんだか凄い人」なのは判ってくれたようだが、
分からないのは理解しようと努力してないからだ。
>ちなみに#fn <args> <expr>って俄Lisperの漏れには
さて、この変態構文の例を>>7のコードで示せばこうなる。
(trues #fn (_) (if (odd _) (+ _ 10)) '(1 2 3 4 5))
何が便利かはこれで判るだろ。
少なくともarcの[]の様なナンセンスな仕組みよりも、
何を意図するものか判り易い。
付け足すなら、短く書きたいという願望は判るが、
arcの[]は引数が'_'限定では述語ぐらいにしか使えないし、
'_'という名前が名前だけに、読み手に意図も伝えられない。
実際に[]が入っているコードを見たら、頭を1回転させないと
判らない難解さを感じた。
いくら短く書けてもぱっと見で意味不明なのは問題だろうよ。
lambdaをfnに変えたぐらいのセンスで、もうひと捻り欲しい。
0101デフォルトの名無しさん
2008/02/10(日) 16:20:44センスが悪いと生きるのも大変だろうね。
0102デフォルトの名無しさん
2008/02/10(日) 16:28:410103デフォルトの名無しさん
2008/02/10(日) 16:30:22単に慣れないから不自然に見えるだけなのか、根本的に使いにくい構文なのかが一見では区別できない
0104デフォルトの名無しさん
2008/02/10(日) 16:36:49自分の中に入りすぎていて論旨がわかりにくい。
もうちょっと行数を減らしてくれないと読むのが苦痛だ。
■ このスレッドは過去ログ倉庫に格納されています