- 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
- 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
- 402 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 23:49:13 ]
- 見逃した……
ニコニコ動画辺りに上げてくれないかあ
- 403 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 20:33:59 ]
- >>402
マイリスト Shibuya.lispテクニカルトーク#2‐ニコニコ動画(ββ) www.nicovideo.jp/mylist/11305224
- 404 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 20:48:54 ]
- >>403と投稿者に感謝を
- 405 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 20:57:15 ]
- >>403
マジでありがとう!!
- 406 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 01:21:33 ]
- 他の関数型言語でこの手の集まりをみないのは
学会で代用してるからなのだろうか
- 407 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 01:33:04 ]
- >>406
勉強会ならあるけどな。
- 408 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 05:19:41 ]
- >>403
あー、配信のときとは別テイクで音声がずいぶん聞きやすくなってる! ありがとうございます。
- 409 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 10:57:50 ]
- >>406
HaskellとかOCamlだと人がそんなにまだ多くないし(Lispに比べれば)、 ゲーム作りましたみたいな大きいネタとか、その筋なら誰でも知ってる大先生とか そういうのないからねぇ。 さがせば>>407が書いてるみたいに勉強会とかあるからメイリングリストとか 入ってみれば? 今時捨てアドのひとつやふたついくらでも作れるし。
- 410 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 17:06:35 ]
- lispが多いといってもschemerが多いんじゃない?
やはり、川合さんとか、処理系製作者が3人もいるくらいだからね。 common lispは人は少ないよ。Qiやclojure,newLispに至っては壊滅的。 そーいえば、abclがバージョンアップしてたな。
- 411 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 17:12:46 ]
- ircを覗くと、常駐者が
#lisp 250 #haskell 550 #ocaml 50 #scala 50 #clojure 100 #ruby 250 くらいみたいだね。haskellがなんでこんなに多いんだ?
- 412 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 18:35:37 ]
- has略は中ニ設定豊富だからな
- 413 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 22:33:36 ]
- pc11.2ch.net/test/read.cgi/tech/1234635513/378
自分はLispが全然書けないけど、どんだけ短くなるのか見てみたいです。 どなたお願いします〜
- 414 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 00:34:29 ]
- >>410
Qiというものを始めて知りましたが、Haskellっぽくて面白そうですね。 ところで皆さんはこういった面白い実装の情報をどこで得てるんでしょうか? 英語のメーリングリストなのかな?とは思ってるんですが・・・
- 415 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 01:00:31 ]
- >>414
それはねぇ。。。こまめに調べてるだけよ。ふふふ。。。lisperがあつまる日本語のチャット も情報源だよ。 うんQiはHaskellっぽいね。
- 416 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 01:13:41 ]
- ttp://www.zazzle.com/lisp+gifts
これがメリケンだ!?
- 417 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 02:06:13 ]
- >>416
made with secret alien technologyのシャツが無いなんて信じられん
- 418 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 03:44:57 ]
- schemer多いのはシンプルだからなんだろうか
- 419 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 03:50:50 ]
- Qi ECLでは駄目なんだ・・・
高速化って書いてるから期待したのに
- 420 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 04:18:51 ]
- >>413
(use srfi-1) (define request '((hoge . 1) (fuga . 2) (piyo . 3))) (filter (lambda (x) (member (car x) '(hoge fuga))) request) とか
- 421 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 08:26:08 ]
- >>414
Planet LispってRSSあるよ。
- 422 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 09:50:56 ]
- >>421
おおっ、有り難うございます!! さっそくGoogle Readerに追加しました。
- 423 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 12:07:00 ]
- >>420 3行目 srfi-26使って(gaucheならuse不要)
(map (cut assoc <> request) '(hoge fuga))
- 424 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 12:13:58 ]
- ハッシュテーブルに代入したら負けですねわかります
- 425 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 13:20:03 ]
- (defvar *request* (make-hash-table))
(mapc #'(lambda (elem) (setf (gethash (car elem) *request*) (cdr elem))) '((hoge . 1) (fuga . 2) (piyo . 3) ...)) (let ((res (make-hash-table))) (mapc #'(lambda(key)(setf (gethash key res) (gethash key *request*))) '(hoge fuga piyo)) res) とくに簡潔ではないな。
- 426 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 21:48:35 ]
- schemeで論理の勉強しようと思って
(tflist n)で#tと#fの組み合わせを列挙してくれる関数を書こうとしたんだが 意外と難しい 最初mapで#t → (#t #f) (#t #t)という風に書こうとしたが これだとflattenが居るし、flattenを再帰で呼び出してみたら 全部平らになってしまって(#t #t #t #t #t #f #t #f #t ...)みたくなっちまった 誰かたすけて 動作イメージ (tflist 1) '(#t #f) or '((#t) (#f)) (tflist 2) '((#t #f) (#t #t) (#f #f) (#f #t)) (tflist 3) '((#t #t #t) (#t #t #f) (#t #f #t) (#t #f #f) (#f #t #t) (#f #t #f) (#f #f #t) (#f #f #f))
- 427 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 22:07:54 ]
- (define (tflist n)
(cond ((<= n 0) '()) ((= n 1) '((#t) (#f))) (else (let ((l (tflist (- n 1)))) (define (add-t l) (cons #t l)) (define (add-f l) (cons #f l)) (append (map add-t l) (map add-f l))))))
- 428 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 22:08:27 ]
- (define (tflist n)
(if (= n 1) (list (list #t) (list #f)) (append (map (lambda (x) (cons #t x)) (tflist (- n 1))) (map (lambda (x) (cons #f x)) (tflist (- n 1))))))
- 429 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 23:19:22 ]
- >>427-428
おお、神よ。なるほど、(append (map..)(map..))の形になるのか もしよろしければもう1個 以下の例で最後の行は動くようになりませうか? ;guile/gaucheでどちらもエラー (define (mujunritu p) (not (and p (not p)))) (define (haityuritu p) (or p (not p))) (define (try1 f) (map f '(#t #f))) (try1 mujunritu) ;これがダメ。try1のfでλx(apply f x)やλx(eval(f x))も試してみたものの (map try1 '(mujunritu haityuritu)) OCamlでは動作 let mu p = not (p && (not p));; let hai p = p || (not p);; let tr f = List.map f [true;false];; List.map tr [mu;hai];;
- 430 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 23:23:52 ]
- >>420>>425
サンクス。今の自分じゃ全然理解できないけどorz
- 431 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 23:25:52 ]
- 前きたquote判ってない人かね
- 432 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 23:28:26 ]
- >>429
`(,mujunritu ,haityuritu)または(list mujunritu haityuritu) '(mujunritu haityuritu)との違いわかるかな
- 433 名前:前きたquote判ってない人 mailto:sage [2009/03/03(火) 23:55:18 ]
- >>431
別人です。あれからROMしかしてないですよ。
- 434 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 00:52:37 ]
- >>432
Lisp属の初心者には、このあたりは難しすぎます 調べるのは本当に大変でしたが、何とか見つかりました ttp://www.ice.nuie.nagoya-u.ac.jp/~h003149b/lang/comparison.html これのことですよね? Common Lispでも、関数引数に関数実体も名前も両方使える。 (略) Schemeでは、関数しか受けとらない 確かに、CLでは両方動作することを確認 (defun muj (x) (not (and x (not x)))) (defun hai (y) (or y (not y))) (defun tr (f) (mapcar #'(lambda (z) (funcall f z)) (list t nil))) (mapcar #'tr (quote (hai muj))) (mapcar #'tr (list 'hai 'muj)) schemeの場合 (list mujunritu haityuritu)だと関数実態が返ってくるが (quote (mujunritu haityuritu))だと名前が返ってくる schemeにもCLのsymbol-functionみたいな関数があれば quoteのほうでも動作すると思い調べてみたものの 該当の関数が全然見つからない\(^o^)/ しかし、関数はおいといて、この考えでたぶん、大丈夫ですよね?
- 435 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 01:20:53 ]
- >>434
つ「eval」
- 436 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 02:00:08 ]
- quoteとevalは静的スコープな言語にふさわしくないとつくづく思う
- 437 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 02:12:51 ]
- スコープと評価が?
- 438 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 02:50:43 ]
- schemeのシンボルは文字列に毛の生えた特殊オブジェクトと思えばよろし。
プログラム内でそのシンボルに何が束縛されているかとは基本的に全く関係ない。
- 439 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 07:25:51 ]
- R5RS の eval だと、その時点の環境での評価ができないから symbol-function の代わりにはできないし。
- 440 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 12:06:53 ]
- あくまでも、定義中の名前はシンボルではなくただの変数の入れ物の
名前として使われる。また、プログラムを実行するには変数の位置を 表現できれば名前のような冗長な情報は必要ない。 よって名前は実行前のある時点でアドレスに変換されていると考えるべき。 evalやCLのsymbol-functionみたいな実行時にシンボルからその位置情報へ 変換する仕組みを作るとなると、処理系のインタプリタやコンパイラ相当を 必要時に起動するのと全く事になり、非常に馬鹿げたコストが掛かる。
- 441 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 12:13:45 ]
- >>436
evalはともかくquoteはこの件と関係ない
- 442 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 13:16:24 ]
- >>440
文章として突っ込みどころ多すぎw 内容的にも、後段のsymbol-functionについては、 特殊オペレータのfunctionと勘違いしているとしか思えない。 (defun foo () (print 'foo)) (flet ((foo () (print 'foolet))) (foo) (funcall (function foo)) (funcall (symbol-function 'foo)))) FOOLET FOOLET FOO
- 443 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 12:49:38 ]
- 急に流れが止まったから釣りかと思ったが
やっと>>422の言っていることがわかった symbol-functionってグローバルな関数定義しか参照しないんだな
- 444 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 13:48:24 ]
- schemeにシンボルが無いってことが少し分かってきた
やっぱ Common Lisp 最強だな!
- 445 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 14:16:03 ]
- >>442
(let ((foo #'(lambda () (print 'fooval)))) (flet ((foo () (print 'foolet))) (foo) (funcall foo) (funcall 'foo) (funcall (function foo)) (funcall (symbol-function 'foo)))) FOOLET FOOVAL FOO FOOLET FOO Common Lispは、symbol-valueとsymbol-functionが シンボルセル内の別スロット。 funcallは>>440の後段のような処理は、 functionに任せて、関数呼び出しに専念する仕様。 funcallの第一引数は関数か、シンボル。 シンボルの場合symbol-functionの結果を使う。
- 446 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 16:10:34 ]
-
何が真実なのかさっぱりわからんのでまとめてみたら カオスになった。つっこみ希望 ・evalは静的スコープにはふさわしくない 動的スコープなら1つしか環境を考えなくて良いためと想像 ・schemeのシンボルは文字列に毛の生えた特殊オブジェクト ・呼び出し (hoge)はレキシカルな環境での関数呼び出し(関数セル) (funcall hoge)はレキシカルな環境での関数呼び出し(値セル) (funcall 'hoge)は↓と同様。symbol-functionを使うため (funcall (symbol-function 'hoge))はグローバルに定義されたシンボルの関数呼び出し(関数セル) (funcall (function hoge))はレキシカルな環境での関数呼び出し(関数セル) レキシカル環境で同名の変数がある場合に グローバルなシンボルのsymbol-value(値セル)を参照する方法はなさそう >>442氏の440へのコメント ここのあたりが一番わからない symbol-functionは(トップレベル変数が動的スコープのため) 動的スコープを参照出来る →functionのようにレキシカルスコープの変数を考慮しなくてよい →symbol-functionに関してはevalもそんなにコストかからんぜ、ってこと?
- 447 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 17:43:08 ]
- >>446
442,445はCommon Lispのコードっていうのは分かってる? > ・evalは静的スコープにはふさわしくない これは俺も何が言いたいのかさっぱりわからんというか、 はっきり言って間違い。反証はScheme。
- 448 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 19:15:47 ]
- > evalは静的スコープにはふさわしくない
はLisp1.5世代の人の意見なのかな。
|

|