1 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 00:14:56 ] 過去スレ 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/ Part9: ttp://pc2.2ch.net/test/read.cgi/tech/1069594582/ Part8: ttp://pc5.2ch.net/tech/kako/1058/10582/1058263391.html Part7: ttp://pc5.2ch.net/tech/kako/1042/10421/1042167213.html Part6: ttp://pc3.2ch.net/tech/kako/1031/10315/1031560687.html Part5: ttp://pc3.2ch.net/tech/kako/1023/10230/1023091882.html Part4: ttp://pc.2ch.net/tech/kako/1016/10162/1016211619.html Part3: ttp://pc.2ch.net/tech/kako/1008/10082/1008220265.html Part2: ttp://pc.2ch.net/tech/kako/1002/10025/1002584344.html Part1: ttp://piza2.2ch.net/tech/kako/987/987169286.html
619 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 18:36:03 ] 束縛関係の解決と評価(この場合は変数参照)は違います。 束縛関係の解決とは C言語風に言えば「変数名がどのアドレスを指すかを確定する事」であり 実際にそのアドレスから値を読み込む事ではありません。 マクロ置換に於いては syntax-rulesの第一引数のリストに列挙されている識別子のみ アドレスも使ったマッチングが行われます。 syntax-rules ()のように識別子が無い場合はアドレスはマッチングに利用されません。 アドレスはマッチング、すなわちどの置換パターンを利用するかを決定するのにのみ利用されるだけです。 そして置換された後の式によって変数が参照されるかどうか決まります。 この場合は置換後の式が(set! variable newValue)なのでvariableは評価されません。 set!の第2引数は評価されるのでnewValueが変数参照されて900となります。 しかし置換後の式が例えば(+ variable newValue)ならば手続き呼出しですので +が変数参照されて#<procedure +>に variableが変数参照されて200に newValueが変数参照されて900に評価されてから 手続きが呼び出されます。
620 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 18:44:05 ] (A B C)のリストが評価される場合(A B Cは識別子) Aが構文に束縛されているかどうかを調べ ・構文に束縛されている場合 ・primitive構文に束縛されているなら、その評価規則に従って評価します。 ・マクロに束縛されているならパターンマッチを行い、テンプレートに従って置換した後、その式を評価します ・場所に束縛されているなら ・手続き呼出しを行います。AとBとCはすべて評価されますが、順番は決まっていません。 AやBやCが評価されるときに初めて変数参照として値が読み出されます
621 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 18:52:27 ] マクロ置換された式がリストならまた620の用に評価されます。 primitive構文はdefine、if、quote、lambda、set!のみで 他の構文は全てマクロです。(R5RSの場合。処理系独自のprimitive構文もあり得る。)
622 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 18:56:49 ] (A B C)という手続き呼出しの場合 AとBとCが評価される順番は決まっていませんが 手続きが呼び出される前には評価されます。 つまりAとBとCが評価された後にAが束縛されていた場所の値を手続きとして呼び出します。 もしAの場所の値が手続きでなければエラーとなります。
623 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 19:07:03 ] マクロのパターンマッチングは式の形(とリテラル識別子の場合は束縛されている場所)によってのみ行われます なので例えば (define x '(1 2)) (define-syntax foo (syntax-rules () ((foo (x y)) (list y x)) ((foo z) (list z)))) (foo x) -> '((1 2)) となります。 つまり(foo (x y))にではなく(foo z)にマッチした訳です。 (foo x) --(置換)-> (list x) --(部分式の評価)-> (#<procedure list> (1 2)) -> '((1 2)) というわけです。
624 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 19:35:58 ] リテラル識別子とのマッチングは 正しくはアドレスではなく束縛によって行われますので 構文に束縛されているリテラル識別子は 同じマクロ変換子に束縛されている識別子にマッチします。 構文に束縛されている識別子は 場所には束縛されていませんので アドレスという概念は当てはまりません。 ローカルな変数束縛によって構文束縛が隠蔽される事も ローカルな構文束縛によって変数束縛が隠蔽される事もあります。 なので束縛の種類とその束縛されているモノと字の綴りが同じ識別子のみが リテラル識別子にマッチするという方が正しいでしょう。
625 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 19:48:28 ] 4s/マクロ変換子/構文/
626 名前:567 mailto:sage [2008/02/16(土) 21:05:57 ] >>619 - >>625 早速のご返答ありがとうございます. いま R5RS も見ながら考えさせていただいていますが,もう少し時間をいただきます. 問題の本質とは少しずれますが,私が混乱していた原因の一つに,syntax-rules の 第1引数である literals に含まれている literal-identifier についての誤解があったようです. 「literal」という名前から,字面の一致だけを見るものだと思いこんでいましたが 正しくは,R5RS や >>573 さんはじめ上の書き込みにもさんざんあるように, literal-identifierは >>583 : >ともに未束縛であるか >或いは同じ束縛(例えばトップレベル変数)を持つ場合にのみマッチする ということなんですね.思いこみで記述が頭に入っていませんでした. なお,577:で 5s/template上のsymbol/pattern上のsymbol/ でした.
627 名前:593 mailto:sage [2008/02/18(月) 00:57:16 ] 皆さん、ありがとうございます。遅くなってすみません。 途中から議論が分からなくなってしまったのですが、>>596 さんのコードを実 行したところ、tarai は実行されますが、表示される時間は 0 です。 > (force (delay (time (tarai 800 400 0)))) cpu time: 0 real time: 0 gc time: 0 800 すみませんが、これはどうにかならないでしょうか?
628 名前:593 mailto:sage [2008/02/18(月) 00:59:59 ] あ、バージョンは最新の 372 です。
629 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 01:01:00 ] promise作って終りかw
630 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 10:52:21 ] ちゃんと800が返されてるから 正しいのでは? タライ回し関数は遅延評価で計算すると 正格評価にくらべて格段に速い
631 名前:630 mailto:sage [2008/02/18(月) 11:04:00 ] timeで計測できないくらいの短時間で計算できてるって意味です
632 名前:593 mailto:sage [2008/02/18(月) 13:59:55 ] いや、もっと時間はかかってます。 (force (delay (time (tarai 1000 500 0)))) を実行してみてください。 これで0秒なのは、おかしいでしょう?
633 名前:593 mailto:sage [2008/02/18(月) 14:02:07 ] と言うか、先に0秒という計測結果が表示されてから、10秒ほどして 1000 と いう計算結果が表示されるのです。もしもっと早いマシンをお使いなら、引数 を適宜増やしてお確かめください。
634 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 14:48:40 ] 確かに time構文はLazy Schemeでは使い物にならないと考えた方がいいかも
635 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 15:18:20 ] たらいまわしべんちでtime構文が使えないなら、Lazyである意義などない!
636 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 16:00:56 ] こんなんで我慢してちょ (define (bench exp) __(let* ((start (current-milliseconds)) _________(value exp) _________(end (current-milliseconds))) ____(display start) ____(newline) ____(display value) ____(newline) ____(display end) ____(newline) ____(display (- end start)))) ミリ秒でしか測れないし 余計な出力もあるのがダサいけど
637 名前:593 mailto:sage [2008/02/18(月) 17:06:55 ] >>636 ありがとうございます。ちゃんと動きました。 ありがたいことに、自分にも隅々までよく分かるコードです。 しかし、遅延評価であるがゆえに、逆に副作用だらけになってしまったのが、 少し泣けます。
638 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 00:54:51 ] 正規表現ってRnRSにもSRFIにも入ってないの?
639 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 01:05:04 ] つ community.schemewiki.org/?scheme-faq-programming#H-1w56qpn
640 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 12:33:26 ] 実装はいくらでもあるが、標準仕様がないのはなぜかと問いたい 共通語がないと不便じゃないか
641 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 12:45:47 ] R6RSでUnicode化も決まったので、"Beyond R6RS"に入ってます。 schemers.org/Documents/Standards/Charter/status-jun-2006/status-jun06.html#g11
642 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 14:19:47 ] 正規表現は構造を文字列で表現するとこがLISPっぽくない。 まあ普及しちゃったからしょうがないけど、必要悪だろ。
643 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 15:01:38 ] LISPから必要悪を取ったらλしか残らない
644 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 15:40:04 ] すみません、MzSchemeやGaucheで、実行中のスタックの遷移を表示するにはど うしたらよいでしょうか? www1.ocn.ne.jp/~scheme/petite-start.html ↑のページで紹介されている、ChezSchemeの trace関数のようなものです。
645 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 15:50:08 ] DrSchemeでプロセス間通信とかできますか? Schemeにはそもそもプロセスという概念が無い? 今はただ関数定義程度の練習レベルです。
646 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 15:51:20 ] つまり、Schemeで出来ること、あるいはSchemeの用途 がイマイチ分かってないということです。
647 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 18:32:37 ] gccでプロセス間通信とかできますか? Cにはそもそもプロセスという概念が無い? 今はただ関数定義程度の練習レベルです。 つまり、Cで出来ること、あるいはCの用途 がイマイチ分かってないということです。
648 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 18:39:45 ] >>647 そうか。意味不明だったか。確かに。 どういう分野に活かしていくのが普通なんでしょうか? 例えば、CやC++ならネットワークプログラミングとかOSとか デバイスドライバとか作成しますが、Schemeのアプリケーション とはどういったものになりますか?コンパイラ作成用途とかになる んですかね?
649 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 20:07:12 ] そういうのはライブラリに拠るんだから一概にどうとは言えないよ。 まあ記号処理には強いだろうね。
650 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 20:11:01 ] >>649 記号処理ですか。未知の分野なのでもう少し精進して 調べて見ます。
651 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 20:42:31 ] >>644 MzScheme だとライブラリを使えばtrace、untraceもOK。 > (require (lib "trace.ss")) >
652 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 20:51:09 ] >>645 Petite Chez Scheme だとprocessを使って 他のプロセスにデータを送れたよ。 fprintを使うんだったかな。 >>650 数式処理には向いていると思う。 他にもいろいろと応用はあるんじゃないかな。
653 名前:644 mailto:sage [2008/02/20(水) 21:35:05 ] >>651 MzScheme, DrSchemeでうまく行きました。 ありがとうございました。 Gauche はこんな感じのようです。 ・トレース - 結城浩のSICP日記 - sicp sicp.g.hatena.ne.jp/hyuki/20060507/trace
654 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 21:41:28 ] >>650 使用言語の選択を誤っていると思う あなたの場合Lispを選択する意味はないのではないか 一般に手に入る資料が豊富な分C/C++でやるのがよい
655 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 21:44:42 ] >>654 C/C++は習得済みで業務で使用してます。 Schemeでプロダクトコード書くわけではないので。
656 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 21:58:03 ] lispやってる奴がもれなく超人に見える だからやりたい とか言う程の物さ
657 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 22:16:40 ] >>655 言語の話とライブラリの話がごっちゃになってないかな。 言語の特徴としては、再帰的な処理の記述とか、 メタなプログラミングが楽とか色々あるけど。 そういうことが知りたいんじゃないんだろうし。 Schemeのアプリケーションって言われても、 ウェブアプリケーションサーバ書いてる人もいれば、 .NET向けのアプリケーションを書くために処理系を実装してたり、 日常的に使うスクリプトをSchemeで書いてる人もいたりして様々。
658 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 22:22:45 ] >>657 >再帰的な処理の記述とか、 メタなプログラミング ここが勉強したいと思ったきっかけです。 >Schemeのアプリケーションって言われても、 >ウェブアプリケーションサーバ書いてる人もいれば、 >.NET向けのアプリケーションを書くために処理系を実装してたり、 >日常的に使うスクリプトをSchemeで書いてる人もいたりして様々。 色々できるんですね。ありがとうございます。
659 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 22:30:23 ] >>658 ttp://practical-scheme.net/index-j.html にある文章をいくつか読んでみたらどうだろう。ここのスレの人とかが、 何故敢えてLispやSchemeを使うのか、理解する助けになると思う。
660 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 22:32:48 ] たぶん、プロセス間通信みたいな処理が好きな人は SchemeよりEmacs Lispの方が楽しめると思う。 CL使わないとLispらしさのかけらもないコードになっちゃうけど。
661 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 22:52:37 ] >>657 >言語の特徴としては、再帰的な処理の記述とか、 >メタなプログラミングが楽とか色々あるけど。 >そういうことが知りたいんじゃないんだろうし。 とオレも思ったのだが >>658 >>再帰的な処理の記述とか、 メタなプログラミング >ここが勉強したいと思ったきっかけです。 という意外な応答 真意がつかめない
662 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 22:58:39 ] 便乗質問で恐縮です Larcenyでtraceは使えるんですが、再帰関数をtraceしても 再帰的にtraceしてくれません 何かうまい使い方があるのでしょうか?
663 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 00:40:01 ] >>659 読んで見ます。 >>661 C++でテンプレート使ってライブラリ書きたいんですが 再帰とメタファンクションを使わなければいけないんですよ。 で、そもそも再帰とベースとする言語として関数型言語 を覗いたわけです。
664 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 07:29:08 ] >>662 そうなんだよね、traceがちょっと他と違っている。 libにtrace.schがあるんでこれをハックしてみるとか。
665 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 12:55:30 ] guile + swig でc++のメタ制御してみて便利さを体験してみたら? Gimpのスクリプトで遊んでみるのもいいかも
666 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 14:52:33 ] gauche本の発売日が1ヶ月伸びてますが、 やっぱりあれだけ赤が入ると無理だったのでしょうか。
667 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 16:23:22 ] Gauche本てどんな読者が対象なんだろう。
668 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 17:23:12 ] このスレの住人
669 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 17:24:08 ] まぁ、まんざらでもないよなw
670 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 17:49:47 ] The Little Schemer読んでる俺も対象に入れてくれお
671 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 18:54:27 ] >>670 ナカーマ 象さん分かりやすいが、文法のリファレンスも欲しい今日この頃。 お勧めありますか?
672 名前:デフォルトの名無しさん [2008/02/21(木) 19:05:40 ] つR5RS 自分はA5用紙に印刷して綴じて常に携帯してる ついでに電子辞書にもtxtファイルで入れてる
673 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 20:28:28 ] carとcdrは何と読めばいいんでしょうか? カーとクダーでいいですか?
674 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 20:29:03 ] >>672 thx 日本語訳あったんで落とした。
675 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 21:29:24 ] >>673 おk
676 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:12:42 ] >>671 ( ^ω^)λ(^ω^ )ナカーマ 漏れはネットのあちこち入門サイトにお世話になってるお
677 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:23:57 ] 再(再(再(再帰)帰)帰)帰
678 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:56:02 ] C/C++で仕事するのが面白くなくて辛いです。 Scheme勉強するのは楽しいです。 仕事の時間は無駄な時間に感じます。
679 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:04:03 ] 仕事というのはそういうものですよ
680 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:17:53 ] 確かに、金をもらわなきゃ誰もやらないようなことだからこそ、 金をもらえるんだものね。 金なしでやる人が大勢いるようなことなら、誰も金を出すわけない。
681 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:25:36 ] 家に帰ってSchemeにポートするつもりで作れYO! ようやって作ったScheme版で独立すれば?という夢ぐらいは持ちたいものだw
682 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:27:08 ] だれかR6RSの日本語訳早く作れよ
683 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:15:56 ] R6RSの解説を読んだら、Schemeの欠陥が色々書いてあった CLは細かいところまでよくできてるっぽいし 見かけによらないものだなーと
684 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:50:01 ] >>677 先頭の再と末尾の帰が!
685 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:52:27 ] >>683 >CLは細かいところまでよくできてるっぽい と思えない俺は異常かおrz
686 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 01:13:30 ] (再(再(再(再帰)帰)帰)帰)
687 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 01:13:33 ] Common Lisp規格まとめ役のスティール親分が、 Schemeみたいにsymbol-valueとsymbol-functionを統合しとけば良かったなあ けど互換性を重視したから難しかったんだよ そう言っておられたぞ。
688 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 01:35:56 ] Gauche-libsvmのリンク先に飛べない Gauche c-wrapperはswigみたいなもの? なんでswigにしなかったの?
689 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 05:46:08 ] >>687 へー、初耳だ。 どこで言ってたの?
690 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 09:35:15 ] >>686 それでよし
691 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 09:37:24 ] >>687 >symbol-valueとsymbol-function CL最醜の汚点だと思う
692 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 11:14:06 ] >>689 bitの井田さんのインタビューかな?
693 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 12:06:12 ] >>691 ちなみに、funcallを書くのは面倒だけど フォームの頭に構文の名前 (funcallやlambdaやifやマクロの名前) を必ず書きましょう と考えると汚くはない funcallが汚いんじゃなくて、funcallを省略できる設計が汚い
694 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 12:10:21 ] funcallはあまり気にならないな。むしろ判りやすい。 SPECIAL変数付近の扱いはちょっと汚いかなと思う。
695 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 12:54:19 ] 個人的にはCLで名前空間が単一/一様でないのは気にかかるところだ 関数とその他の値とを区別無くfirst class objectとして扱うコードを 書きたいときに柔軟性を制約する一因とはならないのだろうか?
696 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 12:58:11 ] >>693 その話は関連する話ではあるけど、 symbolがsymbol-valueとsymbol-functionの二つ持つという話そのものから、 ちょっと離れていっていると思います。 一つしかない場合もその種の議論は成立するのですから。 >>694 スペシャル変数は、スレッドローカルな変数とか、 elispみたいなバッファーローカルな変数と同様の「パターン」で、 ある種のライブラリ、応用にはとても自然なeval拡張だと思う。 別の機構も考えられるけども、とてもLisp的だと思う。 (拡張というのはレキシカルスコープなevalに対して)
697 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 13:01:00 ] >>695 そういう「特殊な」ことをやる場所ではfuncallを使う。 そういうとこへ関数を渡すときは #' を付けてましょう。 というのが CL 的発想だと思う。大きなプログラムの中での可読性を 考えれば、そんなに悪くないと思う。 純潔なSchemerには我慢できないだろうけど。w
698 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 13:29:54 ] >>695 > 関数とその他の値とを区別無くfirst class objectとして扱うコードを CLが違うのはシンボルにセルが2つあるのと関数を適用するときの特別扱いであって、 「区別無くfirst class objectとして扱う」こと自体は普通に書けるじゃん。
699 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 13:40:16 ] 座席が区別されてるだけで乗客は区別されない
700 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 13:43:02 ] >>696 >一つしかない場合もその種の議論は成立する そうです Schemeでも関数なのかマクロなのか判断できなくて困ることがある CLを汚いと言えるほどSchemeは綺麗じゃない 変数と関数じゃなくて コンパイル時と実行時とで名前空間を分ければいいのかな?
701 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 13:44:44 ] 俺は人間が汚れてるから、ちょっと汚い言語のほうが好きだな
702 名前:695 mailto:sage [2008/02/22(金) 13:51:18 ] >>697 >>698 >>699 なるほど
703 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:21:19 ] >>688 >Gauche c-wrapperはswigみたいなもの? そう、ヘッダファイルからスタブを自動生成して関数やデータやマクロなんかをGaucheで使えるようにするもの。 >なんでswigにしなかったの? 最初swigを見たとき、バインディングの作り方がよく分からなかったから。 あと、コンパイルとかInterfaceファイルを作るのが面倒そうだったから。
704 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 17:07:34 ] The Reasoned Schemer この本はどのような人を対象としてるか読んだ人分かりますか? なんかProlog的なコーディングをSchemeでもできるという紹介 文でしたが、これはScheme的ではない異色の内容なんですかね?
705 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 17:21:57 ] とてもScheme的な応用の本。 言語プリミティブ的なものが応用対象だから。
706 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:18:06 ] LispとPrologとは両輪だという話を読んだ覚えがある。 On LispでもPrologやってるし。
707 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:20:49 ] 両輪というより、レイヤーが違う感じかな
708 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:30:57 ] Lisp/Schemeにはないが、 ML/Haskellはパターンマッチ渡しがあるから、 論理型言語とは「項書換えシステム」で統一的な見方ができる。 The Reasoned Schemerはその点でも面白い。S式は面白い。
709 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:50:24 ] 買ってみようかな
710 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:58:54 ] The Little Schemerで教えてください。 P.121です。 1> (apples peaches pumpkin pie) はrelではない。なぜならペアのリストではないから。 2> ((apples peaches) (pumpkin pie) (apples peaches)) はrelではない。ペアのセットではないから。 3> ((apples peaches) (pumpkin pie)) はrelですか? yes 4> ((4 3) (4 2) (7 6) (6 2) (3 4)) はrelですか? yes どういうことなのかさっぱりわかりません。
711 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 18:02:25 ] >>710 まだそこまで読んでない。
712 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 18:09:41 ] 「セット」は重複要素を許しません。それで後は分かりませんか? ;; カッコに全角を使うのは辞めてください。釣りかと思います。
713 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 18:15:06 ] >>712 サンクス!そういうことか! ていうか、章の始めで教わってんじゃん・・・1日悩んじまったorz 全角ゴメン。気をつけます! てかP.121じゃなくてP.119だし・・・
714 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 19:07:24 ] javascriptがlispに匹敵する表現力があるって聞いたのだけど本当?
715 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 19:39:24 ] brainfuckですらLispに匹敵する表現力がありますけど?
716 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 19:40:14 ] >>714 ecmaスレで聞けよw
717 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 20:31:44 ] アセンブラ表現力最強ですけどっ!!
718 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 20:35:09 ] 表現力最強じゃなくて記述力最強だ まあいいや
719 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 20:37:18 ] どちらにしても曖昧だな。強弱比較できるような概念でもあるまい。
720 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:01:45 ] スペックじゃんけんがしたいならHaskellを選べばいいと思うよ。
721 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:11:19 ] brainfuckにすら負けてる正規表現やcppの立場って・・・
722 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:19:45 ] そのためのPEGとtemplateだろ?
723 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:19:15 ] 初心者は抽象化が苦手だ、とMatzが言ってた チューリング完全性だけが重要なら、抽象化はどうでもいいはずだが、現実は違う
724 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:48:20 ] >>714 JavascriptのクラスシステムはJavascriptで書かれてます。 次のバージョンからは組み込みになりますが。 prototype base object systemあたりでググってください。
725 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 13:22:52 ] Little schemer P122 P123 に出てきた Go and get one! Or better yet, make your own. は ”先へ進んで、完璧を目指せ! もっといいのは、自分の力でやることだ。” という意味であってる?
726 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:17:26 ] >>725 邦訳の「Scheme手習い」元吉文男、横山晶一訳 たぶん、7章の最後の文だと思うんだけど。 「自分で行って手に入れよ。 さもなくば、独自のものを作れ」 となっている。
727 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:34:52 ] 俺はなんかそんな堅苦しいメッセージじゃなくて、 「ここで一休み、お菓子取ってきなよ♪ でなきゃ、自分で作ってみてはどうかな?」 という意味に取ったけど。
728 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:38:29 ] >>726 全然違ってた。。 邦訳なんかあったんだ まあ内容には関係ないからいいか >>727 お菓子はないだろw
729 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:41:23 ] >>728 いや、まじめに。だってクッキーの作り方書いてあるじゃん。
730 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:50:15 ] >>726 その訳でクッキーのレシピはどうなってるの?
731 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:53:27 ] >>729 ああ、あの囲みのコード? おれはてっきりあれを自分で完成させろということかと思った。 アメリカンジョーク?
732 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:55:26 ] >>731 あのコードをみて Make your own cokkies.ということかと・・・・ てか、度々「一休みしてお菓子食べなよ!マスタード忘れないようにNE!」 みたいなメッセージが出てきてるじゃん?
733 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:58:15 ] >>730 クッキーのレシピがlambda式風に書かれている。 戒律風に訳されているので、この部分も戒律風にわざと訳したのかもね。
734 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 23:00:22 ] (define クッキー (lambda () (焼く (quote (180 度)) (quote (12 分))
735 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 23:02:47 ] >>733 そんな風になってるのか。
736 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 23:02:51 ] アメリカンジョークというより、ウィットという感じかな。
737 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 23:03:45 ] もうフリードマンさんの本全部読んでみたくなってきたw
738 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:17:17 ] >>725 後半は、 「まだまだいいのがあると思うなら、自分で作ることだね」
739 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:45:50 ] www.ccs.neu.edu/home/matthias/BTLS/ > A Food Preparation Place
740 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 10:57:55 ] Little Schemer Seasoned Schemer Reasoned Schemer があるんだけど、Little Schemerだけ紙質が悪いんだが 何で?わら半紙みたいでツルツルしてない。
741 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 11:25:16 ] >>738 それが一番しっくりくるかな
742 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:49:27 ] >>740 学生用のテキストは安いのを作ることがある。
743 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 14:04:29 ] >>742 ツルツル版もあるの?
744 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 14:05:50 ] ハッ!ハッ!ハッ!ハッ! はげまるくーん
745 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 14:16:05 ] 醤油こぼしたらオシマイだよ。
746 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 14:17:46 ] Schemeすげー、関数を渡せるなんて。C#のdelegateの構文に似たような ものがあったな。
747 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 20:41:32 ] 関数ぐらいCでも渡せるだろう
748 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 23:13:03 ] クロージャにしても継続にしても Cでスタックを使うところにヒープを使えば自然と思いつきそうなものだが Schemeみたいな高級言語で教えるのとどっちが分かりやすいのかね
749 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 23:15:36 ] >>747 ポインタはね。関数は無理なのよ。しかも定義を呼び出し関数内に書ける のがいい。C++のBOOST_FOREACHに似てる感覚。
750 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 23:56:38 ] JavaScriptでも出来るぞw
751 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 00:05:37 ] 高級言語ならそれぐらい出来て当然
752 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 00:22:34 ] 高級言語w
753 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 03:20:15 ] wが意味するところがよくわからないんだが、 巷ではJavaScriptって、高級低級で二分するなら低級のほうに入るのか?
754 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 03:29:40 ] それはないw
755 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 03:39:48 ] javascriptは超高級だと思うぞ 高級・低級の分かれめってなんだか知らない(たぶん、時代によって変わる)けど、 lambdaが使える言語はみな高級だと思う。 あと、低級っていっても馬鹿にしてるわけじゃないことをお忘れ無く。
756 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 03:54:56 ] プログラミング初心者が集まる言語のスレなら 「ひょっとしてこの人、高級の意味を誤解してるのかな」 という想像が最初に来るところだけど、Lispスレだからな。一応「その心は?」と聞きたくなる。
757 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 04:36:48 ] まあ高次とか低レイヤーとか書いたほうが語弊は少なさそうだな 意味わかりにくくなるけど
758 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 09:18:13 ] 機械語に対してほとんど全てのプログラミング言語は高級言語だけどね。 今低級・高級を再定義するなら、機械が直接対応しない概念(クロージャとか)を 扱えるものが高級言語、でどうだろう。 シンタクスによる区別だったのをセマンティクスによる区別で再定義というか。
759 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 09:35:06 ] 実際のところ、CやC++のコンパイラは関数型言語で記述されてますか?
760 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 09:43:06 ] されてません
761 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 10:07:48 ] 環境にアクセスできるクロージャへのポインタを渡すのはCでは無理だな
762 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 12:28:20 ] boost.lambda ならあるぞ
763 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 12:40:47 ] c-wrapperのデモビデオがみれなくなってる std::vectorとかポインターをcに渡すことはできるの?
764 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 12:48:11 ] >>760 何で記述されてますか?
765 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 12:50:28 ] 「Cは昔、関数型言語って呼ばれてました。 値を返さない手続きがない(void以前)ので」ってオチ禁止
766 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 14:44:35 ] CコンパイラはCで書かれてることが多いんじゃないかな? あまり関係ないけど GCCはLispライクな中間コードにコンパイルしてから CPUコードを出力するって聞いたことがあるけど
767 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 15:31:53 ] Little Schemerだけど Chapter 8から難しくなってきた。 -------------------------------------------------------- The Tenth Commandment Build functions to collect more than one value at a time. ”一度に複数の値を集めるための関数を作れ!” -------------------------------------------------------- これが言わんとする深い意味はなんですか? 直前のmultiremberEco関数の例で確かに二つのリストに振り分けてるのは 理解できるんだけど。(tunaに一致するもののリストと一致しないもののリスト) 条件に応じて、その条件を満足する値(アトムなど)あるいは満足しない値を集めろ! って意味なのかな?
768 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 21:33:46 ] >>763 >c-wrapperのデモビデオがみれなくなってる 今確認してみましたが、こちらからは見れました(ホームページのやつですよね)。 >std::vectorとかポインターをcに渡すことはできるの? ポインターの受け渡しはできますが、今のところ c-wrapper は C++ には 対応していないので、残念ながら std::vector は無理です。
769 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 22:25:51 ] >>767 俺もそこらへん読んでる。急に難しくなってきたね。 説明できないのでもうちょっとよく読んでみる…
770 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 00:44:35 ] > multiremberEco multirember&co関数かと。
771 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:04:22 ] little schemer - multirember&co - reprise for dec 2006 groups.google.co.jp/group/comp.lang.scheme/browse_thread/thread/a059f78eb4457d08/be4705d06e96a2e4?hl=ja&lnk=gst&q=little+schemer+-+multirember%26co#
772 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 02:16:04 ] >>767 「at a time」でやることによって、 純関数型に特徴的なプログラミングスタイルが登場します。 昔birdが書いたコンパイラの純関数型ワン・パス・パーザや, DanvyのTABA(There and Back Again)パターンや、 purely functional algorithmに出てくるようなコードなどでも この章で使うようなテクニックが使われてます。 Little Schemeは非常に簡単な例でやっているので、 何が何だか分からない奇妙なパズルをやらされている気分になるかもしれませんが、 無意味なことはほとんどないので、著者を信じて頑張ってください。 まあバリバリ手続き型で書きたい人には苦行すぎる面もありますが。
773 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 12:01:59 ] >>770 &か。何の文字かわからなかった。 >>772 実用的なコードの源泉かあ。 今は習うより慣れろのレベルだけど、Schemerシリーズは全部やる。 単純な例でも脳の体操にもなるし。
774 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 21:26:31 ] www.amazon.com/Scheme-Programming-Language-3rd/dp/0262541483/ The Scheme Programming Language, 3rd Edition これは評価が高いですが、やはり良書ですか? CのK&R相当らしく、数日でたくさん学ぶ人もいるらしいですが どうなんでしょう。
775 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 21:42:06 ] >>774 Second Edition と村上さんの邦訳をもっているけど、 3rdはかなり改訂されてるんかい?
776 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 21:49:40 ] www.scheme.com/tspl3/
777 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 21:55:25 ] >>776 おお、公開されてるんだ。Dybvigさん、太っ腹。
778 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 21:59:06 ] Schemers.Incの「The Schemer's Guide」が好きだったなぁ。 初心者向けの良い本だと思う。
779 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:08:16 ] Little Schemer P146 にある以下のプログラムなんですが、 (define evens-only*&co (lambda (l col) (cond ((null? l) (col (quote ()) 1 0)) ((atom? (car l)) (cond ((even? (car l)) (evens-only*&co (cdr l) (lambda (newl P S) (col (cons (car l) newl) (* (car l) P) S)))) (else (evens-only*&co (cdr l) (lambda (newl P S) (col newl P (+ (car l) S))))))) (else (evens-only*&co (car l) ; ここから以下がよく理解できない (lambda (al ap as) (evens-only*&co (cdr l) (lambda (dl dp ds) (col (cons al dl) (* ap dp) (+ as ds)))))))))) 特に (col (cons al dl) (* ap dp) (+ as ds)) とする意味が分かりません。 こういうものはどういう思考で捉えていけば良いのでしょうか? 具体値で考えると確かに正しいことは分かるのですが、それを一般式で 表すのが難しくて思いつきません。
780 名前:779 mailto:sage [2008/03/02(日) 00:31:17 ] 具体値を入れて考えたメモを見ていたら何となく見てきました。 (evens-only*&co (car l) ; ここから以下がよく理解できない (lambda (al ap as) (evens-only*&co (cdr l) (lambda (dl dp ds) (col (cons al dl) (* ap dp) (+ as ds)))))))))) (car l) と (cdr l) について再帰してそれぞれの結果を得る。 まず、(cdr l) に対して結果を得る。つまり、dl dp ds が具体値に 決まる。その後、その結果に対して、(car l) に対する再帰の結果 である al ap as を得て、(cdr l) に対する結果とマージする。 よく分からなかったのはlambda関数のパラメータでした。 自分としてのキーポイントは、 @lambda関数のパラメータが具体値に求まる。 Alambda関数のパラメータが具体値に求まる順番はネストの深い ものから始まる。 という風に考えるとよいかなと思いました。
781 名前:779 mailto:sage [2008/03/02(日) 00:36:37 ] 表現がおかしかったです。 (evens-only*&co (cdr l) (lambda (dl dp ds) (col (cons al dl) (* ap dp) (+ as ds))) 要は、まず上の部分の (cdr l) の再帰が先に終了し、そのパラメータであるdl dp ds が具体値に求まる。その後で、具体値に求まったdl dp dsとともに (evens-only*&co (car l) (lambda (al ap as) ・・・の (car l) の部分の再帰が行われる。
782 名前:779 mailto:sage [2008/03/02(日) 00:42:43 ] やはりパラメータが具体値に求まるというのはおかしいですね。 パラメータは変数なので。。 ただ具体的な値で追っていくと、例えば (col (cons al (2 4)) (* ap 8) (+ as 4))) みたいな感じで、dl dp ds 部分が決まっていくようです。 パラメータが具体値に求まるというのは、その程度の意味です。
783 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:58:27 ] >>779-782 ; direct style (define (fact n) (if (= n 0) 1 (* n (fact (- n 1))))) ; accumulator style (define (fact n) (factacc n 1)) (define (factacc n acc) (if (= n 0) acc (factacc (- n 1) (* n acc)))) ; continuation passing style (define (fact n) (factacc n (lambda () 1))) (define (factacc n cc) (if (= n 0) (cc) (factacc (- n 1) (lambda () (* n (cc)))))) accumulator styleは演算子が可換、 あるいは逆から数え上げることが可能(e.g. (from n) ←→(to n))でないと困る。 例えばリストに対する演算の場合。consは可換でない。