- 1 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 23:16:33 ]
- ※ ここはCommon Lisp、SchemeをはじめとするLisp族全般のスレです ※
Part24: ttp://pc11.2ch.net/test/read.cgi/tech/1224939205/ Part23: ttp://pc11.2ch.net/test/read.cgi/tech/1215875388/ Part22: ttp://pc11.2ch.net/test/read.cgi/tech/1211381920/ Part21: ttp://pc11.2ch.net/test/read.cgi/tech/1207300697/ Part20: ttp://pc11.2ch.net/test/read.cgi/tech/1205021786/ Part19: ttp://pc11.2ch.net/test/read.cgi/tech/1200237296/ Part18: ttp://pc11.2ch.net/test/read.cgi/tech/1186922295/ Part17: ttp://pc11.2ch.net/test/read.cgi/tech/1177065699/ Part16: ttp://pc11.2ch.net/test/read.cgi/tech/1172404795/ Part15: ttp://pc10.2ch.net/test/read.cgi/tech/1151025773/ Part14: ttp://pc8.2ch.net/test/read.cgi/tech/1132275726/ Part13: ttp://pc8.2ch.net/test/read.cgi/tech/1115901841/ Part12: ttp://pc8.2ch.net/test/read.cgi/tech/1100229366/ Part11: ttp://pc5.2ch.net/test/read.cgi/tech/1091456033/ Part10: ttp://pc5.2ch.net/test/read.cgi/tech/1075630259/ Part09: ttp://pc2.2ch.net/test/read.cgi/tech/1069594582/ Part08: ttp://pc5.2ch.net/tech/kako/1058/10582/1058263391.html Part07: ttp://pc5.2ch.net/tech/kako/1042/10421/1042167213.html Part06: ttp://pc3.2ch.net/tech/kako/1031/10315/1031560687.html Part05: ttp://pc3.2ch.net/tech/kako/1023/10230/1023091882.html Part04: ttp://pc.2ch.net/tech/kako/1016/10162/1016211619.html Part03: ttp://pc.2ch.net/tech/kako/1008/10082/1008220265.html Part02: ttp://pc.2ch.net/tech/kako/1002/10025/1002584344.html Part01: ttp://piza2.2ch.net/tech/kako/987/987169286.html
- 331 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 09:01:55 ]
- Stalinって実際どんな感じ?
- 332 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 09:49:25 ]
- StalinってCを出力するんでしょ?
Cより速くなる事は無いと思うけど… Cで「人間が」書くより速くなる事ならあるかもしれないけど
- 333 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 10:13:08 ]
- stalin ... それは、かつてソ連で大量虐殺をおこなった恐怖の支配者。。。
だから 非人間的な行動(コード)だろ?人間が書くCのコードより速いってことじゃ?
- 334 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 12:45:31 ]
- Stalinは、人間がかくCコードよりかなり早い場合も多い。
ただし、継続が使えないとか制限が多いし、コンパイル時間がめっちゃかかる。 >>332 > Cより速くなる事は無いと思うけど… > Cで「人間が」書くより速くなる事ならあるかもしれないけど こんなこというやつ初めて見た。
- 335 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 13:00:30 ]
- そうか?理論値と実情を別に語るのは良くあると思うが。
- 336 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 14:49:32 ]
- だって、人間が書いたものではないCを含めて 「C言語より速い」
を語るなら、それって実質的にCコンパイラの最適化の差に帰着するじゃん。 コンパイラによってはCから (ほぼ)最小のアセンブリを生成できることだってできるし、 そうすると何をもって「Cのソース」とするのかって話になって、 「Cのソースを吐くんだからCより速いはずがない」 っていう議論は空虚じゃない? まぁ言い出しておいてアレだけどスレチだな。すまん
- 337 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 15:49:25 ]
- Stalinの話は定期的にでてくるけど、流れとしては・・・
「同じ問題を解くのに俺様の書いたCよりXXにあるStalinのコードの方が速かった!」 「でも俺様のCのコードがヘボいことはありえない!そんなことは考えられない!」<- これが間違い 「Stalinはどんな魔法を使ってるんだ!スゲーよStalin!」 一部で盛り上がるけどスルーする人も多い。 同じ速度を出すのにStalinを使った方が簡潔に短時間で書けるというのはあると思う。 だからあれほどコンパイル時間がかかってもユーザーは気にしないんじゃないかな。
- 338 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 17:31:09 ]
- まぁStalinはある種の一発モノだからな。
研究とか勉強の材料としてはすごいけど、プロダクションでは使えないから 盛り上がるのは一部にとどまる。 俺は盛り上がった派だけどw 最適化の解説の論文は勉強になった
- 339 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 21:26:10 ]
- schemeのマクロを使って
見た目から括弧を無くしていくことって出来ますか? 例えば括弧のない1 + 2を3と評価するとか for リスト do 処理 done みたいな構文がmapの意味で動くようにしてみたい
- 340 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 21:34:29 ]
- >>339
まえにどっかでみたことがある。srfiなんとか だったと思う。
- 341 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 01:17:57 ]
- SRFI 49のI-expressionsは、インデントで構文木を表す表記法であって、
マクロは関係なかった気がするんだけど、違ったっけ?
- 342 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 06:02:54 ]
- SRFI 49: Indentation-sensitive syntax
srfi.schemers.org/srfi-49/srfi-49.html 最高にキモい Lisp コードを書いてみよう with 100 行リーダーマクロ lispuser.net/memo/lisp/2006-03-30-23-58.html
- 343 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 12:45:19 ]
- つ Standard Lispの記号モード
- 344 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 15:44:53 ]
- >>339
「schemeのマクロを使って」も マクロ使用を囲う括弧と、マクロ名さえあれば中置記法もできます。 ただしこの3つをなくするのはRnRSではできない。 処理系によってはリーダマクロをサポートしているのでそれを使うと可。
- 345 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 20:11:25 ]
- なるほど、やはり出来ないのかー
リーダーマクロ、存在だけは知ってましたが コンパクトでかっこいいSchemeで出来たらなぁって思いまして 昨日考えてたんですが、 Schemeには演算子の優先順位がないのが原因でしょうね もし優先順位がつけば、括弧省略出来る それはそれで、F#やらHaskellやらでみかける パイプライン演算子みたいなのが定義出来たり、と夢が膨らむが 言葉に表せない大切な物が犠牲になってしまう気がします >マクロ使用を囲う括弧と、マクロ名さえあれば中置記法もできます。 これ非常に興味あるんですが、どういうことでしょうか? 適当に試してはみたんですが、わかりません (define-syntax plus (syntax-rules () ; ((x _ y) (+ x y)))) ; ((x (_) y) (+ x y)))) ; (((x _ y))(+ x y)))) Gaucheの拡張で優先順位を計算して括弧を省略ってページなら見つけましたが そういった話でしょうか?
- 346 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 20:42:16 ]
- こういうことじゃないの
(define-syntax calc (syntax-rules (+ -) ((_ a + . rest) (+ a (calc . rest))) ((_ a - . rest) (- a (calc . rest))) ((_ a) a) ) ) > (calc 1 + 10 - 5) 5
- 347 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 20:44:04 ]
- 5かよ
- 348 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 20:44:55 ]
- > Schemeには演算子の優先順位がないのが原因でしょうね
> >マクロ使用を囲う括弧と、マクロ名さえあれば中置記法もできます。 > これ非常に興味あるんですが、どういうことでしょうか? そうゆう reader を作ればいいじゃね? 作るだけだったら誰でも作れると思うし…
- 349 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 20:45:29 ]
- >>345
俺は344じゃないけど、344の言ってることは違う。 344が言ってるのは、「一番その側のカッコがあれば」 ということ。 いちばん外側のカッコは、どう頑張ってもRnRSでは省略不可能。 しかし、一番外側のカッコとマクロ名を許容すれば、 そのマクロの引数を全部自力で解釈すれば、そういうことは可能ということ。 文字通り、言語をもう1つ作るようなもんだけど。
- 350 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 20:46:54 ]
- × 一番その側
○ 一番外側
- 351 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 21:16:51 ]
- >>344
これ面白いなぁ。 引き算は (calc 1 - 2 - 3) こう展開されてしまうから (- 1 (- 2 3)) 正しい値にならないね けど、面白いからちょっと考えてみます >>349 なるほど、勉強になります。 「マクロ使用を囲う括弧と、マクロ名さえあれば」 というのは、344氏の例でいけば、 一番外側の()とマクロ名であるcalcっていう意味なわけですね そして、それより内側であれば、がんばり次第で自由自在だ、と。
- 352 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 21:51:26 ]
- ('A`)y-~
- 353 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 02:20:27 ]
- そもそも、何で括弧なくしたいんだ?
知的好奇心満たしたいだけなら何も言わんが。
- 354 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 07:19:11 ]
- Lisp Scheme初心者です。マグロウヒルの「プログラムの構造と実行」をテキストに
Schemeを勉強しようと思っています。 そこで皆様のアドバイスをお願いしたいのですが、どのScheme処理系がお勧めでしょうか? あまりにもたくさんありすぎて判断できません。 OSはWindows XPです。よろしくお願いします。
- 355 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 08:44:21 ]
- >>354
windows上で勉強目的なら統合環境のほうが楽だろうしPLT schemeで良いんじゃないかな。 さもないなら、linux上でemacs+gauche(日本語の本があるから)とかでも良いように思うん だけどね。
- 356 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 15:03:43 ]
- >>338
stalinがダメなら 記述力と速度を同時に達成できるのって ocamleぐらい?
- 357 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 16:11:06 ]
- GCの停止時間がなくて
記述力も同時に達成できるのはC++しかないんだぜ
- 358 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 16:19:51 ]
- 確か2月前半ぐらいに
comp.lang.lisp でreadable なlisp -> C 変換の話がでてたはずなのに見つからない
- 359 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 16:55:36 ]
- C++はOOPの振りをした関数型言語だからな
- 360 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 17:34:58 ]
- >>359
テンプレートで遊ぶ分にはそうだけどな
- 361 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 18:16:37 ]
- OOPは言語関係ねーす
- 362 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 18:20:23 ]
- c++でoneceonlyマクロって書けるんだろうか
前にoneconleyできない関係で何度も代入評価されてる 「そんなエラー絶対みつかんないだろう」ってエラーがboost関係で報告されてた
- 363 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 19:39:11 ]
- >>353
どっちかっていうと実用的な理由 ・タイプ量を減らしたい ・括弧がネストすると、対応が激しくおいづらい
- 364 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 19:48:59 ]
- emacsを使えばそんなこと屁でもないな
むしろ()がある方がタイプ量が減るし、移動が楽ってぐらいになる 逆にエディタの支援が無いとなるとなるほどそれは確かに致命的だ
- 365 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 20:09:55 ]
- エディタの機能でどうのこうのっていうのは
言語の話とは別のような・・ 俺もemacsは使ってるが >()があるほうがタイプ量が減る それはない letよりlet1のほうが読みやすいし打ちやすい
- 366 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 20:26:16 ]
- >>363
実用的な理由で括弧を消すのはないだろー。 前者の理由なら、そのために高階関数やマクロがある。 後者の理由なら、そのためにエディタの支援機能がある。 というか、インデントで対応を追うのが普通。 まあ、実際にやってみて、構文を増やす度に複雑化する、 仕様やリーダーマクロのメンテにうんざりしてみれば、 その辺良く分かるとは思うけど。
- 367 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 20:34:54 ]
- 実用ってことはコードを編集することを含むだろう?
ならエディタは関係あるじゃないか
- 368 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 20:52:06 ]
- emacsの括弧うんぬんはいじる方の腕しだいで楽になる。
- 369 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 20:56:54 ]
- emacs はこのへんを組み込んでるかどうかでも全然ちがうよ。
1. insert-parentheses を使ってるかどうか 2. show-paren-mode を使ってるかどうか 3. transient-mark-mode を使ってるかどうか
- 370 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 20:57:00 ]
- >>365
プログラムのコードのタイプ量は減るだろうけど、 編集作業全体のタイプ量は驚きの増加量、って感じになる気がするよ。 S式単位での編集を使わないと、移動に掛かる手間が段違い。
- 371 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 21:03:44 ]
- emacs userは1匹見ると10匹いると思え
- 372 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 21:06:15 ]
- >>371
ごきぶりみたいにいうな にがわらひ 370みたいなべてらんもいるけど、C-F C-B C-N C-Pもままならずマウスな初心者も いるから。 viでもlispモードは普通にあるよ。
- 373 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 21:36:25 ]
- >>371
むしろ1匹しかいない絶滅危惧種扱いの所が多いよ。
- 374 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 22:18:10 ]
- google trendsをみても検索数の指数は減ってるけど、多い地域はアカデミックなところが
多いね。日本も亜米利加もね。
- 375 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 23:15:14 ]
- 俺ベテランじゃなくて異端。
viper-modeで、viとEmacs両方のキーバインドを同程度に使う変態。
- 376 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 23:19:42 ]
- vipperかお?
- 377 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 23:22:13 ]
- お じゃない。
- 378 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 23:27:08 ]
- >>375
viper-modeかぁ。15年以上起動したことがない。笑い
- 379 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 23:31:02 ]
- >>375
___l___ /、`二//-‐''"´::l|::l l! ';!u ';/:::l ', ';::::::l ';:::::i::::: ノ l Jヽ レ/::/ /:イ:\/l:l l::l u !. l / ';:::l ', ';:::::l. ';::::l::::: ノヌ レ /:l l:::::lヽ|l l:l し !/ ';:l,、-‐、::::l ';::::l:::: / ヽ、_ /::l l:::::l l\l ヽ-' / ';!-ー 、';::ト、';::::l::: ム ヒ /::::l/l::::lニ‐-、`` / /;;;;;;;;;;;;;ヽ! i::::l::: 月 ヒ /i::/ l::l;;;;;ヽ \ i;;;;;;;;;;;;;;;;;;;l l::l::: ノ l ヽヽノ /:::l/:l /;;l:!;;;;;;;;;', ';;;;;;;;;;;;;;;;;ノ l:l::  ̄ ̄ /::::;ィ::l. l;;;;!;;;;;;;;;;;l `‐--‐'´.....:::::::::!l __|_ ヽヽ /イ//l::l ヽ、;;;;;;;ノ.... し :::::::::::::::::::::ヽ /!リ l | ー /::::l';!:::::::::::::::::::: u ', i ノ l | ヽー /イ';::l ’ し u. i l l | /';:';:!,.イ し 入 l l U | /,、-'´/ し / ヽ、 u し ,' ,' l | /l し _,.ノ `フ" ,' ,' ,ィ::/: | /::::::ヽ ヽ / し ,' ,' / l:: | /::::::::::::`‐、 し ', / u ,、-'´ l,、- | ``‐-、._::::::::::` ‐ 、 ',/ , -'´`'´ ,-'´ | _,、-‐'"´';:::::::::イ:l';:::` ‐ 、._____,、-‐'"´ u / | | | | \ l::/ l::::::/リ ';:::::lリ:::::l';:::l l:l:::::l\ u / | | | |
- 380 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 23:56:13 ]
- >>375
viperモードたまに使うけど、完全に終了させる方法教えて下さい。 viper-go-away しても別のファイル開いたらまたviperになってて、 仕方ないからemacs毎再起動してる。
- 381 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 02:13:24 ]
- >>380
せっかくなので、ソースコードを読んで原因を探ってきました。 viper-go-awayを呼ぶと、viper.elのviper-remove-hooksで、 仕掛けていた各メジャーモードのフックを解除していくのですが、 コードを見ればお分かりの通り、とても素敵なバグがありまして、 find-file-hooksとかは完全スルーです。 なので、自分でコードを修正するか、本家にフィードバックするか、 俺のようにVIPER常駐野郎になるか選んでください。
- 382 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 04:40:02 ]
- と思ったんだけど、追加で調べていったら、
デフォルトのメジャーモードを元に戻さないってバグもあって、 これが本筋っぽい。CVS最新版では修正されてる。 ↓を.emacsに追加でひとつ。 (defadvice viper-go-away (after revert-default-major-mode activate) (setq default-major-mode 'fundamental-mode))
- 383 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 08:37:29 ]
- maximaの細かいbugが未だに放置なのは
common lispの問題なんだろうか schemeで書かれてるならbugは少なくなるんだろうか
- 384 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 11:34:14 ]
- 妄想はそのくらいに
- 385 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 19:45:52 ]
- もともと"Common Lisp"じゃないものをGCLに、そして"Common Lisp"に書き直したからじゃない?
最初から"Common Lisp"で書かれていたら違っていたかも Maxima使ってないからよくわからないけど
- 386 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 23:21:25 ]
- 質問。この2つに違いってありますか?
(define (f x) (define g 10) (+ x g)) (define (g x) (let ((h 10)) (+ x h)))
- 387 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 23:29:49 ]
- 5.2.2 internal definitionsに変らないと書いてある。
> A <body> containing internal definitions can always be converted > into acompletely equivalent letrec expression.
- 388 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 23:45:33 ]
- (define (g x)
(letrec ((h 10)) (+ x h))) となら同じ、が正しいのでは? letとletrecは違う この例はたまたまコンビネータ式が束縛されているに過ぎない (正確には式が束縛されているわけではないけど)
- 389 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 23:53:51 ]
- 質問の意図によるだろうけど
最終的な機械語に落とす段階では同じコードになる
- 390 名前:388 mailto:sage [2009/02/26(木) 23:57:23 ]
- とはいったものの、束縛する式が1つならSchemeレベルではletとletrecは等価ですね
- 391 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 00:01:31 ]
- >>387
ありがとうございます 自分の知らない、 何か違う意味があるんだろうと思って質問したんですが letrecと同じ意味なんですね
- 392 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 00:01:49 ]
- おっちょこちょいですね。
- 393 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 00:04:11 ]
- >>391
>>386の例ではletで問題ない。
- 394 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 00:11:24 ]
- >>393
了解です。Schemeってシンプルですね。ありがとうございます
- 395 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 00:20:22 ]
- >>387
編集ミスった。 acompletely→a completely 否定のa-に見えてしまう すまん
- 396 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 10:00:52 ]
- さしずめ「うは宇宙のう」
- 397 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 21:31:01 ]
- >>382
遅くなったけどありがとう。これでviperモードと仲良く暮らせそうです。
- 398 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 08:07:26 ]
- お
- 399 名前:デフォルトの名無しさん [2009/02/28(土) 09:35:38 ]
- 399
- 400 名前:デフォルトの名無しさん [2009/02/28(土) 09:36:03 ]
- 400
- 401 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 18:05:35 ]
- shibuya.lisp ストリーミング中!
って今ごろ気付いたorz
|

|