1 名前:デフォルトの名無しさん mailto:sage [04/08/02 23:13] 過去スレ Part1: piza2.2ch.net/tech/kako/987/987169286.html Part2: pc.2ch.net/tech/kako/1002/10025/1002584344.html Part3: pc.2ch.net/tech/kako/1008/10082/1008220265.html Part4: pc.2ch.net/tech/kako/1016/10162/1016211619.html Part5: pc3.2ch.net/tech/kako/1023/10230/1023091882.html Part6: pc3.2ch.net/tech/kako/1031/10315/1031560687.html Part7: ruku.qp.tc/dat2ch/0311/20/1042167213.html Part8: pc2.2ch.net/tech/kako/1058/10582/1058263391.html Part9: pc2.2ch.net/test/read.cgi/tech/1069594582/ Part10: pc5.2ch.net/test/read.cgi/tech/1075630259/ 関連リンクは>>2-10 あたり
348 名前:デフォルトの名無しさん mailto:sage [04/09/18 18:45:50] gensymはinternされない (システム内部の、名前からシンボルへの 対応表に登録されない) シンボルを作るので、このマクロの展開時に 作られるシンボル (#:G0031とか) と同じシンボルを外から与えることは できない。(同じ名前にしてもシンボル自身は別オブジェクトなので 衝突しない)
349 名前:340 mailto:sage [04/09/18 18:56:21] nil にリスト追加してもnilなんすね また修正してみました 途中経過ですが・・・ (with-open-file (in "test.dat" :direction :input) (let((buff) (output '())) (while (setq buff (read-line in nil)) (if (null output) (setq output (split-string buff "\t")) (setq output (mapcar #'list output (split-string buff "\t"))))) output)) としたら2行だと上手くいきますが => ((A D) (B E) (C F)) 3行目からは(((A D) G) ((B E) H) ((C F) I)) となってしまふ・・・ <<347 のように今度は再帰で考えて見ます
350 名前:デフォルトの名無しさん [04/09/18 19:24:40] >>348 ああそうか! ` が付いて無いからマクロの展開時に (let) は消えるんですね 納得・・・ありがとうございました
351 名前:340 [04/09/18 19:48:28] ようやく上手くいきました 良いLISPの勉強になりました (defun util (filename) (with-open-file (in filename :direction :input) (let ((buff) (output)) (while (setq buff (read-line in nil)) (if (null output) (setq output (split-string buff "\t")) (setq output (mapcar #'(lambda (v1 v2) (if (listp v1) (append v1 (list v2)) (list v1 v2))) output (split-string buff "\t"))))) output))) 知恵を下さった皆さん有難うございました もっとエレガントにいけるとかあったら ぜひ教えてください
352 名前:ミミ [04/09/19 10:40:16] Scheme の継続と、Win32 API のウィンドウ プロシージャ コールバック って、共存可能だと思いますか?
353 名前:デフォルトの名無しさん mailto:sage [04/09/19 11:07:15] 不可能な理由がなかったら可能だよ。
354 名前:& ◆TACpYgPjX6 [04/09/19 11:17:07] それがよくわからないんですよ。 だって、OS 側でどんな処理をしているか分からないじゃないですか。 たとえば WM_KEYDOWN ハンドラ内で継続を作成して、 一度そのハンドラを終了して OS に制御を返すでしょ。 そのあと WM_LBUTTONDOWN ハンドラ内で 先ほどの継続を呼び出すと、WM_KEYDOWN メッセージの処理が 再開されるわけですよね。 OS 側でスタック上のデータではない グローバル変数をいじっていたとすると、 コンテキストがめちゃくちゃになって、 よくない気がするんです。
355 名前:デフォルトの名無しさん mailto:sage [04/09/19 11:26:55] > OS 側でどんな処理をしているか分からない 分からない以上、可能だという確認ができないんじゃないか?
356 名前:ミミ [04/09/19 11:31:53] いえいえ、今の私の知識ではわからないということなんです。 どなたか深い知識をご存知の方はいらっしゃらないかなと思いまして。
357 名前:デフォルトの名無しさん mailto:sage [04/09/19 11:33:02] 354の話で使いたい場面と、問題意識が少しわかったので もう少し整理してから、その問題意識を中心に調べものしたらわかるのではないかな。 イベントハンドラまわりなんだよね。 ;;; Windowsのことはよく知らないけど...
358 名前:& ◆TACpYgPjX6 [04/09/19 11:36:15] 実は Windows 専用 Scheme を作りたいと思っているんです。 特にシステム ハックをするためのツールを Scheme でガンガン作りたいんですよねぇ。 コンセプトは "Scheme as a better C." "Scheme as a hacking tool."
359 名前:デフォルトの名無しさん mailto:sage [04/09/19 11:50:34] で?
360 名前:ミミ [04/09/19 11:51:32] 協力してくれたらうれしい。 できたら使わせてあげるから。
361 名前:デフォルトの名無しさん mailto:sage [04/09/19 11:54:40] 面白そうではあるが,コールバックまで正常動作させようとすると 継続はおろかクロージャさえ厳しいだろうな…
362 名前:& ◆TACpYgPjX6 [04/09/19 11:56:17] だいたいですね、Lisp 系の言語って、 どれもこれも Unix っぽいのがよくないと思うんですよ。 Perl や Python も同じなんですけど、 Java はちょっと違う感じ。 Windows みたいな素敵なシステムに、 Scheme みたいな素敵な言語があれば、 みんな幸せだろうなぁ、と思ってさ。
363 名前:ミミ [04/09/19 11:59:09] すいません、どうしてクロージャが難しいのでしょうか。 何も OS が直接クロージャを呼び出すことは期待していないです。 間に C 関数をかませば問題ないですよね? > 面白そうではあるが, ありがとう。
364 名前:デフォルトの名無しさん mailto:sage [04/09/19 12:00:52] PythonはMac出身じゃなかったっけ. まぁ、それはともかく、Unixっぽいってどういうこと?
365 名前:デフォルトの名無しさん mailto:sage [04/09/19 12:13:05] >>363 話の流れからすると,Win32APIを丸々wrapするんじゃなくて, Cの関数を直接呼び出したりできる機構を用意しようってことだよね?
366 名前:& ◆TACpYgPjX6 [04/09/19 12:18:32] 一番大きなのは、コンソール (標準入出力) を前提としていること。 あと、いろんな Scheme 処理系をみてみても、 最初にサポートされるライブラリが POSIX ライブラリを移植したものとか、 GNU の readline たら curses たら、 /etc/network の存在を仮定したソケット ライブラリとか (Winsock にしてくれ)、 Windows で使うにはほとんどいらないものばっかりあって、 肝心の Windows 用のライブラリがないんですよ。 レジストリ アクセスや COM バインディングは必須でしょう。 もちろん ウィンドウ プログラミングができないとだめ。 (Unix では X がオプションだから困る) あと、リソースのアクセスとか、シェル サービスへのアクセスとか、 さまざまな Win32 API をオブジェクト指向的にパックしたものとか Win32 のセキュリティ機構は Unix と大きく異なっているから、 それを無理やり Unix 的に狭めても、使う気になれない。 Scheme だけで DLL を書くとか、サービス書くとか、 スクリーン セーバー書くとか、Scheme だけでデバドラ書くとか。 そんなのができない。 しようとすると、既存の Scheme に拡張機能を実装しないとだめで、 その Scheme 実装系の内部動作から把握しないとだめってことになる。 しかも Scheme 実装系自体が Unix を基盤としているので、 Windows 用に最適化されているわけでもない。 であれば、Windows 専用の Scheme 実装の上に Windows 専用のライブラリを構築するほうが ずっといいと思う。
367 名前:デフォルトの名無しさん mailto:sage [04/09/19 12:27:13] うーん、Scheme.NETか?
368 名前:ミミ [04/09/19 12:28:34] >>365 > 話の流れからすると,Win32APIを丸々wrapするんじゃなくて, > Cの関数を直接呼び出したりできる機構を用意しようってことだよね? 構想としては WIn32 API (というか任意の DLL 関数) をすべて生で呼び出し可能にしたいとは 思っています (間に多少のサンクは入ってもよし)。 VB の Declare 文みたいに、Scheme ソース上で 宣言するだけで、外部の API を呼び出したいです。 たとえば、 (dll-import MessageBox ((DWORD hwnd) (WSTR text) (WSTR caption) (UINT type)) (alias "MessageBoxW" stdcall) ) という感じで宣言して、 呼び出すときは (MessageBox 'hwnd hwnd 'text "テキスト" 'caption "キャプション" 'type (| MB_OK MB_ICONINFORMATION) ) コールバックの話は、ウィンドウを使いたいために出てきた話です。 ウィンドウを使うには OS からのコールバックとして実装しなくてはならず、 その場合、継続と相性悪くないのかなぁ、とふと思ったのです。
369 名前:デフォルトの名無しさん mailto:sage [04/09/19 12:34:50] >>366 > であれば、Windows 専用の Scheme 実装の上に > Windows 専用のライブラリを構築するほうが > ずっといいと思う。 そういうことは、既存Scheme処理系をWindowsに移植しようとして 挫折してからいうべきなのではないか。先人の知恵は偉大だよ。 ;;; 挫折というのは移植者の能力不足のことではないよ。 あ、もしかして、scheracy?
370 名前:& ◆TACpYgPjX6 [04/09/19 12:37:25] >>369 >あ、もしかして、scheracy? え? Scheme ヤラシイ? なんですかそれは。
371 名前:デフォルトの名無しさん mailto:sage [04/09/19 12:40:07] >>367 だよね。他にもあるかも知れないけど、 .NETFramework をサポートする Scheme を開発するプロジェクト ttp://radio.weblogs.com/0101156/stories/2002/03/19/tachy.html ttp://www.cs.indiana.edu/~jgrinbla/index.htm
372 名前:デフォルトの名無しさん mailto:sage [04/09/19 12:45:12] チョット前に出てたハンディスキームじゃダメなのか?
373 名前:ミミ [04/09/19 12:49:18] >>371 情報ありがとうございます。一度よく調べてみます。 うーん、私は .NET 勉強してからしばらくたつので、 いろいろ忘れていますが、.NET ってそんなにいいものですかね? どうも GUI が重ったるいし、C# も VB.Net もなんかシンプルじゃないし、 .NET ライブラリってあんまり洗練されていないような気がするし (MS的ゴテゴテ)、 いじってたらバグがごろごろ出てきたし (もう直ってるだろうけど) "as a hacking tool" というコンセプトと馴染むでしょうか。 "as a hacking tool" ===> "cool and cute" ですよ?
374 名前:& ◆TACpYgPjX6 [04/09/19 12:55:32] >>372 > チョット前に出てたハンディスキームじゃダメなのか? むむ! これ、なんだかよさげですね。 こんなのがあったんですね。 ちょっと今日の宿題にしてみます。 ありがとうございます!
375 名前:デフォルトの名無しさん mailto:sage [04/09/19 13:13:42] おぇ
376 名前:デフォルトの名無しさん mailto:sage [04/09/19 13:17:42] "as a hacking tool" ===> "as a hacking tool"
377 名前:デフォルトの名無しさん mailto:sage [04/09/19 14:24:34] なんでハンドル二つ使って常時ageなんだ?
378 名前:デフォルトの名無しさん mailto:sage [04/09/19 14:34:01] Cからのscheme呼出しの中で補足された継続のエクステントが無制限な処理系ってあるの? GaucheでもCからのコールバックで補足されたもののエクステントはコールバック内に限定されるし
379 名前:デフォルトの名無しさん mailto:sage [04/09/19 15:02:33] >>363 クロージャが難しいというよりはガーベジコレクションが難しそう. Schemeで書かれた関数をWin32APIに渡して,コールバック関数として登録したとして, その関数がいつまで使われるかはSchemeインタプリタ側では判別できないと思う.
380 名前:デフォルトの名無しさん mailto:sage [04/09/19 16:06:22] >>377 1. 2ch が Netscape や Mozilla に対応していない。 2. よって、cookie に書き込まれた全角のハンドル名が化ける。 3. あわててハンドル名を入れなおすと、そのときは正しい名前で掲示板に 書き込まれる。 4. 次に書き込むと、またハンドルが化ける。 5. 以下繰り返し。 Netscape, Mozilla ではハンドルは半角英数にするのが吉。 常時 age については分からない。
381 名前:デフォルトの名無しさん mailto:sage [04/09/19 16:13:53] >>380 > >>377 > 常時 age については分からない。 sage を知らない、だろうな。
382 名前:デフォルトの名無しさん mailto:sage [04/09/19 17:31:16] > Windows みたいな素敵なシステムに、 ここんとこに賛同できないのは漏れだけなのか。s/Windows/MacOSX/だったら同意なんだが。
383 名前:デフォルトの名無しさん mailto:sage [04/09/19 17:42:53] その部分は罠と判断した。
384 名前:デフォルトの名無しさん mailto:sage [04/09/19 17:53:10] >>366 > 一番大きなのは、コンソール (標準入出力) を前提としていること。 なにか大きな誤解をしているような。 Schemeって必ずしもトップレベル環境のreader/writerと標準入出力が結びついている 必要はないでしょ。Dr.Schemeとか触ってみれば? ttp://www.drscheme.org/ あとDLLの動的呼び出しそのものはそれほど難しくないと思われ ttp://www.kt.rim.or.jp/~qfwfq/rhiz-pi/ > 共有オブジェクト(Win32ではDLL)を動的にロードし、 > 中の関数をscheme コードから呼び出すことができる。 > さらにコールバック関数をscheme コードで記述できる。
385 名前:デフォルトの名無しさん mailto:sage [04/09/19 22:06:34] DrSchemeって、一応他のエディタで編集してロードすれば、日本語表示できるみたいだな。 例えば、「あ」と言う文字のように二文字目が\と同じコードの場合には「あ\」と、\を余分にくっつけて \\を\と認識させるという技を使わなくちゃいけないのが面倒だけど。 ランタイムDLLが必要になるがEXEも作れるようだし、俺の中ではDrScheme最強になりつつある。
386 名前:デフォルトの名無しさん mailto:sage [04/09/20 01:04:59] gaucheでhtml解析するときって皆さんどうやってます? saaxとかつかってます? それとも自分で解析モジュールを書いちゃいます?
387 名前:デフォルトの名無しさん mailto:sage [04/09/23 02:10:26] やっと cygwin + slib のインスコ完了したよ・・・ なんでこんなに疲れるんだろう
388 名前:デフォルトの名無しさん mailto:sage [04/09/23 11:27:01] >>386 これは? 使ったことないけど。 www.neilvandyke.org/htmlprag/
389 名前:デフォルトの名無しさん [04/09/23 18:33:55] gosh のload-path は add-load-path 以外に方法がないのですか? 毎回指定するの面度印ですけど・・・
390 名前:デフォルトの名無しさん mailto:sage [04/09/23 18:40:08] >>389 command line optionの-I
391 名前:デフォルトの名無しさん mailto:sage [04/09/23 19:04:22] >>368 継続はコールバックに跨らなければ問題ない。 ハンドラからtoplevelに直接行ったりきたりする様な継続の呼び出しは 不可能ではないけど、コールバックを叩くWindows側で何をしているのかわからんから、 こっちはやらない方が良いとは思う。 ちゃんとコールバックに制御を返却する当てがあるなら、たぶん問題なし。 これに関しては結局セオリーみたいのは見つからなかった。 (deine user32 (loadlib "user32.dll" )) (define DefWindowProc (getproc user32 "DefWindowProcA" __stdcall '(h m w l))) (define handler (make-callback __stdcall (lambda (hwnd msg wparam lparam) (DefWindowProc hwnd msg wparam lparam)))) (define (single-window handler) (make-window handler)) 自作の処理系ではこういう感じで窓を作成する。 make-callbackでクロージャとC関数をブリッジする以外に特別な物はない。 schemeの様に内部定義を許す言語のメリットはここから。 handlerはclosureそのものなので、関数外の局所変数をあえて引数渡しする必要がなく、 C言語だとグローバル変数に移したり関数で分離していた箇所を一つにまとめることができる。 (define (test foo) (make-window (make-callback __stdcall (lambda (hwnd msg wparam lparam) (display foo) ;; ハンドラ外の変数の参照 (DefWindowProc hwnd msg wparam lparam)) この辺の自由度はC言語と比べると比較にならない。(gccはExtensionで関数内関数が 使えるんだけど制限が多く、schemeの様に内関数同士の再帰やコールバック関数にできない。) ただね、いまんとここれ使って何がしたいって訳でもないので、そのまま放置状態。 とにかく機構そのものより、ラッパとか書くのが面倒すぎて、型変換も適当。
392 名前:& ◆TACpYgPjX6 [04/09/23 19:48:16] >>391 > 継続はコールバックに跨らなければ問題ない。 > ちゃんとコールバックに制御を返却する当てがあるなら、たぶん問題なし。 > これに関しては結局セオリーみたいのは見つからなかった。 OS から コールバック A が呼ばれ、そこで継続 ContA を作成して、 トップレベルに束縛したとします。 次に、OS から別のコールバック B が呼ばれ、そこから ContA を呼び出すとします。 ContA を呼び出した直後は別に問題は発生しませんよね。 問題は、ContA を呼び出し後に、コールバック A から呼び出し側に戻って しまうことが問題なのですよね。 であれば、コールバック A から OS 側に戻ろうとする直前に、 あたかも、コールバック B から戻ったように見せかけることができれば、 いい感じがしませんか?
393 名前:ミミ [04/09/23 19:48:51] 具体的な実装方法は、コールバック クロージャ B の サンクとなる C 関数において、 コールバック開始時の継続をキャプチャしておきます。 また、「コールバック B のコンテキストである」という記録を g_callbackContext グローバル変数に保持しておきます。 ここで、コールバック クロージャ A のサンクとなる C 関数から OS 側に戻ろうとするとき、g_callbackContext を確認し、 それがコールバック A のコンテキストであれば、 そのまま OS 側に戻ります。 コールバック A のコンテキストでなければ、 そのコンテキストに対応する継続 (コールバック B 開始時にキャプチャしたもの) を呼び出すことで、コールバック B のコンテキストを回復した上で OS 側に戻ります。 少し問題なのは、コールバックの戻り値をどのように決定するかですが。。。
394 名前:デフォルトの名無しさん mailto:sage [04/09/23 20:27:26] >>393 >問題は、ContA を呼び出し後に、コールバック A から呼び出し側に戻って >しまうことが問題なのですよね。 Scheme の継続って、OS 側のコンテキストすら 捕獲できるほど強力だったか? 根源的に何か勘違いしていないか?
395 名前:& ◆TACpYgPjX6 [04/09/23 20:40:39] >>394 実装によってはできますよ。 スタックをすべて記憶する類の実装の場合です。
396 名前:デフォルトの名無しさん mailto:sage [04/09/23 20:48:45] なんでそんなに継続にこだわってるんだ? コールバックの中で補足した継続にそこまで意味があるとは思えないんだが。 具体的にどういう使いかたを想定しているの?
397 名前:ミミ [04/09/23 21:06:20] いやー、コールバック ベースではない普通の Scheme コードの場合 (C でいう main() プログラム)、継続はどこで作成されたものであっても 自由に使えますよね。 でも、コールバック ベースの Scheme コードの場合 (C でいう WinMain() プログラム)、その継続がどのコールバック内 (「どの」というのは空間および時間で区別しなければならない) で呼び出されたかを覚えていないとだめですよね。 継続を1つのコールバック内に閉じ込めて使用しなければならないという この窮屈さを解消したいだけなのですけど。。。
398 名前:ミミ [04/09/23 21:07:40] すいません、間違い。 × で呼び出されたかを覚えていないとだめですよね。 ○ で作成されたかを覚えていないとだめですよね。
399 名前:デフォルトの名無しさん mailto:sage [04/09/23 21:10:25] いいかげんsageてくんないかなあ・・・
400 名前:デフォルトの名無しさん mailto:sage [04/09/23 21:22:30] こんなことでぐだぐだ言ってないで、さっさと処理系書いてみれ。 コールバックをまたぐ継続が動かないことくらいすぐ分かるよ。
401 名前:ミミ [04/09/23 21:37:21] >> 400 いや、私がいいたかったのは、そうじゃないんですよぉ。。。 おこんないでくださいよぉ。。
402 名前:デフォルトの名無しさん mailto:sage [04/09/23 21:41:42] 具体的に 「こういう使い方すると非常に便利だから絶対使いたい」 というわけでもないのに、 処理系云々の前段階げグダグダいっても意味無いだろ。 実装するにはいろいろ難しい問題があり、汎用的なものにすることは不可能なんだから、 要求が出る前から考えたって良い解法が出るわけがない。 あと、いいかげんsageろ知障。
403 名前:デフォルトの名無しさん mailto:sage [04/09/23 21:43:55] くれぐれもshiroさんとこ行ったりして迷惑かけるなよ
404 名前:デフォルトの名無しさん mailto:sage [04/09/23 21:52:20] 汎用的に実装するのはまず無理だろうし,できたとしても OS側の継続(変な言い方だけど)が戻らないんじゃ意味無し. が,絶対に無理かと問われると断言できないのが歯痒いというか何というか.
405 名前:ミミ mailto:sage [04/09/23 22:02:04] > 汎用的に実装するのはまず無理だろうし, うーんと、私はコールバックを超えて継続したいと言っているんではないのですよ。 > OS側の継続(変な言い方だけど)が戻らないんじゃ意味無し いや、ですから、OS 側の継続を行うのは可能なんですって。。。 > くれぐれもshiroさんとこ行ったりして迷惑かけるなよ あのう、shiroさんて、誰でしょうか。。。 > あと、いいかげんsageろ知障。 すいません、やっと意味が分かりました。m(_ _)m
406 名前:デフォルトの名無しさん mailto:sage [04/09/23 22:22:17] > コールバック A から OS 側に戻ろうとする直前に、 > あたかも、コールバック B から戻ったように見せかけることができれば、 この時点でOS側の継続は戻ってないと思うんだが そもそもOSがコールバック関数を呼ぶってのは言わば見せかけであって, 実際にはプロセス間通信なんかが絡んでるの判ってる?
407 名前:デフォルトの名無しさん mailto:sage [04/09/23 22:26:21] >>406 Windows素人は黙ってて欲しいなあ・・・
408 名前:ミミ mailto:sage [04/09/23 22:31:33] >>406 たぶん、私の意図を誤解されています。 実際に OS 側の継続を戻す Scheme 実装系はありますよ。
409 名前:デフォルトの名無しさん mailto:sage [04/09/23 22:33:06] OS のコールバックを跨ぐ事を前提にしているのに、 Scheme 側で生のスタックを使おうとしているのが、 根本的な設計ミスだろ? 普通の Scheme コンパイラで生のスタックを使っていたりするのは、 それが "たまたま" 使えたから。 それを理解せずにスタックに拘る奴は愚かと言う他はない。
410 名前:デフォルトの名無しさん mailto:sage [04/09/23 22:35:34] >>408 > 実際に OS 側の継続を戻す Scheme 実装系はありますよ。 それはどの OS 上のどの実装系? OS 側のサポートが無い限り setjmp/longjmp 以上のことができるとは思えないんだが。
411 名前:ミミ mailto:sage [04/09/23 22:45:10] > 409 > OS のコールバックを跨ぐ事を前提にしているのに、 ですから、私はコールバックをまたぎたいんではないんですって。 コールバックをまたぐことはできないことは、最初っから分かっているんですよ。 私がやりたいのは、いかに継続をコールバックというしがらみから解放させたように 見せかけるか、という手法なんですよ。 > 普通の Scheme コンパイラで生のスタックを使っていたりするのは、 > それが "たまたま" 使えたから。 > それを理解せずにスタックに拘る奴は愚かと言う他はない。 スタックを記録するタイプの実装を行っている SCM は、 Mac, Win, Linux, BSD, Solaris, AIX, HP-UX, OS/2, DOS, Amiga, Atari など多くの OS に移植されています。 これほど汎用的に使える手法を"たまたま"と表現することはできないでしょう。
412 名前:デフォルトの名無しさん mailto:sage [04/09/23 22:54:28] >私がやりたいのは、いかに継続をコールバックというしがらみから解放させたように >見せかけるか、という手法なんですよ。 で、そう見せかけるためには、実際にはコールバックをまたぐ必要があるんだろ? >これほど汎用的に使える手法を"たまたま"と表現することはできないでしょう。 "たまたま" の意味を取り違えているな。 レジスタに 0 をセットのには、たまたま XOR が使えるけど、 123 をセットする為には、どんなにビットをいじくりまわしても 無理。素直にロード命令を使っとけって事。
413 名前:デフォルトの名無しさん mailto:sage [04/09/23 22:55:51] > ですから、私はコールバックをまたぎたいんではないんですって。 まず,「コールバックを跨がなければ問題なく継続を扱える」のは >>391 さんの言う通り問題ない. >>392 の発言はどう読んでも「コールバックを跨ぎたい」という風にしか 読み取れないんだが. > いかに継続をコールバックというしがらみから解放させたように > 見せかけるか、 もう少し具体的に書いてくれ.これでは全く意味不明.
414 名前:デフォルトの名無しさん mailto:sage [04/09/23 23:00:38] なんか変なやつが増えた? 具体的には412だけどさ・・・ おねがいだからこれ以上変なスレにしないでね(苦笑 恐らくミミが言ってるのはschemeで擬似的な継続を作ってやりすごそうって事だよな? その偽の継続と、OS側の本物の継続はかならずしも一致しなくていい。
415 名前:デフォルトの名無しさん mailto:sage [04/09/23 23:03:01] つまりschemeコード上で破綻してなければどんな手段の継続であるうとかまわない、 最終的にプログラムを終了させたときにOS側の継続と一致していれば良い、 って事だと思う。
416 名前:デフォルトの名無しさん mailto:sage [04/09/23 23:05:21] だからコールバックに突入してそのままルートの継続呼び出して戻ってきても、 OS側の本物の継続はまだコールバックの中、ってこともありえる。
417 名前:デフォルトの名無しさん mailto:sage [04/09/23 23:11:02] >>416 言ってることは分からなくもないが,別に疑似的な継続なんて持ち出さなくても 「コールバックを跨がなければ問題なく継続を扱える」 方法はあるわけで.
418 名前:デフォルトの名無しさん mailto:sage [04/09/23 23:17:24] で,コールバックを跨ぐために疑似的な継続を持ち出してみたものの, どのみちOS側の継続は戻せないので意味ないじゃん…という感じ.
419 名前:デフォルトの名無しさん mailto:sage [04/09/23 23:19:33] 別にOS側の継続戻す必要ないよ
420 名前:デフォルトの名無しさん mailto:sage [04/09/23 23:23:51] おまいらちょっと用語の整理が居るんじゃないか? おれは理解が追いついていないから何もできんですまんが
421 名前:デフォルトの名無しさん mailto:sage [04/09/23 23:26:00] >>419 WM_* のコールバック中に継続を保存し、それを再開できるとでも?
422 名前:デフォルトの名無しさん mailto:sage [04/09/23 23:29:22] コールバックをまたがないのなら、それは継続ではないし、継続である必要も無い。 全く無意味で非実用的な事態を想定し、無駄に思考時間を消費しているだけ。
423 名前:デフォルトの名無しさん mailto:sage [04/09/23 23:31:10] >>420 ついでにカキコしてる人の整理もな… どれとどれが同じ人の書き込みなのかさっぱり
424 名前:デフォルトの名無しさん mailto:sage [04/09/23 23:32:44] >>423 「ミミ」以外は区別する必要無い気が
425 名前:デフォルトの名無しさん mailto:sage [04/09/23 23:54:40] >>392 を図示してみた。間違っていたら指摘してくれ。 注)[Sn]:Scheme で使うスタック要素, [On]:OS で使うスタック要素 1. >OS から コールバック A が呼ばれ、 スタック:[S1][S2][O1][O2][A] 2. >そこで継続 ContA を作成して、 >トップレベルに束縛したとします。 スタック:[S1][S2][O1][O2][A] ContA:[S1][S2][O1][O2][A] 3. >次に、OS から別のコールバック B が呼ばれ、 スタック:[S3][S4][S5][S6][O3][O4][O5][O6][B] ContA:[S1][S2][O1][O2][A]
426 名前:デフォルトの名無しさん mailto:sage [04/09/23 23:55:07] 4. >そこから ContA を呼び出すとします。 >ContA を呼び出した直後は別に問題は発生しませんよね。 スタック:[S1][S2][O1][O2][A] 5. >問題は、ContA を呼び出し後に、コールバック A から呼び出し側に戻って >しまうことが問題なのですよね。 スタック:[S1][S2][O1][O2] <-これが問題。本来なら[O6]に戻るべき。 6. >であれば、コールバック A から OS 側に戻ろうとする直前に、 >あたかも、コールバック B から戻ったように見せかけることができれば、 >いい感じがしませんか? 3.から4.に遷移する時に スタック:[S3][S4][S5][S6][O3][O4][O5][O6][A] となればいい、って事か?
427 名前:ミミ mailto:sage [04/09/24 00:07:07] >>415 >>416 私の意図を汲み取ってくれています。 ありがとうございます。 >>425 >>426 最後の 6 だけ私の意図とは違います。 > 3.から4.に遷移する時に > スタック:[S3][S4][S5][S6][O3][O4][O5][O6][A] > となればいい、って事か? のではなくって、 継続 A へ飛んだあと、 コールバックを終了して OS 側に戻る直前に、 スタック:[S3][S4][S5][S6][O3][O4][O5][O6] となるということです。 したがって、これを行うのは、 コールバック A の C サンクの中です。
428 名前:デフォルトの名無しさん mailto:sage [04/09/24 00:07:16] コールバックの用途が概ね副作用であり、大域的状態変化が伴う事を無視して スタックだけを取り上げるのはいかがなものかと
429 名前:デフォルトの名無しさん mailto:sage [04/09/24 00:10:13] >>410 は無視ですかそうですか
430 名前:デフォルトの名無しさん mailto:sage [04/09/24 00:17:24] 410に限らず、都合の悪いレスは無視みたいね オナニーは一人でやってほしいもんだ
431 名前:デフォルトの名無しさん mailto:sage [04/09/24 00:17:45] >>429 素人さんは、すっこんでろ
432 名前:デフォルトの名無しさん mailto:sage [04/09/24 00:20:10] 410は何が知りたいんだろう・・・
433 名前:デフォルトの名無しさん mailto:sage [04/09/24 00:25:59] >>410 =429=430 setjmp/longjmpは、別に「OSの機能」で実現されてるわけじゃないぞ? ほぼレジスタやスタックの操作だけ。 アセンブラというものが使える状況なら基本的にどのOSでも作れる。
434 名前:デフォルトの名無しさん mailto:sage [04/09/24 00:29:04] >>433 だからこそOSを含めて継続の保存/復帰を実現するには、OS側のサポートも必要だろってことだよ。 で、そういう実装があるのなら参考のために是非知りたいということ。
435 名前:デフォルトの名無しさん mailto:sage [04/09/24 00:30:55] >>434 おまえさ、わざと勘違いしてんのか? つまんねえよ。 話の腰を折るだけのつもりなら消えてくれ。
436 名前:デフォルトの名無しさん mailto:sage [04/09/24 00:35:35] なんか、OSを含めて継続保存とか意味不明なこと言ってるアフォがいるけど、 いつからOS含めた話になったの?
437 名前:デフォルトの名無しさん mailto:sage [04/09/24 00:37:55] >>436 >>408 に、「実際に OS 側の継続を戻す Scheme 実装系はありますよ。」とあり、 >>410 は、その実装系はなんなのかを知りたいという。 ただそれだけの話なんだが、そんなに分かりづらいか?
438 名前:デフォルトの名無しさん mailto:sage [04/09/24 00:38:21] WindowsプログラマとUNIX BAKA (BAd Knowhow Association)の 間で文化摩擦が発生しています
439 名前:デフォルトの名無しさん mailto:sage [04/09/24 00:42:16] 「OS側の継続」の定義がそれぞれ違うんだろうね。 なんかプロセス間通信とか言ってる馬鹿(=410)が混じってるので これ以上続けても無駄な気がする。 それでも続けるなら、 ここからは「Windows限定」でどぞ↓
440 名前:デフォルトの名無しさん mailto:sage [04/09/24 00:42:35] なんでそーなるの? Windows でも X でも、Scheme 的継続はコールバック跨げないよ。
441 名前:デフォルトの名無しさん mailto:sage [04/09/24 00:44:31] >>440 だから話をシンプルにするための処置だよ。 おまえた単にWindows嫌いなだけだろ。 以降「Windows限定」でどぞ↓
442 名前:デフォルトの名無しさん mailto:sage [04/09/24 00:46:44] ('A`)
443 名前:デフォルトの名無しさん mailto:sage [04/09/24 00:48:36] そもそもXなんて誰も使わないしUNIX系は無視してもいいと思う。 「ミミ」自体Windowsって言ってるんだし。
444 名前:デフォルトの名無しさん mailto:sage [04/09/24 00:49:15] いや〜、やっぱり Scheme は面白いですね。
445 名前:デフォルトの名無しさん mailto:sage [04/09/24 00:50:30] (gc)
446 名前:デフォルトの名無しさん mailto:sage [04/09/24 00:50:58] (exit)
447 名前:デフォルトの名無しさん mailto:sage [04/09/24 00:59:15] UNIX馬鹿の粘着のおかげで横道逸れすぎて話が全然進まなかったな。
448 名前:デフォルトの名無しさん mailto:sage [04/09/24 01:00:04] なんでもいいからさー、実装出してよ。
449 名前:デフォルトの名無しさん mailto:sage [04/09/24 01:10:55] 程よく荒れてきたようなので、一つ質問。 例えば、 ContA:[S1][S2][O1][O2][A] で、[A] から抜けて([O2][O1]の事は脇に置いておいて) [S2]に戻るから、これを「継続」って呼んでいるんだよね? なのに 6.のように [A] から抜けた後、[S6]に戻る(?)ものを 「継続」って呼んでも良いとでも思っているの? それは Scheme でいう「継続」とは全く別のものじゃないの?
450 名前:デフォルトの名無しさん mailto:sage [04/09/24 01:30:40] ミミタンの作る処理系は独自実装なので そんなコトはどうでもいいのです。
451 名前:デフォルトの名無しさん mailto:sage [04/09/24 01:32:18] 別に問題ない。 スタックのどこであろうとschemeコードに制御が移ったのなら、それは立派な継続。 コールバック内外へ飛んだ事を「継続を使うユーザー」が知っていればいい。
452 名前:デフォルトの名無しさん mailto:sage [04/09/24 01:32:59] とりあえず Scheme にやさしい OS をつくろうよ。
453 名前:デフォルトの名無しさん mailto:sage [04/09/24 01:45:21] 頭固い人多いね ま、一人が粘着してるだけかもしらんけど・・ >>449 >「継続」って呼んでも良いとでも思っているの? >「継続」って呼んでも良いとでも思っているの? >「継続」って呼んでも良いとでも思っているの? もうね、君に理解は無理だよ
454 名前:デフォルトの名無しさん mailto:sage [04/09/24 01:55:24] >>453 >もうね、君に理解は無理だよ いや、それはすなわち規格で規定された動作が 出来なくなってしまうという事を意味すると思ったのだが・・・ ま、確かに俺には理解不能だな。
455 名前:デフォルトの名無しさん mailto:sage [04/09/24 02:26:12] >>454 ミミが定義した偽継続だからそれでいいんだろ。scheme的継続だと思ってはいけない。
456 名前:デフォルトの名無しさん mailto:sage [04/09/24 02:37:43] 規格に通らなくなるってわけでもなさそうだけど。 規定された動作って、どの辺の事?>454
457 名前:デフォルトの名無しさん mailto:sage [04/09/24 02:59:31] 実装の話もいいけど、 使う側の話もしようぜ?
458 名前:デフォルトの名無しさん mailto:sage [04/09/24 04:27:16] ヒント。partial continuaionについて調べよ。
459 名前:デフォルトの名無しさん mailto:sage [04/09/24 08:17:03] 事の発端となった香具師の要件が明確でないのに本人はうやむやにしたまま消えちゃうし、 まるでそれと入れ替わるかのようにいつもは議論になっても出てこないような類のレベルの低い煽りのみを繰り返す香具師が出てくるし、 そんな状態で外野が言い合ってたって全く意味が無く、時間の無駄以外の何者でもないと思う。
460 名前:デフォルトの名無しさん mailto:sage [04/09/24 09:25:41] ミミは夜行性だから夜まで待て
461 名前:デフォルトの名無しさん mailto:sage [04/09/24 13:45:00] 話を蒸し返すようで悪いが,「プロセス間通信云々」→「Windows素人は黙ってろ」 の流れの意味が分からない.誰か説明キボン. 例えば,Windowsのウィンドウプロシージャが呼び出される過程は, ・OSからウィンドウの属しているスレッドのメッセージキューに メッセージが送られる.(ここでプロセス間通信) ・ウィンドウの属しているスレッドにて,キューからメッセージ取り出し. ・取り出したメッセージを引数にコールバックプロシージャを呼び出す. こんな感じじゃないの? 明らかにプロセス間通信は絡んでると思うんだけど.
462 名前:デフォルトの名無しさん mailto:sage [04/09/24 15:50:49] www.double.co.nz/scheme/partial-continuations/partial-continuations.html
463 名前:デフォルトの名無しさん mailto:sage [04/09/24 16:23:22] >>461 必死に慣れない参考書読んで調べたんだろうけどさ、基本的なことを まるで理解してないな。 おまえが調べた内容は、OS側でブラックボックス化してる部分を ただほじくりかえしただけ。つまり大ハズレもいいとこ。 これはね、まず恥ずかしいことなんだと認識してくれよ? 悦に浸るどころじゃないよ?(w なんのためにスレッド毎にメッセージキューがあるのかをまずよく考えてね? Windowsの開発者はメッセージキューの知識だけでプログラミングできるだろ。 あえて「プロセス間通信」を意識して扱う必要なんてないんだよ。 別にOSを作るわけじゃないんだから。 つーかプログラム書いた事もなさそうだし、どっか他行って勉強してきて。 もうね、ここで続けられると邪魔だから消えろ。
464 名前:デフォルトの名無しさん mailto:sage [04/09/24 17:38:49] 全然素人なんだけど、WindowsってOSの使用するスタック領域と アプリケーションプロセスの使用するスタック領域は連続しているの? 連続しているからスタックを保存すれば継続が補足できると言う前提で 議論しているみたいだけど、OS側に制御が渡った瞬間、別のプロセス空間の スタック領域にスイッチする場合、どう考えてもOS側の継続を制御するのは 無理のように思えるけど。。
465 名前:デフォルトの名無しさん [04/09/24 17:59:39] >>464 =461 全部間違ってる もう引退時じゃね? LISPには柔軟な頭が必要なのよ
466 名前:デフォルトの名無しさん mailto:sage [04/09/24 18:06:09] > ・OSからウィンドウの属しているスレッドのメッセージキューに > メッセージが送られる.(ここでプロセス間通信) PostMessage,SendMessageは ・他プロセスの場合は最初に該当するスレッドの保有するメッセージキュー領域を メモリマップドファイルを使って共有し、データ書き込み。 ・同一プロセス、他スレッドの場合は受信スレッドのメッセージキューに直接書き込み。 ・同一スレッドなら、コールバックの直接呼出し。 こんな感じか?
467 名前:464 mailto:sage [04/09/24 18:11:17] 一応いっておくけど、461とは別人です。 >>425 みてもわかるように、OS側の継続がアプリケーションと 同じスタックに乗っている前提で話してるよね? 違うのかな?
468 名前:デフォルトの名無しさん mailto:sage [04/09/24 18:11:50] >>463 反応するのも馬鹿らしいが, メッセージキューってのは立派なプロセス/スレッド間通信の一種. あと,この部分は別にブラックボックスにはなってない.むしろ基礎の基礎. >>464 > OS側の継続を制御するのは無理 これは正しい. > スタックを保存すれば継続が補足できると言う前提で議論している こっちは×.最終的にスタックを元の状態に戻してやれば Schemeインタプリタ側では好き勝手にいじってもいいよねー,って話. たぶん.
469 名前:464 mailto:sage [04/09/24 18:15:44] >>468 コールバックは常に同一プロセス内から直接呼び出されるのなら、 スタックコピーで制御は戻りそうなんだけど、私が疑問に思ったのは、 コールバックを渡すOS側は同じプロセス空間で動いてないような気が するんだけど。あてずっぽうですが。
470 名前:デフォルトの名無しさん mailto:sage [04/09/24 18:16:57] >>458 www.google.co.jp/search?hl=ja&ie=UTF-8&q=R5RS+partial+continuaion&lr= R5RS partial continuaionに該当するページが見つかりませんでした。 www.google.co.jp/search?hl=ja&ie=UTF-8&q=scheme+partial+continuaion&lr= scheme partial continuaionに該当するページが見つかりませんでした。 >>462 規格とは関係ないみたいよ? もちろん部分継続も問題ないし。 いったい何を危惧してるのかね。 ちゃんと継続を理解してる人って少ないの?
471 名前:デフォルトの名無しさん mailto:sage [04/09/24 18:19:46] >>464 スレ違いな質問繰り返してんじゃねーよ デバッガ使って自分で確かめろ ミミよりウザイ
472 名前:464 mailto:sage [04/09/24 18:20:40] Schemeインタプリタ自体は同一プロセス内で動いてるから、 スタックコピーで継続が戻るのは当たり前だと思うけど、 Schemeインタプリタとは異なるプロセスの継続も補足できるの?
473 名前:デフォルトの名無しさん mailto:sage [04/09/24 18:21:27] >>469 メッセージキューにメッセージを置くのはOS側(もちろん違うプロセス空間で動いてる)だけど, メッセージを取り出すのは自分なので問題ない.というか,別に違うプロセス空間から 呼び出されても問題ないと思うけど. >>470 ミミがやりたいのは部分継続じゃないの? ってことだと思う.
474 名前:464 mailto:sage [04/09/24 18:24:37] >>473 ああ、ここでコールバックって言ってるのは、あくまでも イベントキューから自分で読み出して関数を呼ぶイベント駆動 プログラミングのことなんだね。 違うものを想像してたよ。
475 名前:デフォルトの名無しさん mailto:sage [04/09/24 18:25:26] >Schemeインタプリタとは異なるプロセスの継続も補足できるの? で き ま せ ん なあ、その電波な質問はどっからやってくるんだ?
476 名前:464 mailto:sage [04/09/24 18:26:20] >>475 言葉のすれ違いと思ってくんなまし。
477 名前:デフォルトの名無しさん mailto:sage [04/09/24 18:26:43] つーか試しもしないで質問ばかりする464は不要な人材
478 名前:ミミ mailto:sage [04/09/24 18:46:38] こんにちは。 昨日は遅くまでありがとうございます。 細かい議論はあるかもしれませんが、 おおまかなアイデアは理解していただけたようですね。 私は部分継続を行いたいのではなくて、 コールバックの検問所を作りたいということです。 図にまとめてみました。
479 名前:ミミ mailto:sage [04/09/24 18:47:08] ■従来のコールバックの実装 ┌──┐ │ │ ┌────┐ │ │ ┌┘ │ │ CbA├─┘ │ OS │ ├─┐ ContA │ 側 │ │ └┐ │ │ │ └────┘ │ │ ┌────┐ │ │ ┌┘ │ │ CbB├─┘ │ │ ├─┐ o--─────ここから ContA を呼ぶと │ │ └┐ │ CbA から出て行ってしまう。 └──┘ └────┘ これは破綻する。
480 名前:ミミ mailto:sage [04/09/24 18:47:28] ■検問所式コールバックの実装 ┌──┐ │ │ │ │ CbA ┌─────┐ │ │ ┌─┘ │ │ ├──┼─┐ ContA │ OS │ │ │ └─────┘ 側 │ ⇔ │ │ │ │ ┌─────┐ │ ├──┼─┘ │ │ │ └─┐ o--───── ここから ContA を呼んでも │ │ CbB └─────┘ OS 側に正しく戻ってくれる。 │ │ └──┘ コールバックは必ず検問所(⇔)を通して呼び出されるし、 検問所を通して戻る。検問所を通して戻るときは、 必要があればスタックの回復を行ってくれる。 したがって、Scheme 側では継続とコールバックの関係を 気にしなくてよい。
481 名前:ミミ mailto:sage [04/09/24 18:49:37] ■従来のコールバックの実装 ┌──┐ │ │ ┌────┐ │ │ ┌┘ │ │ CbA├─┘ │ OS │ ├─┐ ContA │ 側 │ │ └┐ │ │ │ └────┘ │ │ ┌────┐ │ │ ┌┘ │ │ CbB├─┘ │ │ ├─┐ o--─────ここから ContA を呼ぶと │ │ └┐ │ CbA から出て行ってしまう。 └──┘ └────┘ これは破綻する。
482 名前:ミミ mailto:sage [04/09/24 18:50:32] あれれ、うまく表示されませんねぇ。。。
483 名前:ミミ mailto:sage [04/09/24 18:54:26] ■従来のコールバックの実装 ┌──┐ │ │ ┌────┐ │ │ ┌┘ │ │ CbA├─┘ │ OS │ ├─┐ ContA │ 側 │ │ └┐ │ │ │ └────┘ │ │ ┌────┐ │ │ ┌┘ │ │ CbB├─┘ │ │ ├─┐ o--─────ここから ContA を呼ぶと │ │ └┐ │ CbA から出て行ってしまう。 └──┘ └────┘ これは破綻する。
484 名前:デフォルトの名無しさん mailto:sage [04/09/24 18:55:39] もういいよ・・・ なんとなくわかったから 書き込みの練習は専用板があるからそっちでやってくれ aa5.2ch.net/aasaloon/
485 名前:デフォルトの名無しさん mailto:sage [04/09/24 19:18:16] だから、具体的にどういう場面で使いたいのよ? それは継続でなければならないのか?
486 名前:デフォルトの名無しさん mailto:sage [04/09/24 19:20:13] UNIXっぽくない用途だって。
487 名前:ミミ mailto:sage [04/09/24 19:31:23] >>485 > だから、具体的にどういう場面で使いたいのよ? 今のところ、特に使い道というものは考えていないです。 コールバック ベースの Scheme コードを書く場合、 Gauche のように継続に何らかを制限をつけるという方法もありますが、 検問所方式で常に安全を確保するという方法もあるのでは、 というだけです。 もう少しアイデアを膨らませたら、何か面白いことができるかもしれません。 Scheme 実装を書きながら、おいおい考えたいと思っています。
488 名前:デフォルトの名無しさん mailto:sage [04/09/24 19:35:08] 案の定何も考えてないのに非現実的なものを想定して時間を無駄にしてただけかよ アホくさ
489 名前:ミミ mailto:sage [04/09/24 19:37:58] >>448 そんなことはありませんよ。 どんな小さなアイデアも、大きな発明に結びつく可能性があるって、 どこかの発明家が言っていましたよ。 Windows 専用 Scheme で実現したい機能とかありましたら、 みなさんのご意見もお聞きしたいです。 面白そうだったら実装したいと思います。
490 名前:デフォルトの名無しさん mailto:sage [04/09/24 19:52:13] RS232Cに継続ベースで送受信
491 名前:ミミ mailto:sage [04/09/24 19:57:05] > RS232Cに継続ベースで送受信 ええ?これはどういうことですか?
492 名前:デフォルトの名無しさん mailto:sage [04/09/24 19:58:21] なぜかここって学習能力のないUNIX知障が常駐してるね。 何故? ここには何もありませんよ〜?
493 名前:デフォルトの名無しさん mailto:sage [04/09/24 20:03:36] 「知障」だの「全部間違ってる」だの言うだけで具体的なことを 何一つ言えない威勢のいいやつが一人居るなw おれ? まあ、おれもそうかな・・・
494 名前:デフォルトの名無しさん mailto:sage [04/09/24 20:09:03] >>489 そういうのは、まずできることをやってから言うもんだよ。 技術的知識やノウハウがなきゃ、せっかくのアイデアもその価値を正しく見極めることができず、 多大な時間とコストをかけて実装したのに実はもっと簡単でいい解法があった、なんてことになりかねない。 そうでなくても、モノが無いのに口先だけの人が好かれやすいとは思えないし。
495 名前:デフォルトの名無しさん mailto:sage [04/09/24 21:00:54] >>494 いいじゃん。いずれ実装が出れば白黒はっきりつくんだしさ。 実装がなきゃ評価できないってんなら黙ってればいい。 漏れは、>>480 で言っているのが部分継続とどう違うのか よくわからないんで、これ以上はコードで説明してもらいたい (仮想OSを使ったSchemeコードで構わない) と思うけど。 コールバックで捕まえる継続は、検問所までの部分継続だと するだけでちゃんと動くんじゃないの、ってことね。
496 名前:デフォルトの名無しさん mailto:sage [04/09/24 21:18:25] >>480 www.ipsj.or.jp/members/Trans/Jpn/03/2001/4211/article004.html これがズバリかな? 個人的には, > Scheme 側では継続とコールバックの関係を気にしなくてよい とは思えない. 完全な継続とコールバックまでの部分継続が暗黙のうちに すり替えられるのはこわい…というか,常に意識していなければ危険だと思う. call/ccとは別の名前で実装するんなら問題ないかな? >>495 コールバック時に暗黙に行うって所がポイントなんじゃない? 俺は上述のようにデメリットが大きいと思うけどね.
497 名前:デフォルトの名無しさん mailto:sage [04/09/24 22:44:16] キャッチコピーとしては魅力を感じます
498 名前:デフォルトの名無しさん [04/09/24 22:53:39] cygwin で gauche-gl のインストールに成功した人 いませんか? glut
499 名前:デフォルトの名無しさん [04/09/24 22:56:29] glut 関連の関数が解決できずにmake が失敗します
500 名前:デフォルトの名無しさん mailto:sage [04/09/24 23:09:41] そういや昔glutのインターフェースが無茶苦茶いいかげんな事に 気付いて使う気なくしたんだった。
501 名前:デフォルトの名無しさん [04/09/24 23:20:57] ここを見る限りだと成功している人がいるみたいなんだけど・・・ やり方がわからん ttp://www.kauda.jp/~oda/diary200404.html
502 名前:デフォルトの名無しさん mailto:sage [04/09/25 05:41:27] >>499 うちでも普通に入ったけど。 glutはインストールしてある? 標準以外の場所に入ってたら、configureに--with-glut オプションが必要かも。
503 名前:デフォルトの名無しさん [04/09/25 09:13:43] >>498 成功してます $ ln -s /usr/include/GL /usr/include/GLUT $ ./confiugre --without-x でいけるはず.
504 名前:498 [04/09/25 11:28:34] 最近のcygwinはGLUTが最初から入っていると いうことなのでGLUT.hを検索すると色々なディレクトリに 入っていてどこがどこやら・・・ 見つかったディレクトリは c:/cygwin/usr/include/FL c:/cygwin/usr/include/mingw/GL c:/cygwin/usr/X11R6/include/GL GLUTはcygwinのsetup.exeからダウンロードした時点では まだインストールされていない?のでしょうか
505 名前:デフォルトの名無しさん mailto:sage [04/09/25 12:43:57] >>504 OpenGLパッケージをインストールすれば入ってくるが。
506 名前:デフォルトの名無しさん mailto:sage [04/09/25 18:22:47] こういう話はうまくいったバージョン書いてくれないとダメなんじゃない? まあcygwinて適当なftpから適当なバージョンのアーカイブ引っ張ってくるから うまくいく組み合わせの特定ってかなり難しいとは思うけどね。 つまりcygwinで同一環境にするにはインストールログが必要なわけ。 こんなシステムだからcygwinは不安定って言われるのさ。
507 名前:デフォルトの名無しさん mailto:sage [04/09/25 18:53:06] \ ∩─ー、 ==== \/ ● 、_ `ヽ ====== / \( ● ● |つ | X_入__ノ ミ そんなエサで俺様がクマ――!! 、 (_/ ノ /⌒l /\___ノ゙_/ / ===== 〈 __ノ ==== \ \_ \ \___) \ ====== (´⌒ \ ___ \__ (´⌒;;(´⌒;; \___)___)(´;;⌒ (´⌒;; ズザザザ (´⌒; (´⌒;;;
508 名前:498 mailto:sage [04/09/25 20:28:31] >>506 色々試行錯誤したんですが、上手くいきませんでした OpenGLのバージョンを落とさないといけないっぽいことは わかったのですが・・・ 力尽きました
509 名前:デフォルトの名無しさん mailto:sage [04/09/25 23:57:34] なんかcygwinのgaucheって不安定じゃない? 何かすぐにフリーズする
510 名前:デフォルトの名無しさん mailto:sage [04/09/26 00:36:44] coLinuxを使えば?
511 名前:デフォルトの名無しさん mailto:sage [04/09/26 01:14:43] それって解決になってない気が。 それよりVC++やMingwで動かす話があったはずだけど。
512 名前:デフォルトの名無しさん mailto:sage [04/09/26 03:55:19] >>511 gauche-gl の話しでしょ? もしかして VC++で使えるって話し?
513 名前:デフォルトの名無しさん mailto:sage [04/09/26 04:26:56] 511ではないが、cygwinではなくてMingwで動かす話がある。 あまりうまくいっていないようなので、やるなら自分でやった方がよいかも。
514 名前:デフォルトの名無しさん [04/09/26 05:20:39] ("root" ("usr" "aaa.txt" "bbb.txt" ("bin" "perl" "ruby" "gosh") )) ディレクトリ構造をS式で表したいのですが、上のように 「リストの最初にディレクトリ名をおく」というのを考え ました。もっといい方法ってありますか?
515 名前:デフォルトの名無しさん mailto:sage [04/09/26 05:29:30] carはディレクトリ名、cdrはそのディレクトリの要素、でどう? cdrは、listだったときはディレクトリ、atomだったらファイル名。 ("etc" ; /etc/ "fstab" ; /etc/fstab "passwd" ; /etc/passwd ("namadb" ; /etc/namedb/ "named.conf" ; /etc/namedb/named.conf "named.root")) ; /etc/namedb/named.root とか
516 名前:515 mailto:sage [04/09/26 05:31:02] あ、よくみたら同じことやってる、おれってばか(;´Д`) もう寝ます…
517 名前:ミミ mailto:sage [04/09/26 06:07:28] >>514 UNIX だけならそれでいいと思う。 Win だとドライブ名がないとだめだね。 ("/" "C:" "WinNT" . "Notepad.exe") 絶対パスと相対パスはどう区別するのかな。
518 名前:ミミ mailto:sage [04/09/26 06:09:13] あ、勘違い。 パスを表すんじゃなくって、 ディレクトリ構造を表すんですね。
519 名前:デフォルトの名無しさん [04/09/26 06:32:49] >>515 >>517 ありがとう。絶対パスなので、上の方法で扱ってみます。 次は要素を探索して、その絶対パスを返す手続きです。でも gaucheのfindあたりでいけそうですね。調べてみます。
520 名前:デフォルトの名無しさん [04/09/26 21:55:24] PLTSchemeで.net を使えるそうなのですが・・・ www.rivendell.ws/dot-scheme/ これって使うプロジェクトの直下において 使えばよろしいの? というかmzSchme,PLT Scheme DrScheme って なんで名前が3つあるんですかね?関係性が わからないんですけど・・・
521 名前:ミミ mailto:sage [04/09/26 23:29:19] >>529 > mzSchme,PLT Scheme DrScheme って MzScheme は Scheme 実装のコア部分 DrScheme は統合開発環境 PLT Scheme は全体の総称かな。たぶん。
522 名前:デフォルトの名無しさん mailto:sage [04/09/26 23:32:42] >>521 お前のキーボードにテンキーついてないだろ HHKだから俺のにもついてないけどさ
523 名前:ミミ mailto:sage [04/09/26 23:38:14] え、なんか鋭いですね。。。 探偵さんですか。。。
524 名前:デフォルトの名無しさん mailto:sage [04/09/27 00:21:38] >>521 そういうことですか、サンクス。 >>522 え、なんでそうなるの?
525 名前:デフォルトの名無しさん mailto:sage [04/09/27 00:26:56] ふつーは数字入力でわざわざテンキーまで手をのばしたりしないよ。
526 名前:デフォルトの名無しさん mailto:sage [04/09/28 10:43:06] ふつーはレス番号を直接入力したりしないよ。
527 名前:デフォルトの名無しさん mailto:sage [04/09/28 11:15:44] ふつーの人は2ちゃんねるなんてやらないよ
528 名前:デフォルトの名無しさん mailto:sage [04/09/28 20:13:20] ふつーのひとはLispなんてやらないよ。
529 名前:デフォルトの名無しさん mailto:sage [04/09/28 20:59:04] 普通のやつらの上を行け
530 名前:デフォルトの名無しさん mailto:sage [04/09/28 22:39:02] そんな実力はありません
531 名前:デフォルトの名無しさん mailto:'sage' [04/09/29 04:52:42] (ノーマル? 普通のやつ) ; => #t (ノーマル? (上 普通のやつ)) ; => #f (ノーマル? (下 普通のやつ)) ; => #f (アブノーマル? 普通のやつ) ; => #f (アブノーマル? (上 普通のやつ)) ; => #t (アブノーマル? (下 普通のやつ)) ; => #t (equal? (上 普通のやつ) (下 普通のやつ)) ; => ?
532 名前:デフォルトの名無しさん mailto:sage [04/09/29 04:55:37] (ノーマル? 普通のやつ) ; => #t (ノーマル? (上 普通のやつ)) ; => #f (ノーマル? (下 普通のやつ)) ; => #f (アブノーマル? 普通のやつ) ; => #f (アブノーマル? (上 普通のやつ)) ; => #t (アブノーマル? (下 普通のやつ)) ; => #t (equal? (上 普通のやつ) (下 普通のやつ)) ; => ?
533 名前:デフォルトの名無しさん mailto:sage [04/09/29 07:15:56] だが気を付けたまえ
534 名前:デフォルトの名無しさん mailto:sage [04/09/29 23:24:51] アブノーマルの行きつく先はAranskだ
535 名前:デフォルトの名無しさん mailto:sage [04/09/29 23:54:01] MIT Schemeというので自作のDLLを呼びたいのですが なかなかそういうサンプルソースが見つかりません FFIとかで検索してみたのですが、なんか良いサンプル ないですかね?付属のドキュメントは何か概要ぐらいしか 書いていない感じなんです
536 名前:ミミ mailto:sage [04/09/30 00:31:23] このサンプルは見ました? (define set-window-title (windows-procedure (set-window-text (window hwnd) (text string)) bool user32.dll "SetWindowText")) (set-window-title my-win "Hi") => #t ;; Changes window's title/text
537 名前:デフォルトの名無しさん mailto:sage [04/09/30 01:04:39] >>536 見ました それだけみてもよくわかんないんです そもそもエラーが出るし・・・ ;Syntactic keyword may not be used as an expression: define とか
538 名前:デフォルトの名無しさん mailto:sage [04/09/30 23:51:48] いつのまにかgaucheがmingwでコンパイルできるようになっとる。 前はできんかったのに。mingwをバージョンアップしたからだろうか。(--;
539 名前:デフォルトの名無しさん mailto:sage [04/10/01 00:12:12] shiroさんが業を煮やしてちょこっと進めた
540 名前:デフォルトの名無しさん mailto:sage [04/10/01 02:09:58] おぉーーー
541 名前:デフォルトの名無しさん mailto:sage [04/10/01 08:56:57] ACLってVisualStudioより高いですか。 ぐぐってもわからないってことは、相当な値段でしょうけど、、
542 名前:デフォルトの名無しさん mailto:sage [04/10/01 10:32:44] >>541 前スレからコピペ。 ---------------------------------------------------- 715 :デフォルトの名無しさん :04/06/28 23:09 ACL アカデミックとかじゃなくて普通に商用に使うために買うといくらするの? 716 :デフォルトの名無しさん :04/06/29 02:30 このスレの Part 8 で紹介されていた URL に $599 という価格があるんだけど、 www.franz.com/products/packages/ これって、アカデミック・ディスカウントなの? そうは思ってなかった。 教育関係なら、ここからさらに割り引かれるのかと思ってました。 ご存知の方おられませんか?
543 名前:デフォルトの名無しさん mailto:sage [04/10/01 10:33:14] 続き ---------------------------------------------------- 717 :デフォルトの名無しさん :04/06/29 08:23 先日のFranzセミナーでもらった価格表によると… Windows/Linux/FreeBSD/MacOS X版 Professional 750,000 (395,000) Enterprise 1,400,000 (795,000) Platinum 2,000,000 (895,000) UNIX (Sun, IBM, HP, Compaq)版 Professional 1,300,000 (520,000) Enterprise 2,000,000 (1,040,000) Platinum 2,750,000 (1,200,000) …高い… orz 718 :717 :04/06/29 08:24 あ、括弧の中はアカデミック価格ね。
544 名前:デフォルトの名無しさん mailto:sage [04/10/01 10:40:04] flatline 氏の『on Lisp』翻訳、24/25章まで進んだようです。いよいよProlog。 user.ecc.u-tokyo.ac.jp/~g340299/ ちなみに、進振りで志望に通ったらしい。おめでとうございます。
545 名前:541 mailto:sage [04/10/01 12:01:02] >>542 >>543 あ、ありがとうございます。 WindowsでProfessionalだと、75万円ですか、、そもそも比較の対象ではないですね ... orz しょーがない自分で作るか(嘘)
546 名前:デフォルトの名無しさん mailto:sage [04/10/01 13:47:54] >>539 shiroさんにもWindowsの良さをもっと解って欲しいな バイナリ配布形式に対応してActivePerlみたいにsetup.exeから インストール出来るようになればユーザーかなり増えると思ふ まあそれに比例してDQNも増えるんだけどね・・
547 名前:デフォルトの名無しさん mailto:sage [04/10/01 14:45:30] >>546 Window$かよ。( ゚д゚)、ペッ
548 名前:デフォルトの名無しさん mailto:sage [04/10/01 15:02:20] しまった。 ここにはUNIX馬鹿厨がいるんだった。
549 名前:デフォルトの名無しさん mailto:sage [04/10/01 15:02:52] 別にWindowsが(他の実用レベルのOSと比較して)悪いとは思わないが, >>546 から激しくDQN臭がするのは確かだ.
550 名前:547 mailto:sage [04/10/01 15:03:49] >>548 MACですが何か?
551 名前:デフォルトの名無しさん mailto:sage [04/10/01 15:04:02] やっぱDQNだった….
552 名前:デフォルトの名無しさん mailto:sage [04/10/01 15:15:06] >>549-551 相変わらず反応早いですね。
553 名前:デフォルトの名無しさん mailto:age [04/10/01 17:24:55] 今MIT Scheme落としてるんだけど、これPLTと比べてどう?
554 名前:デフォルトの名無しさん mailto:sage [04/10/01 17:25:01] とまあこのような連中が増えるという例でした。
555 名前:ミミ mailto:sage [04/10/01 18:28:12] >>545 ACL Professional は 2 年間レンタルで 5, 6 万円だって聞きました。
556 名前:デフォルトの名無しさん mailto:sage [04/10/01 20:40:05] ACLってそんなにいいの? どんな最適化するのか興味ある〜 ところでfranz社ってサ、LISP以外手を出さんの? 例えば、MLとかprologトカサ あ?そんなLISPがええか?ええのんか? どないやねん
557 名前:デフォルトの名無しさん mailto:sage [04/10/01 20:44:28] Borland Turbo Prologという製品が昔あったと言う。 末路は (ry
558 名前:デフォルトの名無しさん mailto:sage [04/10/01 20:47:40] >>557 ネタかと思ったら本当にあったのね。 正直、驚いた。 トリビアスレ向きだな。
559 名前:デフォルトの名無しさん mailto:sage [04/10/01 20:53:02] Microsoft Visual L# 2005 Borland LBuilder 2005 とか出るといいのか?
560 名前:デフォルトの名無しさん mailto:sage [04/10/01 21:08:47] 某国の場合 Pascal→Delphiみたいな名前置換があるやも いやむしろナイスな銘々してくれって感じ? オタ向け言語から一気に若者の主流に返り咲くか? そういやcurlてどうよ? 本見た感じでは、うーん・・・
561 名前:デフォルトの名無しさん mailto:sage [04/10/01 21:20:45] なんか短期間で書き込んでる変な人がいますね。
562 名前:デフォルトの名無しさん mailto:sage [04/10/01 22:44:05] ACL Professionalの個人向け2年間$599リースは日本でもやってんの? 間に挟まってるぼったくり屋さんが黙って無さそうなんだけど。 AllegroPrologは7で入るんだっけ?それとも別製品か?作ってるのは知ってるけど どんな製品ラインナップになるのかまでは知らん。
563 名前:デフォルトの名無しさん mailto:sage [04/10/02 00:01:18] CLHS は float に inf や NaN を求めていないんですね. これらが無いと困りませんか? 近日規格策定予定だったりしますか?
564 名前:563 mailto:sage [04/10/02 00:04:09] おっと,clisp の impnotes で触れられているのをまだ見てなかった.スマソ。
565 名前:ミミ mailto:sage [04/10/02 02:06:02] >>562 >ACL Professionalの個人向け2年間$599リースは日本でもやってんの? Franz の営業さん (日本人) から聞きましたよ。 ただ、リースの場合のテクニカルサポートは英語のみだそうです。
566 名前:デフォルトの名無しさん mailto:sage [04/10/02 10:35:48] >>565 マジですか。小俣ちゃんが言うんならそうなんだろな。 ACL7がリリースされて予定通りMacOSXでCommon Graphicsがサポートされて 同一条件だったら欲しいかも。日本語のテクニカルサポートなんかイラネ。英語で充分。 $1200で買い取りと$599で2年間リースのどっちにすっかで迷うな・・・
567 名前:デフォルトの名無しさん [04/10/02 16:57:12] GaucheからPHPかPythonを使いたいのですが、どういう方法が あるのでしょうか? Cならこういう具合であるようなのですが。 www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?Gauche%3aMeCab
568 名前:デフォルトの名無しさん mailto:sage [04/10/02 17:45:30] >>567 あのな、C言語でどうやって使うかを考えろ。 それわかったらGaucheでも使えるだろ。
569 名前:デフォルトの名無しさん mailto:sage [04/10/02 20:27:32] わかった!Pythonインタープリタを実装するんだね!!
570 名前:デフォルトの名無しさん mailto:sage [04/10/02 23:57:10] おれもわかった!PHP を Scheme で書きなおすんだ! …つか PHP なんてなんで使いたいんだ? Gauche で書けよ HTML も
571 名前:デフォルトの名無しさん mailto:sage [04/10/03 01:23:46] チ○コかきたい
572 名前:デフォルトの名無しさん mailto:sage [04/10/03 13:30:50] MIT schemeがアンインストールできないんですけど・・・何なんだよヽ(`Д´)ノ
573 名前:デフォルトの名無しさん mailto:sage [04/10/03 13:38:12] λ教は一度入ったら、 もう二度とやめれません
574 名前:デフォルトの名無しさん mailto:sage [04/10/03 13:48:31] 信者の社会復帰を支援するツールとしてPythonが用意されています
575 名前:デフォルトの名無しさん mailto:sage [04/10/03 14:00:08] Pythonなんてswitch文さえまともに使えない言語はダメ
576 名前:デフォルトの名無しさん mailto:sage [04/10/03 15:07:31] しかし豊富なライブラリは欲しいよぅ(;´Д`)
577 名前:デフォルトの名無しさん mailto:sage [04/10/03 15:26:09] では parrot 待ちだな
578 名前:デフォルトの名無しさん mailto:sage [04/10/03 17:26:11] parrotでみんな幸せになれますか?
579 名前:デフォルトの名無しさん mailto:sage [04/10/03 17:26:54] schemeでRS232-Cを制御しようと思ったらどうすればよいのでしょうか。
580 名前:デフォルトの名無しさん mailto:sage [04/10/03 17:47:41] >>579 >>568
581 名前:デフォルトの名無しさん mailto:sage [04/10/03 17:52:04] 初心者な質問ですみません。 よろしくお願いします。 CLOSで引数を2つ取るメソッドを定義した場合、 それ以降は引数の数が異なる同名のメソッドの定義(オーバーロード) って不可能なのでしょうか?
582 名前:デフォルトの名無しさん mailto:sage [04/10/03 18:52:54] >>579 termiosインタフェースがある処理系なら Schemeオンリーでできないか? Gaucheとか。 ioctlが叩けないからだめかな。
583 名前:デフォルトの名無しさん mailto:sage [04/10/03 20:47:03] >>581 普通にできるだろ
584 名前:デフォルトの名無しさん mailto:sage [04/10/03 23:17:18] Unix でのおすすめの scheme 実行環境は何ですか?
585 名前:デフォルトの名無しさん mailto:sage [04/10/03 23:21:37] >>584 guileが標準的
586 名前:デフォルトの名無しさん mailto:sage [04/10/03 23:23:47] >>585 本気か? いや俺も標準的になって欲しいとは思ってるけど…
587 名前:デフォルトの名無しさん mailto:sage [04/10/03 23:41:07] >>586 ここではそれが良いって書いてあるけれど… www.sra.co.jp/wingnut/standards-j_toc.html#Design%20Advice
588 名前:デフォルトの名無しさん mailto:sage [04/10/03 23:41:39] GNU ソフトウェアの標準の拡張用インタプリタは GUILE である. GUILE はScheme 言語の実装である (Scheme は Lisp の非常にきれいで簡潔な方言である). www.gnu.org/software/guile/. われわれは他の「スクリプト言語」例えば Perl や Python で書かれたプログラムを 拒絶することはないが, GUILE を使うことは GNU システム全体の一貫性のためには 非常に重要である.
589 名前:デフォルトの名無しさん mailto:sage [04/10/03 23:47:25] guile ってどう読むの?
590 名前:デフォルトの名無しさん mailto:sage [04/10/03 23:48:48] >>588 それは知ってるけど、実際はまだろくに使っていないと思っているんだけど… おれが無知なだけだったらスマン、例を教えて欲しい
591 名前:デフォルトの名無しさん mailto:sage [04/10/03 23:51:42] >>590 いや、私もどこで使われているか知らない。 同様の用途ではPerlかシェルを良く使うと思うけれど。 でも標準が合った方が良いのは確かでしょ? 乱立しても、いくつの処理系をインストールしたくないし。。 >>589 guile=ぐいるって読んでいるけれど、どうだろう。
592 名前:デフォルトの名無しさん mailto:sage [04/10/03 23:51:57] guileで書かれたスクリプトって何かあるの? あまり見たことないような…
593 名前:デフォルトの名無しさん mailto:sage [04/10/03 23:54:52] >>589 __,, , , , _ 、 ,,, ... ,, _ ..,_ ー=、 、ー-、`ヽ、、ヽ`!i' , ,i",r'",-'"=ミ `ヽ`ヾ`、 ! ヽ ! l! i! !_i_/_<'"`` `,T、iliー'" "、,"、', i, リ !/!,li ,;;-=o=-,ッィ=。ゥィ __ i、`!', '; `ー /;;!i、''; ,! ー''`ヽ`,ーi'`''"!、ヽ , `一'、 / __ `il `i ! ヽ、  ̄ ̄ / iヽ、/ ,.ヽ_ i! !` `ーァ、-ー' ! ノ!トi,!'",ノ-、 ,..=、i! iヽ-、 rィ',;'!ヽー-、! `/_,i' _,.!'、 ーニー-、._ `ヽゞニ-、.;' i! ! , `ト_ノ`x-'" ノ =ニヽ、 , `, /ヾ=ソ ノ !/ !、`ー`''イ、 -ー-、 `i, / / ヽ `イ_, i -'" ̄`! ! ヽ Tノ /-'" ` ' ! ヽ !
594 名前:デフォルトの名無しさん mailto:sage [04/10/03 23:56:04] いつになったら”まだ”が取れるんだろう。 永遠にこない気がしてならない。 そもそも「標準の拡張用インタプリタ」とはなんぞや? 何時使うんだよ。 Linuxのインストーラーはpythonで書かれている様だし。 使われないで標準もあったもんじゃない。 そもそもSCMをベースにしておきながらあの遅さはなんなんだ? Cにトランスレートすりゃあいいってもんでもないだろ。
595 名前:デフォルトの名無しさん mailto:sage [04/10/03 23:58:45] ガイルでしょう
596 名前:デフォルトの名無しさん mailto:sage [04/10/04 00:01:51] www.google.co.jp/search?num=100&hl=ja&ie=UTF-8&newwindow=1&q=guile+%E3%82%AC%E3%82%A4%E3%83%AB&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja www.google.co.jp/search?num=100&hl=ja&ie=UTF-8&newwindow=1&q=guile+%E3%82%B0%E3%82%A4%E3%83%AB&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja
597 名前:デフォルトの名無しさん mailto:sage [04/10/04 00:06:59] www.google.co.jp/search?num=100&hl=ja&ie=UTF-8&newwindow=1&c2coff=1&q=guile+%E3%82%AC%E3%82%A4%E3%83%AB+lisp&lr=lang_ja www.google.co.jp/search?num=100&hl=ja&ie=UTF-8&newwindow=1&c2coff=1&q=guile+%E3%82%B0%E3%82%A4%E3%83%AB+lisp&lr=lang_ja
598 名前:デフォルトの名無しさん mailto:sage [04/10/04 00:09:11] >>596 その検索結果には明らかに>>593 のガイルが含まれているよ
599 名前:デフォルトの名無しさん mailto:sage [04/10/04 00:10:37] lisp ガイル 7件 lisp guile ガイル 3件 guile ガイル 303件 ノイズばっかだな
600 名前:デフォルトの名無しさん mailto:sage [04/10/04 00:18:45] >>598 綴として読むのだからどのガイルでも良いと思う。
601 名前:デフォルトの名無しさん mailto:sage [04/10/04 00:19:39] lispじゃ引っかかんないんじゃない? scheme
602 名前:デフォルトの名無しさん mailto:sage [04/10/04 00:22:03] gaucheよりguileの方がいいところって何?
603 名前:デフォルトの名無しさん [04/10/04 00:22:52] gacuhe-gl のマンデルブロートのサンプルを実行したいんですけど load するだけじゃだめですよね 実行して画面にだしたいんですけどどうやったらよいのでしょう?
604 名前:デフォルトの名無しさん mailto:sage [04/10/04 00:22:56] www.google.com/search?hl=ja&ie=UTF-8&q=scheme+guile+%E3%82%AC%E3%82%A4%E3%83%AB&lr= www.google.com/search?hl=ja&ie=UTF-8&q=scheme+guile+%E3%82%B0%E3%82%A4%E3%83%AB&lr=
605 名前:デフォルトの名無しさん mailto:sage [04/10/04 00:23:08] >>602 GNUのお墨つき。
606 名前:デフォルトの名無しさん mailto:sage [04/10/04 00:23:55] そこで Pika Scheme ですよ
607 名前:デフォルトの名無しさん mailto:sage [04/10/04 00:58:37] >>585 の凄まじい釣りっぷりで誰も>>584 に答えていないので、 debianでapt-cache search schemeしてみた。 その中でscheme実行環境っぽいのを適当に bigloo - A practical Scheme compiler chicken - Simple Scheme-to-C compiler drscheme - Scheme Programming Environment elk - the Elk Scheme interpreter escm - Embedded Scheme Processor guile-1.6 - The GNU extension language and Scheme interpreter mit-scheme - The MIT/GNU Scheme development environment mzscheme - Rice University PLT Scheme Interpreter oaklisp - An object-oriented dialect of Scheme. rscheme - Threaded, persistent, OO, scheme interpreter and compiler scm - A Scheme language interpreter. scsh - A `scheme' interpreter designed for writing system programs stalin - An extremely aggressive Scheme compiler stklos - An efficient Scheme System providing a powerful Object System gauche - A Scheme implementation designed for script writing. 沢山あるようなないような… スクリプトならgauche,それ以外ならmzscheme,mit-scheme,scm,gaucheあたりが無難?
608 名前:デフォルトの名無しさん mailto:sage [04/10/04 01:09:19] gimpとか
609 名前:デフォルトの名無しさん mailto:sage [04/10/04 01:13:37] その中だとbiglooがよさそう
610 名前:デフォルトの名無しさん mailto:sage [04/10/04 02:04:45] guileはGNU/LINUXならほぼ最初から入っているので、悪い選択じゃない。
611 名前:デフォルトの名無しさん mailto:sage [04/10/04 02:08:11] >>610 貴様はguile使ったことあるのか? guile常用してるやついるの? 何に使うのか知らんが。
612 名前:デフォルトの名無しさん mailto:sage [04/10/04 02:27:24] scheme処理系一覧っぽいのが出てきたところでふと思い出したのですが、 リアルタイムで経緯をご存知の方がいたらYale Tがどんな末路を辿ったのか教えて いただきたく。全然話題にも上らないんでマイナーな本なんだろうと思うけど Slade先生のObject-Oriented Common LispでLisp使い始めたのでちと興味あり。
613 名前:デフォルトの名無しさん mailto:sage [04/10/04 07:46:46] >>581 > CLOSで引数を2つ取るメソッドを定義した場合、 > それ以降は引数の数が異なる同名のメソッドの定義(オーバーロード) > って不可能なのでしょうか? ラムダリスト(引数リスト)が合同(congruent)のメソッドは一つのGeneric function に共存できると規定されています。 required argumentの数が違う2つのラムダリストは合同とは言えません。 find-method, remove-method を駆使して、メソッドをgeneric functionからすべて削除 した後で、異なるラムダリストを持つgeneric functionを定義することは可能です。 (defmethod foo (a b &optional c)) としておくのはダメなの?
614 名前:デフォルトの名無しさん mailto:sage [04/10/04 08:30:22] 既に知ってるかもしれんが、T についての文書ってこれくらいしか知らんなあ。 Olin Shivers: History of T store.yahoo.com/paulgraham/thist.html
615 名前:デフォルトの名無しさん mailto:sage [04/10/04 23:28:40] >>307 UnCommon Web は継続渡しスタイルで書けてなかなかおもしろい。
616 名前:デフォルトの名無しさん [04/10/05 09:34:36] Schemeで次のようなリストを生成したいのですが、 どういう手続きになるのでしょうか。 (define l '("a" "b" ("c" "c1" "c2"))) (define (foo l) (?)) => (list ("a" "b" "c" "c1")("a" "b" "c" "c2"))
617 名前:デフォルトの名無しさん mailto:sage [04/10/05 09:53:24] >>616 (define l '("a" "b" ("c" "c1" "c2"))) (define (foo boo) `(list ,boo)) (foo l) => (list ("a" "b" ("c" "c1" "c2")))
618 名前:デフォルトの名無しさん mailto:sage [04/10/05 12:32:40] >>616 の質問も、>>617 の回答も、まったく意味がわからんのは俺だけ?
619 名前:デフォルトの名無しさん mailto:sage [04/10/05 13:07:29] 俺も分からん.
620 名前:デフォルトの名無しさん [04/10/05 13:39:12] >> 618,619 すいません。質問がまちがってました。やりたいことは、S式で表現 したディレクトリ構造から文字列を生成する、です。 (define l '("a" "b" ("c" "c1" "c2"))) (define (foo l) (?)) => ("a/" "a/b" "a/c/" "a/c/c1" "a/c/c2")
621 名前:デフォルトの名無しさん [04/10/05 13:43:39] >>620 リストはディレクトリ。そのリストの先頭がディレクトリ名。 リスト内の2番目以降がファイル名。としています。 (define l '("etc" "hosts" ("apache" "httpd.conf" "httpd.conf.bak")))
622 名前:(define (´∀`) 'マターリ) mailto:sage [04/10/05 14:09:14] (define (foo l) (let loop ((dir "") (l l)) (if (list? l) (map (lambda (l) (loop (string-append dir (car l)) l)) (cdr l)) (string-append dir l)))) 今思いついたのはこんなの。
623 名前:(define (´∀`) 'マターリ) mailto:sage [04/10/05 14:20:57] (define (foo l) (let loop ((dir "") (l l)) (if (list? l) (let ((dir (string-append dir (car l) "/"))) (cons dir (apply append (map (lambda (l) (loop dir l)) (cdr l))))) (list (string-append dir l)))))
624 名前:デフォルトの名無しさん mailto:sage [04/10/05 14:34:04] こんなもんか。(elisp) (defun foo (tree prefix) (cond ((null tree) nil) ((atom tree) (list (concat prefix tree))) (t (let ((new-prefix (concat prefix (car tree) "/"))) (apply #'append (list new-prefix) (mapcar #'(lambda (file) (foo file new-prefix)) (cdr tree))))))) と書いたところで、623 と被ってるじゃん。
625 名前:デフォルトの名無しさん [04/10/05 14:50:25] >> 622 623 Gaucheを使ってます。このコードは何で動くのでしょうか。 >> 624 elispで動きました。gaucheのコードではどうなるのでしょうか。
626 名前:デフォルトの名無しさん mailto:sage [04/10/05 15:14:42] >>625 やれやれ... それは君への宿題とするので来週までに解いてきたまえ。 それと、メール欄に sage と書きたまえ。
627 名前:デフォルトの名無しさん mailto:sage [04/10/05 15:20:19] なんとかできました。(なんでsageって必要なんですか?2chよく知らないんです) (define (foo tree prefix) (cond ((not(pair? tree)) (list (string-append prefix (x->string tree)))) (else (let ((new-prefix (string-append prefix (car tree) "/"))) (apply append (list new-prefix) (map (lambda (file) (foo file new-prefix)) (cdr tree)))))))
628 名前:(define (´∀`) 'マターリ) mailto:sage [04/10/05 16:52:09] (define (foo l) (define (f x) (string-append (car l) "/" x)) (define (g x) (if (list? x) (foo (cons (f (car x)) (cdr x))) (list (f x)))) (cons (f "") (apply append (map g (cdr l))))) >>625 全角スペースを取ればSCMで動いたよ。 622は失敗作。
629 名前:デフォルトの名無しさん mailto:sage [04/10/05 22:06:35] >>614 Tについてのドキュメントって異様に少ないですよね。普通に失敗したプロジェクトだったの でしょうか。 >>615 継続スタイルはUCWのウリみたいですが、フレームワークの他の部分はどんな感じですか? 副作用バリバリの手続きでHTML生成する設計になってたりしたらイヤかも。 beseのMLに開発者がポストしてましたが、パフォーマンスが気になるくらい遅いですか? もう少し詳細な使用感を語っていただけるとうれしいです。参考にするので。
630 名前:デフォルトの名無しさん mailto:sage [04/10/05 22:52:06] Tは失敗というか、誰もメンテしなかった・できなかった結果のような 386以降で書かれてたなら誰もが欲しかっただろうし
631 名前:デフォルトの名無しさん mailto:sage [04/10/05 23:01:51] SICP を見ながら書いてみました。どうっすか? (define (foo l) (define (foo-iter result dir file) (if (eq? file '()) result (if (pair? (car file)) (let ((next-dir (string-append dir (caar file) "/"))) (foo-iter (append result (list next-dir)) next-dir (cdar file))) (foo-iter (append result (list (string-append dir (car file)))) dir (cdr file))))) (let ((dir (string-append (car l) "/"))) (foo-iter (list dir) dir (cdr l))))
632 名前:631 mailto:sage [04/10/05 23:11:19] 間違ってた... かなり無理があるけど、これで当っているかな? (define (foo l) (define (foo-iter result dir file) (if (eq? file '()) result (if (pair? (car file)) (let ((next-dir (string-append dir (caar file) "/"))) (foo-iter (foo-iter (append result (list next-dir)) next-dir (cdar file)) dir (cdr file))) (foo-iter (append result (list (string-append dir (car file)))) dir (cdr file))))) (let ((dir (string-append (car l) "/"))) (foo-iter (list dir) dir (cdr l))))
633 名前:デフォルトの名無しさん mailto:sage [04/10/05 23:12:35] (let ((next-dir (string-append dir (caar file) "/"))) (foo-iter (append result (list next-dir)) next-dir (cdar file))) (car file)の処理はこれでいいんだろうけど(cdr file)の分の処理がない。
634 名前:デフォルトの名無しさん mailto:sage [04/10/05 23:17:32] (if (pair? (car file))の内側に(foo-iterがあるけど (foo-iterの内側に(if (pair? (car file))を持っていったほうが すっきりすると思う。
635 名前:631 mailto:sage [04/10/05 23:34:12] >> 633 まったく、おっしゃる通りでした。 >> 634 ...暫く考える... なるほど。なんとなくイメージできました。勉強になります。 他の人のと見比べるとやっぱり、map とかも勉強しないとだめですね。
636 名前:デフォルトの名無しさん mailto:sage [04/10/06 00:45:10] >>631 SICPの何ページですか。俺の勉強したいので。
637 名前:デフォルトの名無しさん mailto:sage [04/10/06 01:08:52] letrec fib=fn(n)return n<2?n:fib(n-1)+fib(n-2); fib(30); let fib2; fib2=fn(n)return n<2?n:fib2(n-1)+fib2(n-2); fib2(30); let fib3=fn(f,n)return n<2?n:f(f,n-1)+f(f,n-2); fib3(fib3,30);
638 名前:631 mailto:sage [04/10/06 01:26:58] >>636 そのものズバリ、というのはないのです。スマソ。 まだ LISP お勉強中なので教科書を見ながらでないと書けないと いうことでして。 全体の構造は P.19 の脚注にある factorial から fact-iter を 呼び出し、fact-iter の末尾再帰でループ、というのを真似ています。 foo の内部で関数 foo-iter を定義し、foo-iter の末尾再帰で 各ディレクトリエントリ毎に反復になっています。 fact-iter での product が foo-iter での result に対応します。 ややこしいのはディレクトリエントリ毎の処理(下の foo-entry)で、 エントリがファイルの場合はそのファイル名を result リストに加える だけなのですが、エントリがディレクトリの場合は result リストに 当該ディレクトリ以下の全てのファイル名を foo-iter で得て result リストに加える必要があります。 (define (foo l) (define (foo-entry result dir entry) (if (pair? entry) (let ((next-dir (string-append dir (car entry) "/"))) (foo-iter (list next-dir) next-dir (cdr entry))) (list (string-append dir entry)))) (define (foo-iter result dir files) (if (eq? files '()) result (foo-iter (append result (foo-entry result dir (car files))) dir (cdr files)))) ;; foo 本体 (let ((dir (string-append (car l) "/"))) (foo-iter (list dir) dir (cdr l))))
639 名前:デフォルトの名無しさん mailto:sage [04/10/06 01:59:12] foo-entryにresultはいらんな。
640 名前:デフォルトの名無しさん mailto:sage [04/10/06 02:05:50] foo 本体は(foo-entry 'hoge "" l)でいいな。
641 名前:デフォルトの名無しさん mailto:sage [04/10/06 14:10:36] >>638 結局 (append result (foo-entry result dir (car files))) で ディレクトリの深さ分スタック使うのだから 普通に再帰で書いたのに比べて何もメリットがなくない? -- (define (foo l) (if (string? l) (list l) (map (lambda (x) (string-append (car l) "/" x)) (cons "" (apply append (map foo (cdr l)))))))
642 名前:デフォルトの名無しさん mailto:sage [04/10/06 14:14:09] スペースの変換を忘れてたorz (define (foo l) (if (string? l) (list l) (map (lambda (x) (string-append (car l) "/" x)) (cons "" (apply append (map foo (cdr l)))))))
643 名前:631 mailto:sage [04/10/06 23:21:02] >>639 >>640 確かにそうですね。 >>641 メリットは特にないですね。 高階関数に馴染みがなくてあれ以外の実装を 思いつかなかったというのが真相だったりします。 やろうと思えば引数を増やして全て末尾再帰にできるかも しれませんが、やたら読みにくいソースになるでしょうね。
644 名前:デフォルトの名無しさん mailto:sage [04/10/07 23:52:58] 埋め込み言語の例というのが見てみたいんだけど, onlisp 以外にもなにかありませんか?
645 名前:デフォルトの名無しさん mailto:sage [04/10/08 00:21:31] >>644 これとか? ttp://www.shiro.dreamhost.com/scheme/vault/escm.html これはちょっと埋め込みとはちがうけど、S 式で HTML を書くというアプローチ ttp://cl-www.msi.co.jp/solutions/knowledge/ ttp://cl-www.msi.co.jp/solutions/knowledge/src
646 名前:645 mailto:sage [04/10/08 00:28:51] あ、ちがった、埋め込み言語ってそういう意味じゃないのね。 たとえば Lisp/Scheme で書かれた LR パーザジェネレータとか。 腐るほどありそうだな。今、さっと見つかったのはこんなの。 ttp://www.informatik.uni-freiburg.de/proglang/software/essence/doc/html/essence.html
647 名前:644 mailto:sage [04/10/08 01:00:10] >>646 ども. たしかに数はたくさんありそうなんですけど,うまく見つけられなくて. ここのリンク先のはソースもあるんで, schemeは使ったこと無いけど,本とにらめっこしながら読んでみます. 他にもいい例があればお願いします.
648 名前:デフォルトの名無しさん mailto:sage [04/10/08 01:13:04] LISPはちょっとかじった程度でよくわかってないのですが 質問させてください たとえば、Cでネットワークゲームを作るときに なんか処理したかったら、適当なデータ構造に 情報を埋め込んで送信して、受信側でデータを解釈→処理 とかなりますよね LISPのevalとかを使うと、プログラム本体がデータ構造もかねるから 動作させたい処理のS式をそのままリテラルとして送信して eval させて動作させてしまう、とか出来るんでしょうかね?
649 名前:デフォルトの名無しさん mailto:sage [04/10/08 01:54:37] Lisp に限らず、eval のある言語ならだいたいできるんじゃないのかな。
650 名前:デフォルトの名無しさん mailto:sage [04/10/08 02:08:45] eval is evil.
651 名前:デフォルトの名無しさん mailto:sage [04/10/08 07:33:19] でもそういう設計はよくないけどな。 ネットワーク越し(じゃなくても)で通信するときに相手から送られてくるものを 信用するというのは危険すぎる、ということを歴史は教えている。
652 名前:デフォルトの名無しさん mailto:sage [04/10/08 08:02:59] >>651 アプレットやSOAPと基本は同じでしょ? 用はセキュリティーの確保の仕方の問題だと思われ。
653 名前:デフォルトの名無しさん mailto:sage [04/10/08 09:32:56] >>648 evalも結局のところは、「受信側でデータを解釈→処理」してるだけ なんだけどね。「解釈→処理」の処理系が最初から用意されていると いうだけで。 汎用性が高い、本体と同じ言語で書ける、といった側面はそのまま メリットにもデメリットにもなるし。
654 名前:デフォルトの名無しさん mailto:sage [04/10/08 10:17:45] scheme の eval みたいに環境を指定できれば比較的手軽にセキュリティー確保できるね
655 名前:デフォルトの名無しさん mailto:sage [04/10/08 11:19:34] shiro さんの2004.10.07の文章で、 www.shiro.dreamhost.com/scheme/wiliki/wiliki2.cgi?Shiro 以前から Lisper としての適性に関係があるとして、時々話題になっている、 アスペルガー症候群・高機能自閉症の、簡易テストが紹介されている。 「平均は16.4ポイントで、 32ポイント以上のうち8割はautism related disorder だそうだ。私(shiroさん)は31ポイントだった」そうです。 www.wired.com/wired/archive/9.12/aqtest.html 自分でやってみたところ、慎重に回答したのに38ポイントだった。 しかし自分はヘタレ Schemer。ぜんぜんLisp能力に比例して無いじゃん…。
656 名前:デフォルトの名無しさん mailto:sage [04/10/08 12:14:36] このテスト、人間関係が苦手である、うまく行っていないという項目が多いな。 だから、 ・ Lisper として能力が高い →・他言語のプログラマとしても成功する →・周囲から尊敬を集める →・人間関係が良くなる →・このテストのスコアが下がる Lisper としての能力と、このテストのスコアには、こういう負の相関が 働いている気がするのだが。
657 名前:デフォルトの名無しさん mailto:sage [04/10/08 12:48:17] 心理テストに気休め以上の意味があるとは思わん。
658 名前:デフォルトの名無しさん mailto:sage [04/10/08 17:18:30] >>655 辞書引きながらやってみた。 24ポイント。 微妙に低くてチョトくやしい (w
659 名前:655 mailto:sage [04/10/08 18:40:48] 念のために言うけど、このテストはまったく当てにならないと思うよ。 『on Lisp』をいつまでも読み進められない私がそれは保証できる。 だけどなんとなく、ほかの人の点数も知りたいのう。 冷やかしでトライしてくれた人、他にもいたら書き込んでください。 おながいします。
660 名前:デフォルトの名無しさん mailto:sage [04/10/08 19:26:09] 34。Lisp は好きだけど能力があるのかどうか……
661 名前:デフォルトの名無しさん mailto:sage [04/10/08 19:27:47] emacs で動く scheme 実行環境はありますか?
662 名前:デフォルトの名無しさん mailto:sage [04/10/08 19:51:11] >>659 自閉症スペクトラムのテストとしてはそこそこいい出来だと思うが。 親戚男性自閉症率高の趣味の Schemer で、40点。非人間的なものへ のこだわりと認識能力で点数が出て、直接 Lisp と関係があるわけ じゃないから。 >>661 M-x run-scheme では不満?
663 名前:655 mailto:sage [04/10/08 20:08:14] >>662 自閉症スペクトラムについては、まあ同意です。 自閉症には私も興味を持って、いろいろ調べてみたことがあります。 「当てにならない」と書いたのは、Lisper としての能力と、このテストの関連。 >>661 思い切って guile-emacs を導入するのはどうだろう? 使ったことはないけれど。
664 名前:デフォルトの名無しさん mailto:sage [04/10/08 20:08:44] >>656 ・ Lisper として能力が高い →・でも別にプログラマとしては成功しない →・周囲からも尊敬は集めない →・人間関係も良くならない →・このテストのスコアが上がる Lisper としての能力と、このテストのスコアには、こういう正の相関が(以下略)
665 名前:デフォルトの名無しさん mailto:sage [04/10/08 20:41:18] 感O しないで AC になれなかったので, せめて lisp で AC に近づこうとしています. これが妥当な lisp の用途ということでよろしいでしょうか?
666 名前:655 mailto:sage [04/10/08 21:32:01] それにしても、当然のように「自閉症スペクトラム」という言葉を使う人も、 やはりこのスレにはいましたか。ポイントも私より上だし。 >>664 私はプログラマとして才能がなかったんで、Lisp を覚えて「普通の奴らに差をつけ」 ようとしたんだけど、Lisper としても才能がなかった。 しかも副作用として、それまでは面白かった Java がつまらなくなってしまった。 自分はダメだったけど、Lisperとして成功できる人なら、他の言語でも成功するのかと 思っていたのに、まさか逆だというのですか?! >>665 私は感電と Lisp の経験者だけど、現状は前述のとおり。 でもいいのだ。Lisp は面白いから。 きっと Lisp は、ただ面白いためにあるのだ。 才能はさておき、こういうことに興味を持つことには、自閉症傾向は関係が あるような気がしなくもない。
667 名前:デフォルトの名無しさん mailto:sage [04/10/08 21:59:47] ACよりもSEXPになりたい。
668 名前:デフォルトの名無しさん mailto:sage [04/10/08 22:13:30] この自閉症どもが
669 名前:デフォルトの名無しさん mailto:sage [04/10/08 23:13:31] >>667 sexp が t になるには 8 歳までに (ry
670 名前:デフォルトの名無しさん mailto:sage [04/10/08 23:36:39] ∩ ( ゚∀゚)彡 sexp!sexp! ⊂彡
671 名前:デフォルトの名無しさん mailto:sage [04/10/09 00:47:43] Lispの才能と体重は正比例の関係があるらしいよ
672 名前:デフォルトの名無しさん mailto:sage [04/10/09 00:51:02] >>671 デブヲタ発見。
673 名前:デフォルトの名無しさん mailto:sage [04/10/09 01:16:40] sexpと体重は正比例の関係があるらしいよ
674 名前:デフォルトの名無しさん [04/10/09 09:57:46] 「on Lisp」の日本語版があるって聞いたんだがその本の日本語名ってなに? 'on' も 'Lisp'も一般的すぎて検索してもよくわからない・・・ 本じゃなくてどこかのWebページなのか?
675 名前:デフォルトの名無しさん mailto:sage [04/10/09 10:00:05] >>674 >>544
676 名前:デフォルトの名無しさん mailto:sage [04/10/09 10:00:29] >>674 >>544
677 名前:674 mailto:sage [04/10/09 10:14:44] おお、サンクス!! スレの真ん中あたりにあったのか・・・ #こう書くべきかな? (thanx 675 676)
678 名前:デフォルトの名無しさん mailto:sage [04/10/09 11:11:51] >>671 なんとなく,才能は体重の逆数にあるような. 0 Kgで発散しますが,CLHS には inf が無いのでちょっと分かりません.
679 名前:デフォルトの名無しさん mailto:sage [04/10/09 11:55:07] Gauche(ver 0.8.1)でGauche-gtk(ver 0.4.1) やってるんですけど、 (gdk-font-load)が未定義の値って言われちゃいます。 なんで?
680 名前:デフォルトの名無しさん mailto:sage [04/10/09 11:55:38] まだ4kgもないうちの甥っ子は天性のlisperなのかしら
681 名前:デフォルトの名無しさん mailto:sage [04/10/09 13:47:02] 大人になると、才能は錆付くんだよ。
682 名前:デフォルトの名無しさん mailto:sage [04/10/09 17:12:00] SRFI40: A Library of Streamsを読んでて違和感を感じたので、それを文に してみた。schemeのプロミスの話。感想きかせて。 members3.jcom.home.ne.jp/t-yam/promiseless.html
683 名前:デフォルトの名無しさん mailto:sage [04/10/09 17:25:23] ブラクラ?
684 名前:デフォルトの名無しさん mailto:sage [04/10/09 17:26:36] >>682 いいんじゃない? そもそもR5RSはdelayが特定の「プロミス型」を 返すことを要求していないから、そこで必要な時に必要なだけforceされる 処理系も許されてるんじゃないかな。(delayの返す値は「プロミスである」 とされているだけで、それが具体的に何なのかは未定義。さらに、 「プロミスとそれがforceされた値とを区別することは規格内ではできない」 とされているから、プロミスなんてユーザには見えない、っていう処理系 もありと。) 個人的にはimplicit forceしてくれた方がずっとプログラマに易しいと 思う。R5RSでそうなっていないのは、色々な遅延評価メカニズムを実装する ベースとしての処理系実装も許しているからなんじゃないかな。色々 試してみたいときにはforceされるタイミングを制御したいことも あるんじゃない?
685 名前:デフォルトの名無しさん mailto:sage [04/10/09 17:31:52] 具体的なコードを挙げると説得力が増すぞ。
686 名前:デフォルトの名無しさん mailto:sage [04/10/09 17:42:30] delay/forceが無駄な仕様にみえて仕方がない。 Schemeの思想と背反する様な。 実際使う事あるの?
687 名前:デフォルトの名無しさん mailto:sage [04/10/09 17:46:52] くまああああああ
688 名前:682 mailto:sage [04/10/09 17:47:40] レスありがとう。 >>684 R5RSの注意すべき点は、プロミス型があるかどうかではなくてプロミスが オブジェクトであること(R5RS 4.2.5)だと思う。それが根本的な問題かと。 > forceされるタイミングを制御したいことも ありそうだよね、これ。ただ、必要になったときに強制されるのだ、という 方が純粋なcall-by-needに近いようにも思う。 >>685 リンクたどればあるよ。
689 名前:デフォルトの名無しさん mailto:sage [04/10/09 18:13:49] >>674 "On Lisp"とかぐーぐるさまに教えると次の検索で少しは幸せになれるんではなかろうか。
690 名前:682 mailto:sage [04/10/09 18:25:58] 再レス。 >>684 > プロミスなんてユーザには見えない、っていう処理系もありと あなたの言ってることがわかったw R5RSのforceの解説の最後の方にそう書いてあるのね。完全に見落としてた。 thx
691 名前:デフォルトの名無しさん mailto:sage [04/10/09 19:11:42] forceはpromiseにしか適用できない(かもしれない)のに、 promiseであるかどうか判別する手段が無い(かもしれない)。 つまり完全に評価順序が分かっててpromiseと値を混在させないように プログラムが書けるときしか使えない。 でも遅延評価ではあらかじめ評価順序を知るのは一般にはとても難しい。 実用性が全然ないような。(>>616 をさえ遅延評価で書くのに挫折…)
692 名前:デフォルトの名無しさん mailto:sage [04/10/09 19:29:32] >>691 forceは何にでも適用できるよ。それは保証されてる。 promiseであるかどうか判別する手段はないかもしれない。
693 名前:デフォルトの名無しさん mailto:sage [04/10/09 20:04:18] >>692 どこに書いてある? 例えば MIT Scheme 1 ]=> (force 1) ;The object 1, passed as an argument to force, is not a promise. ;To continue, call RESTART with an option number: ; (RESTART 1) => Return to read-eval-print level 1. 2 error>
694 名前:692 mailto:sage [04/10/09 20:48:54] あ、わりい。漏れの勘違い。 'may' だから、適用できるかどうかわからんのね。 なんだ、ますます使い勝手が悪いなあ。
695 名前:デフォルトの名無しさん mailto:sage [04/10/10 02:59:20] >>691 関数的なもの、つまり副作用が無いものであれば評価順序に意味は無いはず。 そういうものと組み合わせてこそ promise の真価は発揮される。 一度評価したら二度目以降の force は必ず同じ値になるというのもそう。 とはいいつつも delay/force を使ったことないや。
696 名前:デフォルトの名無しさん mailto:sage [04/10/10 17:26:47] >>695 > 関数的なもの、つまり副作用が無いものであれば評価順序に意味は無いはず。 間違い。それなら遅延評価なんて要らない。 そもそも副作用の話はしていない。>>691 で言っているのは、 「評価順序が完全にわかってない場合、一度forceしてしまったものに もう一度forceしてしまうことがあり、それがエラーになる(実装依存で)」 ということ。
697 名前:デフォルトの名無しさん mailto:sage [04/10/10 17:46:22] 何度 force しようが promise は promise のままでは? force した結果の値を他で保持しておく必要無いんだし
698 名前:デフォルトの名無しさん mailto:sage [04/10/10 18:25:57] 691は「渡された値がpromiseかどうかわからないから念のためforceしとけ」 ってことができない、って言いたかったんじゃない? >>695 正規順序と適用順序について調べるとよろし。
699 名前:デフォルトの名無しさん mailto:sage [04/10/10 20:19:31] >>697 forceした結果を他の関数に渡さないと計算は進まないし、 delayし忘れると計算してしまう。 なにか自分でプログラミングしたら難しさがわかると思うけど。 自分が遅延評価のプログラムだと思うものをgoshで組んだ後 MIT Schemeにかけてそのまま動いたら、結構すごいことだと思うよ。
700 名前:デフォルトの名無しさん mailto:sage [04/10/10 20:42:36] >>698 そうです。 全部promiseにしてしまえばいいのだろうけれど、 それには一から遅延評価の処理系を作るか、 それなりのライブラリを作った上で注意深くforce/delayを 利用しつつ目的のプログラムを作るか、 ということになって、どっちもかなりのオーバーヘッド。 すぐには計算して欲しくない所にだけ適当にdelayいれておいて後で なんとかするというわけにはいかない。
701 名前:デフォルトの名無しさん [04/10/10 21:07:36] >>655 微妙に訳が違ってないか? Eighty percent of those diagnosed with autism or a related disorder scored 32 or higher. 元訳:32ポイント以上のうち8割はautism related disorder 試訳: 自閉症やその関連の診断を受けた人の8割は、32ポイント以上だった。 つまりこれは、このテストが8割の診断者をカバーすると言ってはいるが、 普通の人がテストを受けて、スコアが高ければ自閉症だ、とは言っていないんじゃないか?
702 名前:デフォルトの名無しさん mailto:sage [04/10/10 21:17:48] 自閉症は黙ってろ
703 名前:デフォルトの名無しさん mailto:sage [04/10/10 21:27:16] ACになろうとして 感電死
704 名前:デフォルトの名無しさん mailto:sage [04/10/10 22:46:04] >>701 そのとおり。 つまり、テスト問題を 1 + 1 = 2 は正しいか? にすれば、 Ninety nine percent of those diagnosed with autism or a related disorder scored fully.
705 名前:ミミ mailto:sage [04/10/11 16:57:33] Unicode (UTF-16) ベースの Scheme 処理系を作る場合、 R5RS の read-char 手続きは、ポートから 2 バイトを読み取って Unicode 文字を返すのが 自然ですよね?1バイト読み取りのためには read-byte のような拡張手続きを用意して。 既存コードとの互換性がなくなると思いますけど。。。
706 名前:デフォルトの名無しさん mailto:sage [04/10/11 17:18:08] read-charとかの関数の他に読み込む文字種を指定できるといいんじゃないかな (set-input-char-set 'ネコミミモード) (with-input-char-set 'ネコミミモード (read) ) =>ネコミミモードでーす とか
707 名前:デフォルトの名無しさん mailto:sage [04/10/11 17:53:02] read-char は「文字」を返すだけで、それがどんなエンコードだとかどんなサイズであるかなどは R5RS では規定されていない
708 名前:デフォルトの名無しさん mailto:sage [04/10/11 17:53:35] CMUCL は,C++ の .so を呼べないのでしょうか? //////////////////// a.cc int foo (int a, int *b) { int c; c = *b - 10; *b = a * 10; return c; } //////////////////// # g++-3.4 -shared -o a.so a.cc ;;;;;;;;;;;;;;;;;;;; a.lisp (use-package "ALIEN") (use-package "C-CALL") (load-foreign "./a.so") (def-alien-routine "foo" int (a int) (b int :in-out)) (foo 13 3) ;;;;;;;;;;;;;;;;;;;; # lisp -load a.lisp -eval '(quit)' とやると,(長いので分割)
709 名前:708 mailto:sage [04/10/11 17:56:00] ; Loading #p"/xxxxx/a.lisp". ;;; Opening shared library ./a.so ... ;;; Done. Undefined foreign symbol: "foo" [Condition of type KERNEL:SIMPLE-PROGRAM-ERROR] Restarts: 0: [CONTINUE] Return NIL from load of "a.lisp". 1: [ABORT ] Skip remaining initializations. Debug (type H for help) (KERNEL:UNDEFINED-FOREIGN-SYMBOL-ERROR-HANDLER "<error finding name>" #.(SYSTEM:INT-SAP #x3FFFC7E8) #<Alien (* #) at #x3FFFC480> (14)) Source: Error finding source: Error in function DEBUG::GET-FILE-TOP-LEVEL-FORM: Source file no longer exists: target:code/interr.lisp. 0] (quit)
710 名前:デフォルトの名無しさん mailto:sage [04/10/11 18:58:09] a.soのシンボルをリストアップしてみりゃわかるよ
711 名前:708 mailto:sage [04/10/11 19:20:52] >>710 はじめてナノメートル nm しました. うまくいきました! ありがとうございます. 今から >>710 に萌えます (;´Д`) gcc で作ったやつと比較して,トンでもないシンボル名になっていました. でもその名前で lisp コードに書き,アンダーバー `_' をハイフン `-' に変えて 使ってみると,正常に動きました. シンボル名が変にならないようにする方法はこれから調べます.
712 名前:デフォルトの名無しさん mailto:sage [04/10/11 19:35:31] >>705 see srfi-56
713 名前:デフォルトの名無しさん [04/10/11 22:27:42] call-with-current-continuationについて教えてください. 多分誤解しているのだと思います. たとえば, (call/cc (lambda (k) (* 20 (k 30)))) => 30 になると思います. これを, 「kというprocedureがactiveになった時点で,それに 渡されるべき30という引数が返されたのである」と 理解していましたが,これは誤りなのでしょうか? この考え方をもって既存のコードを読むと,実際に 返される値と異なる結果になってしまいます. どこがいけないか,ご指摘願えますでしょうか. よろしくお願いいたします.
714 名前:デフォルトの名無しさん mailto:sage [04/10/11 22:55:04] kという手続きがxを引数に呼び出されると、 対応するcall/ccの返却値としてxが戻される。 もちろん後続の処理もcall/ccが普通に戻った場合と同じように続く。
715 名前:デフォルトの名無しさん mailto:sage [04/10/11 23:08:44] >>713 「procedureがactiveになる」ってどゆこと?
716 名前:デフォルトの名無しさん mailto:sage [04/10/11 23:24:50] >>713 Gaucheでの出力だけど... (define m '()) (list 1 2 3 (call/cc (lambda (k) (set! m k))) 4 5 6) --> (1 2 3 #<subr continuation> 4 5 6) m -->#<subr continuation> (m 999) --> (1 2 3 999 4 5 6) (list 1 2 3 (+ 100 (call/cc (lambda (k) (set! m k)))) 4 5 6) --> 継続と100は足せないというエラー (list 1 2 3 (+ 100 (call/cc (lambda (k) (set! m k) 100))) 4 5 6) --> 1 2 3 200 4 5 6 (m 500) -->1 2 3 600 4 5 6 つまり継続を呼び出すときの引数でそれを作った(call/cc ...)が丸ごと置き換わると考えるととりあえずよいかもしれない。 うまい説明になってないかな^^? (list 1 2 3 (+ 100 (call/cc (lambda (k) (set! m k)))) 4 5 6) --> 継続と100は足せないというエラー (list 1 2 3 (+ 100 (call/cc (lambda (k) (set! m k) 100))) 4 5 6) --> 1 2 3 200 4 5 6 (m 500) -->1 2 3 600 4 5 6 つまり継続を呼び出すときの引数で(call/cc ...)が丸ごと置き換わると考えるととりあえずよいかもしれない。 あまり説明になってないかな^^?
717 名前:デフォルトの名無しさん [04/10/11 23:26:16] >> 715 713です. 「procedureが呼び出される」に訂正. >> 714 ありがとうございます. ということは根本的に間違えた考えではないと理解して, コードを追い直しています.
718 名前:716 mailto:sage [04/10/11 23:27:55] 書き込みの途中に継続を呼んでしまったようだ... ごめん m(_ _)m
719 名前:デフォルトの名無しさん [04/10/11 23:45:56] >> 716 ありがとうございます. 実際に追っているコードを示した方が早いので,そうします. たとえば,Kent Dybvig プログラミング言語Scheme (日本語版) p.61に,call/ccのサンプルとして (let ((x (call/cc (lambda (k) k)))) (x (lambda (ignore) "hi"))) => "hi" というのがありますが,これは結局 (call/cc (lambda (k) k) (lambda (ignore) "hi")) と等価(でよいのでしょうか)ですね. この式内の引数 (lambda (ignore) "hi")はprocedure だから,答は本にあるように "hi" じゃなくて,その procedure自体(#<user-defined-function> みたい) になると思うのです. しかし確かにguileなどでは本の通り "hi" と出ます. 問題はこのprocedure自体を返すのか,evalった結果を 返すのかの違いにあるのだと思いますが、「eval忘れ」 がどこかにあるのでしょうか? ちなみに kawa ではエラーとなり確認できません.
720 名前:デフォルトの名無しさん mailto:sage [04/10/11 23:47:02] >>711 >シンボル名が変にならないようにする方法はこれから調べます. そいつはC++を使ってる限り無理だ。関数の多重定義を実現するために、 シンボルには型情報がくっつくようになってる。
721 名前:デフォルトの名無しさん mailto:sage [04/10/11 23:47:17] 継続(continuation)のメモ ttp://www.opengroupware.jp/~hoti/blog/Scheme
722 名前:デフォルトの名無しさん [04/10/12 00:03:24] 719 です. >問題はこのprocedure自体を返すのか,evalった結果を >返すのかの違いにあるのだと思いますが、「eval忘れ」 >がどこかにあるのでしょうか? は間違いですね。 問題はこのprocedure自体を返すのか,呼び出した結果を 返すのかの違いにあるのだと思いますが、「呼び出し忘れ」 がどこかにあるのでしょうか? の意味です。
723 名前:708 mailto:sage [04/10/12 00:04:17] >>720 なんと,,,そうですか.今ちょっと調べ疲れていたところでした. どうもありがとうございました. まあ lisp コードなんてすぐ修正できてしまうからいいんですよね!
724 名前:デフォルトの名無しさん mailto:sage [04/10/12 00:13:42] >>719 最初に (x (lambda (ignore) "hi")) を評価するとき x は継続であり、それは 「最初の (call/cc (lambda (k) k))」から戻ってきて、返却値を x に bind し、let の body を評価する」 という継続である。 なので、これを評価すると最初の (call/cc (lambda (k) k)) から (lambda (ignore) "hi") が返却され、 これが x に bind され、(x (lambda (ignore) "hi")) が再度評価されることになる。 二度目に評価されるとき、x には (lambda (ignore) "hi") が bind されているので、これはつまり ((lambda (ignore) "hi") (lambda (ignore) "hi")) ということになり、最終的に "hi" が返却される。
725 名前:デフォルトの名無しさん [04/10/12 00:34:47] 訂正 719の中の置換したコードは ((call/cc (lambda (k) k)) (lambda (ignore) "hi")) のつもりでした. >>724 ありがとうございます.最終的に ((lambda (ignore) "hi") (lambda (ignore) "hi")) に置換されるのがミソのようですね. まだまだSchemerになれていないので,724をなぞって ゆっくり考えます.ありがとうございました.
726 名前:デフォルトの名無しさん mailto:sage [04/10/12 01:59:29] >>723 extern "C" { ネコミミモード };
727 名前:716 mailto:sage [04/10/12 02:43:54] おれが安易に「丸ごと置き換わると考えるととりあえずよいかもしれない」なんて書いちゃったのは良くなかった。ごめんなさい m(_ _)m 置換で考えると上手くない場合もあるんだ。 例えば、 (let ((c 100)) (let ((x (call/cc (lambda (k) k)))) ;<- @1 (let ((c 200)) (x (lambda (n) (+ 1 c)))))) ;<- @2 --> 201 の (call/cc (lambda (k) k)) を単純に (lambda (n) (+ 1 c))に置き換えて考えてしまうと (let ((c 100)) (let ((x (lambda (n) (+ 1 c)))) (let ((c 200)) (x (lambda (n) (+ 1 c)))))) --> 101 となって結果が合わなくなってしまう。 これは@2のlambdaで作られた#<closure>は@1に送られるけど、その環境は@2を持っているということが単純な置換で考えると消えてしまうからなんだ。 というわけで、716は忘れてください ^^;
728 名前:デフォルトの名無しさん mailto:sage [04/10/12 09:57:42] スコープだけじゃないね。 (let ((x 0)) (let ((c (call/cc (lambda (x) x)))) (set! x (+ x 1)) (c (lambda (y) x)))) と (let ((x 0)) (let ((c (lambda (y) x))) (set! x (+ x 1)) (c (lambda (y) x)))) はちがうし。 あたかも置き換えたかのようにジャンプするというか・・・。
729 名前:デフォルトの名無しさん [04/10/12 20:10:09] 713です. 多くの丁寧な follow-up をありがとうございます. call/ccはSchemeらしいところだと思うのですが それだけ奥が深いですね. 何せ midnight programmer なものですから, これから寝るまで頭をひねって考えます. 今後ともよろしくお願いします.
730 名前:デフォルトの名無しさん mailto:sage [04/10/12 20:27:57] schemeの継続って、プログラムの最小限要素をくくりだすのはいいが そのためにやたらコストの高いものを導入してしまったという感じがする。 Smalltalkでの何でもかんでもオブジェクトとメッセージに近いものがある。 継続そのものが便利なときもあるけど、なくてもほとんど困らない。
731 名前:デフォルトの名無しさん mailto:sage [04/10/12 20:31:45] 継続抽出は銀の弾丸です
732 名前:デフォルトの名無しさん mailto:sage [04/10/12 20:44:17] ほんとにそうなら継続のある言語がとっくに天下をとってると思う。
733 名前:デフォルトの名無しさん mailto:sage [04/10/12 21:44:11] 悪い方が良い法則。
734 名前:デフォルトの名無しさん mailto:sage [04/10/12 22:35:38] おまえらただ継続継続いいたいだけちゃうんかと。 継続なんて極力使わない方がいい。 gotoがよりパワフルにそしてわかりにくくなったものだから。 銀の弾丸どころかソフトウェアエンジニアリング的には狼男だ。
735 名前:デフォルトの名無しさん mailto:sage [04/10/12 22:39:36] 例外処理のような上手い使い方ならいいんだけどね
736 名前:デフォルトの名無しさん mailto:sage [04/10/12 23:02:34] ちんちんかゆいーー!
737 名前:デフォルトの名無しさん mailto:sage [04/10/12 23:03:46] gotoが悪ならthreadなんて巨悪だな
738 名前:デフォルトの名無しさん mailto:sage [04/10/12 23:04:48] >>736 cut しろ
739 名前:デフォルトの名無しさん mailto:sage [04/10/12 23:35:23] >>737 threadとgotoは比べるもんじゃないだろ。 threadは基本的に代えがきかない。
740 名前:デフォルトの名無しさん mailto:sage [04/10/13 03:12:19] The Seasoned Schemerの継続の説明らしい章を読んでます。 で、質問なんですが、この本の中では継続を「call/cc」じゃなくて 「letcc」(schemeの場合)、「throw」「catch」(CommonLispの場合)で 説明してるんですけど、これらは等価なものなんですか?
741 名前:デフォルトの名無しさん mailto:sage [04/10/13 03:30:06] >>740 shiroさんのなぜ Scheme には return がないのか www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?Scheme%3a%a4%ca%a4%bcScheme%a4%cb%a4%cfreturn%a4%ac%cc%b5%a4%a4%a4%ce%a4%ab を読むとその辺がわかるかも。
742 名前:デフォルトの名無しさん mailto:sage [04/10/13 10:25:44] continuationとgotoは比べるもんじゃないだろ。 continuationは基本的に代えがきかない。
743 名前:デフォルトの名無しさん mailto:sage [04/10/13 14:30:21] はっきり言って、continuation≒gotoだよ。認めたくないだろうけどね。 gotoでcontinueもbreakもreturnも出来るじゃん、美しい!って悦に入ってるのが schemer
744 名前:デフォルトの名無しさん mailto:sage [04/10/13 16:12:52] だがそれがいい
745 名前:デフォルトの名無しさん mailto:sage [04/10/13 16:21:01] >>742 おうむ返しだけだと馬鹿にしか見えませんよ。 continuationはやろうと思えばいくらでも書き換えられる。 書き換えたらフラグだらけになったり、 巨大な関数になったりしてして醜いから、使う、というものでしょ。 もちろんそういうときに使うのはいいけど、 できるときはwhileとかforとかmacroにしたほうがいいだろう。 threadはthreadを使わずに同じ機能を実現することが難しい。 特にthreadのどれか一つが死んだりしても他のthreadが監視しておいて 処理できる、という能力はエミュレートできない。 エミュレートだとスケジューリングがうまくいくように一単位の 処理時間をコントロールできないといけないし。
746 名前:デフォルトの名無しさん mailto:sage [04/10/13 21:25:49] ケイゾクに恨みでもあるんですか?
747 名前:デフォルトの名無しさん mailto:sage [04/10/13 21:57:42] 色んな意味でコストがかかるところ。
748 名前:デフォルトの名無しさん mailto:sage [04/10/13 22:54:32] >>746 ないけど?
749 名前:デフォルトの名無しさん mailto:sage [04/10/14 00:13:10] threadだって高速に処理切り替えてるだけだから、 gotoで出来ないことはない。
750 名前:デフォルトの名無しさん mailto:sage [04/10/14 00:39:00] スレッドと継続は全く別個の独立した概念であり、対立するものでもないのに何をムキになってるんだろう。 > 書き換えたらフラグだらけになったり、 > 巨大な関数になったりしてして醜いから、使う、というものでしょ それこそ継続という概念が primitive なものであるということであり、scheme らしいところでは? primitive なものさえあれば他の機能はそれらを組み合わせてできる。美しい。 例えば、コルーチン程度であれば call/cc で簡単に実現できる。
751 名前:デフォルトの名無しさん mailto:sage [04/10/14 00:54:20] コルーチン程度しかできない、の間違いでしょ
752 名前:デフォルトの名無しさん mailto:sage [04/10/14 01:06:04] Rubyの継続の実装はスレッドと同じだそうですよ i.loveruby.net/ja/rhg/cd/continuation.html
753 名前:デフォルトの名無しさん mailto:sage [04/10/14 01:44:06] >>749 gotoでどうやって > 特にthreadのどれか一つが死んだりしても他のthreadが監視しておいて > 処理できる、という能力はエミュレートできない。 するんだ? そしてどうやって一つの処理単位がCPUタイムを食いすぎないことを保証するんだ? > エミュレートだとスケジューリングがうまくいくように一単位の > 処理時間をコントロールできないといけないし。 >>750 > スレッドと継続は全く別個の独立した概念であり、対立するものでもないのに何をムキになってるんだろう。 じゃああなたが>>737 や>>749 を説得して上げてください。
754 名前:デフォルトの名無しさん mailto:sage [04/10/14 01:45:11] gotoさえ使えば、breakもcontinueもreturnもいらないのはもちろん、 スレッドも関数もいもいらない。こういう機能はgotoを組み合わせてできる。 美しい。
755 名前:デフォルトの名無しさん mailto:sage [04/10/14 01:53:27] >>750 美しかろうがどうだろうが、 「継続を無闇に使うべきでない」という事実には変わりはないな。
756 名前:デフォルトの名無しさん mailto:sage [04/10/14 01:54:45] アセンブラにすりゃただのジャンプ命令。 ジャンプ命令使わずにアセンブラでプログラム組めるわけが無い。 即ち、息をするようにgotoを使え。
757 名前:デフォルトの名無しさん mailto:sage [04/10/14 04:40:12] 引数つきgoto
758 名前:デフォルトの名無しさん mailto:sage [04/10/14 08:16:21] 〉〉753OSやリアルタイム制御の本みれば書いてあるよ。つーか知らないの?
759 名前:デフォルトの名無しさん mailto:sage [04/10/14 08:28:20] ヘタレLisperと本物のプログラマを隔てるOSという一つの壁
760 名前:デフォルトの名無しさん mailto:sage [04/10/14 08:29:07] >>736-738 Prologの話?
761 名前:デフォルトの名無しさん mailto:sage [04/10/14 09:24:37] まだちんちんかゆいよーー! なぜか皮が膨らんできてる・・・
762 名前:デフォルトの名無しさん mailto:sage [04/10/14 11:39:34] >>751 ユーザモードのスレッドは、本質的にはコルーチンと同等だけど?
763 名前:デフォルトの名無しさん mailto:sage [04/10/14 16:06:08] コルーチンって何?
764 名前:デフォルトの名無しさん mailto:sage [04/10/14 16:18:27] >>763 www.google.com/search?hl=ja&lr=lang_ja&ie=SJIS&oe=SJIS&num=100&q=%83R%83%8B%81%5B%83%60%83%93
765 名前:デフォルトの名無しさん mailto:sage [04/10/14 17:26:42] >>762 ユーザーモードのスレッドは必ずしもそうでないと思うけど、 ユーザーモードのスレッドライブラリはそうだね。で、それが何か? 話は変わって、 そもそもSchemeの継続ってプリミティブか? 単にCPSで書けばいいだけじゃないの?こっちはどんな関数型言語にもできるし。
766 名前:デフォルトの名無しさん mailto:sage [04/10/14 17:43:15] 機械語のライブラリを実行中に継続を取ってきても きちんと動くように要請してるんじゃない?
767 名前:デフォルトの名無しさん mailto:sage [04/10/14 20:38:44] >>765 なんでそこに CPS が出てくるのか意味がわからない
768 名前:デフォルトの名無しさん mailto:sage [04/10/14 20:45:57] >>768 Continuation Passing Style のことだよ?
769 名前:デフォルトの名無しさん mailto:sage [04/10/14 21:25:50] >>767 の言いたいことを推測。 CPSで継続を陽に扱うには、最初から全部CPSで書かなくちゃならない。 CPSで書かれていないコードから呼ばれるコードで継続を取り出したかったら call/ccはプリミティブにならざるを得ない。 …ってなとこか? CPSでもMonadみたいな形で継続を隠すことはできるけど、それだって 最初からそのつもりで書いてないと。 個人的には、Schemeの継続は言語の実験をするための道具って 感覚が強いな。
770 名前:765 mailto:sage [04/10/14 21:44:13] >>769 言語の要素のプリミティブじゃなくて、 >>750 の > それこそ継続という概念が primitive なものであるということであり、scheme らしいところでは? > primitive なものさえあれば他の機能はそれらを組み合わせてできる。美しい。 の話。 (Schemeの)継続なんて無くてもCPSで書けば、gotoでもコルーチンでも call/ccでも(w実現できるんだから、プリミティブな(基底をなす)機能ではないんでは? ということ。 > 個人的には、Schemeの継続は言語の実験をするための道具って > 感覚が強いな。 同意。
771 名前:デフォルトの名無しさん mailto:sage [04/10/14 22:03:36] やたら継続を美しいと賛美しているのは、つい最近大学の 講義で継続を知って嬉しくなってる厨房だよね?
772 名前:デフォルトの名無しさん mailto:sage [04/10/14 22:11:31] >>771 はい。
773 名前:デフォルトの名無しさん mailto:sage [04/10/14 22:26:47] 四角いタイヤでも目盛がついていれば長さを測ったりできて便利かもしれんが、 それで高速道路を走るのは無理だ。
774 名前:デフォルトの名無しさん mailto:sage [04/10/14 22:37:43] で?
775 名前:デフォルトの名無しさん mailto:sage [04/10/14 22:42:13] ちんちんかゆいーー!
776 名前:デフォルトの名無しさん mailto:sage [04/10/14 22:44:58] >>775 切っとけ。
777 名前:デフォルトの名無しさん mailto:sage [04/10/14 23:38:01] >>770 だから?基底をなす機能しか使っちゃいけないなら、 ラムダだけ使えば? 理論上は統べての計算はラムダ式で可能なんだから、
778 名前:デフォルトの名無しさん mailto:sage [04/10/15 00:28:51] 継続がプリミティブだからエライと言い出した のは継続厨房でしょうが
779 名前:デフォルトの名無しさん mailto:sage [04/10/15 01:15:03] だからつかわなきゃいいじゃん threadだろうがcall/ccだろうが理解してない 人間がつかうと危険なのは当たり前。
780 名前:デフォルトの名無しさん mailto:sage [04/10/15 01:20:39] >>778 エライなんて誰も言ってないよ
781 名前:デフォルトの名無しさん mailto:sage [04/10/15 10:39:17] >>777 基底をなす機能しか使っちゃいけないなんて誰も言ってないよ。 >>779 理解している人間が使ったって危険なんですが。 というか、誰が使っても危険なものだということを理解していない人間は 理解している人間ではないでしょうね。
782 名前:ミミ mailto:sage [04/10/15 14:26:27] >> 個人的には、Schemeの継続は言語の実験をするための道具って >> 感覚が強いな。 >同意。 私も同意。 例外処理のような代替機能があれば十分だと思う。
783 名前:デフォルトの名無しさん mailto:sage [04/10/15 16:26:43] どういう場合になにが危険といってるの?実装といっしょにあげてみてよ。
784 名前:デフォルトの名無しさん mailto:sage [04/10/15 17:19:01] >>782 で、言語の実験で良い結果が得られたらその度に代替機能を実装してくの?
785 名前:デフォルトの名無しさん mailto:sage [04/10/15 17:29:19] >>783 危険っぽいコード (define go #f) (call/cc (lambda(cc) (set! go cc))) (call-with-input-file "foo" (lambda(port) (go port))) はわわ〜
786 名前:デフォルトの名無しさん mailto:sage [04/10/15 17:32:26] >>784 パフォーマンスを上げたいなら専用化した方がいいからね。 限定的な継続にして万能な部分を切っていく。 VBのバリアント型みたいなものだよ。
787 名前:デフォルトの名無しさん mailto:sage [04/10/15 17:45:17] >>784 良い結果がって言うよりさ、そもそも言語の設計で「良い悪い」を 判断するのって使ってみないとわからんわけじゃん。で、処理系 ネイティブに実装する方式だと、その処理系を使ってる人しか 試せない。だけどSchemeの場合、かなり凝ったことまで言語組み込み のプリミティブを組み合わせで書ける。そしたら、R5RS準拠の 処理系ならどれでもその提案を試してみることができるわけだ。 こいういう場合に使われるcall/ccなんかは、むしろ提案する 言語機能の仕様記述なわけよ。ところが、Schemeの場合は その仕様記述が動かせるプログラムになる。
788 名前:!= 782 mailto:sage [04/10/15 18:26:51] >>784 そう。実装してく。 whileやらbreakやらgeneratorやらに抽象化してそれを安全に使う。 call/ccはそれを作る道具であって、call/ccのスパゲッティを毎回 ほどいて、俺には解けるから危険じゃないとか言って喜ぶための ものじゃないと思うね。 上手い抽象化を考えたりその抽象化を実装したりするのに頭をつかおう。
789 名前:ミミ mailto:sage [04/10/15 18:27:43] >>784 実用上の開発では言語実装にまで遡って設計の見直しを図ることは稀でしょう。 もちろん継続があったらあったらでよいと思いますが、 C における goto よろしく、大規模な開発では原則として禁じるのが妥当ではないかと。 ソフトウェア工学上は継続は狼男だと言っている方がいらっしゃいましたが、 その視点におけるその意見には同意するということです。 >>785 それは継続の問題というよりも、 プログラミングの腕の問題という気が。。。 do でも論理エラーがあれば無限ループが書けるわけだし。 >>786 >パフォーマンスを上げたいなら専用化した方がいいからね。 >限定的な継続にして万能な部分を切っていく。 これに同意。 Scheme に継続しか用意しないというのは実用的ではないという感じがします。
790 名前:デフォルトの名無しさん mailto:sage [04/10/15 19:46:48] 「実用的な」制御構造がいずれも継続の上に(マクロで?)構築した ライブラリとして書けるっていうのがSchemeの主張なんじゃないの?
791 名前:デフォルトの名無しさん mailto:sage [04/10/15 19:52:56] 話がループしているのは継続のせいですか?
792 名前:デフォルトの名無しさん mailto:sage [04/10/15 20:06:32] じゃあ高速な継続の実装の仕方でも考えるかい?
793 名前:デフォルトの名無しさん mailto:sage [04/10/15 20:35:42] >>791 gotoのせいです。
794 名前:デフォルトの名無しさん mailto:sage [04/10/15 21:18:32] >>790 そう。 パフォーマンスとかが必要ならそれぞれの実装系においてライブラリ部分をCとかで実装していけばよい。
795 名前:デフォルトの名無しさん mailto:sage [04/10/15 22:36:02] 結局Schemeは非実用的ということですね
796 名前:デフォルトの名無しさん mailto:sage [04/10/15 22:39:54] わざわざ去勢する必要もなかろう
797 名前:デフォルトの名無しさん [04/10/16 01:39:19] CommonLispのマクロについての質問。 マクロはコンパイル時に評価を行う、ということは、コンパイルプロセスを 実行プロセスから分離することはできない、ということでOKでしょうか? また、関数の中でマクロが定義されている場合、関数が呼び出される度に マクロ展開(とコンパイル)が行われるのでしょうか?
798 名前:デフォルトの名無しさん mailto:sage [04/10/16 01:58:24] どういう動作をすると思ってるの?
799 名前:797 mailto:sage [04/10/16 02:06:33] 実行とコンパイルがインターリーブしていて、マクロの展開関数の中 から他の変数なんかも参照できる。その変数の値によって、展開の結果 が変わるかもしれない...というふうに"思って"います。 根本的に間違ってますか?
800 名前:デフォルトの名無しさん mailto:sage [04/10/16 03:39:45] 継続の話。 Kawa(Java による Scheme 実装)の継続は例外処理(try - catch) によって実装されているね。確か大域脱出しかできなかったような気 がする(Common Lisp の block 相当)。 実際、おれの場合、大域脱出くらいでしか継続は使ったことないな。
801 名前:デフォルトの名無しさん mailto:sage [04/10/16 04:37:48] >>797 >コンパイルプロセスを実行プロセスから分離する lispには eval関数の様に実行時に式を評価する仕組みがあるので コンパイル環境と実行環境を分離するのは難しいと思う。 でもこの話は、マクロとは関係ないような気がする。 >関数の中でマクロが定義されている場合 関数内でマクロを定義した場合の動作など考えたことが無かった。 で、やってみた。 ;; 関数定義 (defun test (x) (cond ((equal x 1) (defmacro m () 10)) ((equal x 2) (defmacro m () 20)) (t nil)) (m)) ;; 実行結果 ・・・ clisp の場合 (test 0) => 20 (test 1) => 20 (test 2) => 20 ;; 実行結果 ・・・ xyzzy lisp の場合 (test 0) => 関数が定義されていません: m (test 1) => 10 (test 0) => 10 (test 2) => 20 (test 0) => 20 xyzzyではマクロ展開を実行時に行っていて、clispでは関数定義時に 行っているようだ。CLtL2 的にはどうなっているんだろう?
802 名前:デフォルトの名無しさん mailto:sage [04/10/16 08:26:44] 重複定義でエラーが正解
803 名前:デフォルトの名無しさん mailto:sage [04/10/16 09:41:37] >>801 その例は実行時までプログラムの意味が決まっていないよね? そういうマクロはたとえ可能としても悪いマクロだと思う (実際おれは不可能と思ってたし) 役に立つ場合って何かあるかな?
804 名前:デフォルトの名無しさん mailto:sage [04/10/16 15:10:07] >>797 > また、関数の中でマクロが定義されている場合、関数が呼び出される度に > マクロ展開(とコンパイル)が行われるのでしょうか? コンパイルされたコードの中でのマクロ展開はコンパイル時に行われて、 実行時には再度行われない、てことになってます。 ですから、関数内でマクロを再定義するようになっていたとしても、 展開に使われる手続きはコンパイル時の環境にあるものになるはずです。 コンパイルしない場合には、何時、何度展開されるかは実装依存です。 cf. www.lisp.org/HyperSpec/Body/sec_3-2-2-2.html >>801 xyzzy でもコンパイルすると clisp と同じ結果になりますね。 でもいまいちピンとこない結果だなあ。 (defmacro m () 20) は展開時には、つまりコンパイル時であれ関数定義時であれ、評価されませんよね? だったら (m) は展開できない気がするんですが。勘違いしてる?
805 名前:ミミ mailto:sage [04/10/16 15:19:43] > (defmacro m () 20) は展開時には、つまりコンパイル時であれ関数定義時であれ、評価されませんよね? リーダが読み取って、最適化された内部構造体に変換するときに、 ついでに defmacro を評価してしまうという実装はあり得ると思う。 (そんな処理系を見たことがある気がする。) その場合、最後に出てきた m の定義によってオーバーライドされてしまうので、 上記のような結果になるのでは。
806 名前:804 mailto:sage [04/10/16 15:34:00] >>805 あーなるほど、それなら納得いきますね。 確かに普通それで問題ないでしょうし。
807 名前:デフォルトの名無しさん mailto:sage [04/10/16 16:17:58] そういうマクロはエラーにして欲しいなあ。 eval介入するならともかく、使い道なんてないでしょ。
808 名前:デフォルトの名無しさん mailto:sage [04/10/16 17:47:56] Gaucheはエラーになった
809 名前:デフォルトの名無しさん mailto:sage [04/10/16 18:00:35] >>808 GaucheってSchemeでしょ? Scheme的には>>801 て文法的にありえんし… mのスコープが意味不明。
810 名前:デフォルトの名無しさん mailto:sage [04/10/16 18:27:24] >>797-799 > また、関数の中でマクロが定義されている場合、 これって macrolet のことを言いたいのかなあ、とふと思った。 > 実行とコンパイルがインターリーブしていて、マクロの展開関数の中 > から他の変数なんかも参照できる。その変数の値によって、展開の結果 > が変わるかもしれない...というふうに"思って"います。 これについては、こんな例もあるかな。 (defvar *foo*) (defmacro %foo (x) `(,(if *foo* 'car 'cdr) ,x)) (defun foo (ls key) (let ((*foo* key)) (%foo ls))) として、 (let ((ls '(a b c))) (values (foo ls t)(foo ls nil))) => ? , ? とりあえず今手元にある xyzzy では、コンパイルしないと a , (b c)、 コンパイルするとコンパイル時の *foo* の値によって a , a or (b c) , (b c) が、 更に *foo* の値が未定義だと (b c) , (b c) が返ってきました。 ……しかし、どうにも病的な例しか思い浮かばないなあ。
811 名前:デフォルトの名無しさん mailto:sage [04/10/16 20:26:58] letがないものが条件コンパイルのイディオムとして使われて てもよさそうだと思ったんだけど、そうでもないのかな?
812 名前:797 mailto:sage [04/10/16 22:43:41] コンパイル時の環境・値をキーワードにしてHyperSpecを必死になって 読んで、部分的な理解を得ました。 マクロ展開のようなコンパイル時に実行される式はevaluation env.のもと で評価され、そうでない本当に実行時に実行される式はrun-time env.のもと で評価される。で、evaluation env.とrun-time env.が同一である保証は 無いと。 私の場合、この二つが同一と仮定していたので、797の発言になったわけ ですね。実際は、run-time env.の中の束縛とは異なるかもしれない束縛を evaluation env.に加えてやることでコンパイルプロセスを実行プロセスから 分離していると。 後は、コンパイルの過程でevaluation env.がどのように構築されていくのか が解ればいいのですが、これも理解に時間かかりそう。 >>810 まだ文法に自信がないですが、こんなのなら病的ではないかと。 期待通りには振る舞わないみたいですが。 (defun debug-print (form value) ...) (defvar *do-debug*) (defmacro debug-value (form) (if *do-debug* (list debug-print `(quote ,form) form) form))
813 名前:Ruby >>>>>>>>>>>>>>>Scheme mailto:sage [04/10/17 06:09:54] Scheme を駆使して、「普通のやつらの上を行け」るのは、(少なくとも現状では、そして恐らく永久に)ごく一部のプログラマであって、 普通のプログラマが少しでも「普通のやつらの上を行け」るのは、Ruby になるような気がしています。 jp.rubyist.net/magazine/?0002-WCNewsPaper#l7
814 名前:デフォルトの名無しさん mailto:sage [04/10/17 06:26:35] 結局のところ、CommonLispでマクロを安全に使うには、 (1)トップレベルで定義する。関数内では定義しない。 (2)同名のマクロの再定義はしない。 (3)スペシャル変数等の環境で動作が変わるマクロは書かない。 ということですか?
815 名前:デフォルトの名無しさん mailto:sage [04/10/17 10:15:21] ものをちゃんと理解する、が一番じゃないかな。 まあ理解できないからこそ安全に〜とか言ってるんだろうけど。
816 名前:デフォルトの名無しさん mailto:sage [04/10/17 11:04:12] >>815 それなりの指針を与えることは、有益だとおもうけどどうかな。 だれだって最初は初心者な訳なんだし。
817 名前:デフォルトの名無しさん mailto:sage [04/10/17 11:11:48] >>816 指針としては、 マクロは単に式を変形する ・ソースを短かくするために書け ・いつ式が変形されたか気を付けろ(コンパイル時、実行時、再定義に注意) って基本を叩きこめば十分じゃないか?まだあるかな?
818 名前:デフォルトの名無しさん mailto:sage [04/10/17 11:52:18] >>816 > だれだって最初は初心者な訳なんだし。 これってよく使われるフレーズだけど全然言い訳になってないよな。 最初は初心者でも自力修得できる奴はなんぼでもいる。
819 名前:デフォルトの名無しさん mailto:sage [04/10/17 13:24:58] >>813 おそらくはマクロ等を駆使することで、 「問題領域における問題の記述とコードが同一になる」 Lisp/Scheme すげえ! って思うんだがどうよ?
820 名前:デフォルトの名無しさん mailto:sage [04/10/17 15:23:24] >>817 >・ソースを短かくするために書け これは同意できない。 結果としてソースが短くなるケースが多いとしても、ソースを短くすることは マクロを書く目的にはなり得ません。
821 名前:デフォルトの名無しさん mailto:sage [04/10/17 17:30:59] あんたにはならなくても俺はなるな
822 名前:デフォルトの名無しさん mailto:sage [04/10/17 17:59:41] 結果として短くなるのと、短くするのを目的として使うことを混同してませんか?
823 名前:デフォルトの名無しさん mailto:sage [04/10/17 18:11:15] >>818 わからないことを責めてはいけないとおもう。 わかろうとしないことだとしてもそうだと思う。 そういう人を取り込むことが言語のすそのを広げることになるんじゃないかな。
824 名前:デフォルトの名無しさん mailto:sage [04/10/17 18:14:49] >>821 , 822 ソースコードの性質によるのかな〜と思うけど、どうかな。 長く、広く使われるコードであれば、直感にあう抽象化を するためにマクロを使うべきだろう。 けど、テストコードなんかの場合はとにかく楽をするために マクロを使っても良いように思う。
825 名前:デフォルトの名無しさん mailto:sage [04/10/17 18:31:27] >>813 言語に「上下」があるわけではないと思うけどなぁ。 俺は ruby も好きだけど、scheme で書いてる時とは気分が違うよね。 なんつうか、ruby は relax しながら書くけど、scheme だと、集中して 研ぎ澄まされてく感じがする。抽象的だけどさ。
826 名前:デフォルトの名無しさん mailto:sage [04/10/17 18:34:07] (DQNニレススンナヨ)
827 名前:デフォルトの名無しさん mailto:sage [04/10/17 19:55:25] >>813 いいんだよそれで。「普通のやつら〜」が言ってるのは競争の激しい ベンチャー企業は最大限に生産性をあげないと生き残れない、そのために 最強の言語を使うべきだって言ってるんであって、その他大勢が 何を使おうが知ったこっちゃない。あの文章は生きるか死ぬかの極限での サバイバル術について語ってるんだ。そんな環境に置かれていないなら、 好みで言語を選べばいいのさ。
828 名前:デフォルトの名無しさん mailto:sage [04/10/17 22:38:11] 普通のプログラマにはjavaをお薦めします
829 名前:デフォルトの名無しさん mailto:sage [04/10/17 22:54:30] ノーマルプログラマにお薦め→java アブノーマルプログラマにお薦め↓
830 名前:デフォルトの名無しさん mailto:sage [04/10/17 23:01:54] C
831 名前:デフォルトの名無しさん mailto:sage [04/10/17 23:41:06] この掲示板は何言語で運営してるの?
832 名前:デフォルトの名無しさん mailto:sage [04/10/17 23:46:39] >>820 , 822 817 だけど(!= 821 ね) 煽りじゃなくて、どんな目的でマクロ書くのか教えてくれないか? おれはマクロに関してはソースを短くする事しか考えてないんだけど… あ、「短く」じゃなく「明快に」、と格好良く言えば伝わるかな? >>824 おれはテストコードは逆にマクロつかわないなぁ テストコードのテストなんてしたくないから コピペでも良いから単純に書く、どうせテストなんだし
833 名前:デフォルトの名無しさん mailto:sage [04/10/18 00:04:11] >>832 私の場合: * with-なんとか系 --- 最初と最後にお決まりの文句がある処理とか * 関数のインターフェイス --- (foo-format t "~A" obj1 "~A" obj2 ...) とやりたい.
834 名前:デフォルトの名無しさん [04/10/18 00:04:20] Ruby!!!!!!!!!!!!!!!!!!
835 名前:デフォルトの名無しさん mailto:sage [04/10/18 00:14:14] >>832 820でも822でもないですが イディオムや式に名前を付けるとき。短くなるとは限らない。
836 名前:デフォルトの名無しさん mailto:sage [04/10/18 00:31:51] >>835 確かに短くても慣れてないイディオムを包むマクロは書くことあるけど (そしてその名前が長い時もある) 何回も使えば少なくとも行数は短かくなる気がするけど… (本当はタイプ量も少なくしたいけど補完があるから気にしない場合はある) 良い例がありますか?
837 名前:デフォルトの名無しさん mailto:sage [04/10/18 00:48:40] マクロの例は,いろんなプログラムのソースがヒントになるなと思ったよ. 名前は忘れたけど数値計算のやつでは,型チェックをやってた. ソースを見ると,その関数の引数の型が一目瞭然になってるの.
838 名前:デフォルトの名無しさん mailto:sage [04/10/18 01:53:24] ソースのバイト数を減らすってのもいいけど (例えば call-with-current-continuation → call/cc, multiple-value-bind → mvbind など), 重要なのは定型的コード内のパターンを抽出して構文要素数を減らすことだぜ? ただ,inline関数で実現できるならその方がいい. "On Lisp" を読めば抽象化手段としてマクロを使うべきかどうかの判断規準(の一例)が示されてるけど...
839 名前:デフォルトの名無しさん mailto:sage [04/10/18 06:36:49] cgiにschemeが使える無料鯖ってあるの?
840 名前:デフォルトの名無しさん mailto:sage [04/10/18 07:31:33] >>838 が正しいな、おかげですっきりしたぜ
841 名前:デフォルトの名無しさん mailto:sage [04/10/18 08:58:39] さんざん既出だがSchemeの基本構文要素なんて10個に満たないが、 全く不便に感じないのは強力なマクロの記述能力があるからだよ。 処理系がI/Fを開放してればマクロを通してそのままマシンコードに落とせるし、 コンパイラとマクロの間には区切りがない。 LISPは本来処理系のコンパイラが貧弱でも後付でカバーできる程の能力を 秘めているが、あまりそれを認識してる奴はいないみたいだな。 ユーザーにスキルがあれば自力でinline-expandやlambda-liftingの様な プリコンパイルが簡単に追加できる。 コアの作りこみを最小限とすれば新しい処理系はすぐに完成する。 人間で言うと脳や神経だな。骨格や肉付けはすべて後回しでいい。 コアを何度も作ってる奴は、残りをすべて使い回しが利くS式で記述する筈だ。 だからGaucheの様なCでなんでもかんでも書く方針はちょっといただけないな。 確かに労せず速い処理系になるだろうが、それは処理系固有のモノになってしまい、 LISPの自己拡張性を否定しかねない。 どのみちブートストラップの真似事してるんだからVMに渡すプリコンパイラぐらい Scheme自身で書いてみろよ。パフォーマンスにさほど違いはないから。 と、Gaucheのソース流し読みして思った次第。
842 名前:デフォルトの名無しさん mailto:sage [04/10/18 09:24:51] I/Fって何?
843 名前:デフォルトの名無しさん mailto:sage [04/10/18 09:28:23] それは処理系固有のモノになってしまい、LISPの自己拡張性を否定しかねない。 ってどういう意味? 他の処理系でもマクロで拡張するんなら処理系固有とか関係なく思えるが。
844 名前:デフォルトの名無しさん mailto:sage [04/10/18 09:35:03] >>841 Gauche開発の動機と目標を知っててあえて言ってる?
845 名前:デフォルトの名無しさん mailto:sage [04/10/18 09:56:30] >>844 これか? www.shiro.dreamhost.com/scheme/gauche/memo-c-j.html
846 名前:841 mailto:sage [04/10/18 10:27:07] >>842 ぐぐれ >>843 処理系に固定化され、固定化されたコードはそれ以上進化する余地なくなるということ。 >>844-845 そのリンクの文章のことではなかったけど、その中から異論を唱えると、 >実行時に、その言語のための環境(スクリプトライブラリ、初期化ファイルなど)を > フルセットで持てるとは限らない。 最悪の場合、アプリケーションはそのバイナリ > 単体で動作することが要求される。 これは単にアイデアが枯渇しているだけだろう。 実行ファイルに環境を埋め込む手段はいくらでもあるし、さらにその上に 環境の永続化という手段もある。 >アプリケーションの実行の主体はC/C++で書かれたコードで、 > その中から頻繁にちょっとしたリスト処理や文字列処理なんかが呼び出される。 これはevalそのものやVM、マシンコードの入り口を用意していれば済む事。 それに結局GCを伴うので、現実的には外部から頻繁には呼び出せず、一括して呼び出す方針になりがち。 そもそも外部のコンパイラが必要な時点でプロダクション環境とやらには論外だろう。 >むしろ、 memqなんて基本的なパーツはCで書いとくべきなんだ。 memqの様なすぐ代替が利く極端に小さいパーツならこの手も有効だろうが、 少しでも大きな処理になるとこの思想は破綻する。作者もそれはわかってるみたいだが。 結局実際は実装が二極化し、複雑性が増加しただけだろう。 組み込みスタブ関数郡のメンテナンス性の悪さを見ればわかる。 こんなところか。
847 名前:デフォルトの名無しさん mailto:sage [04/10/18 10:39:16] ぐぐってもわからんぞ。
848 名前:デフォルトの名無しさん mailto:sage [04/10/18 10:40:26] じゃあ、あんたがSchemeの処理系書いて配ればいい。
849 名前:デフォルトの名無しさん mailto:sage [04/10/18 10:44:37] 処理系に固定化され、固定化されたコードはそれ以上進化する余地なくなるということ。 進化させたかったら処理系に手をいれればいいじゃん。
850 名前:デフォルトの名無しさん mailto:sage [04/10/18 10:53:03] >>848 公開が面倒なだけでそういう処理系は数年前に作ったよ。 >>849 それは処理系の完成度が低いと暗に示しているにすぎないだろ。 商用にするなら論外の提案。 顧客毎に固有化して、いったい誰がメンテするんだ?
851 名前:デフォルトの名無しさん mailto:sage [04/10/18 11:03:16] 公開してなければただの妄想言語 顧客ごとの固有化はマクロを使えばいいだろ。
852 名前:デフォルトの名無しさん mailto:sage [04/10/18 11:28:06] 841は組み込み系とかはやったことないんだろうなぁ
853 名前:名無しさん@お腹いっぱい。 mailto:sage [04/10/18 12:11:42] GaucheがCでの実装を多用しているのは、現バージョンでの実用性を考えると仕方のない部分が多いのではないだろうか。 VMでは各インストラクションごとにテーブルを使った間接分岐が行われるが、この時、ほぼ毎回分岐予測を失敗することになる。(PC用で、これの分岐予測をうまく行ってくれるプロセッサーは無いと思う) 今のプロセッサーでこのペナルティーはでかすぎる。1ワードのデータのLOADやPUSHを行うたびにパイプラインがフラッシュされるんだから... つまり、速度を出すにはVMのインストラクション数を減らすことが重要ということになり、そのためにCで書く部分が多くなるといったところではないだろうか。 根本的な解決にはネイティブコードに落とす必要があるが、これとインタラクティブな環境を両立するのは難しい。 商用のChez Schemeならそれが出来ているが、個人が作っている処理系でそれが出来ていなくとも、あまり乱暴な言葉遣いは良くないと思う。 真面目な開発者ならネガティブな意見は大歓迎だと思うし、それは遠慮なく伝えていいと思う。 変な信者のラブレターよりよっぽと嬉しいだろう。でも礼儀は忘れないでほしい。
854 名前:824 mailto:sage [04/10/18 13:55:18] >>832 へええ、おもしろい。 私もテストコードにはややこしいマクロはかきませんが、 いまいち自然じゃない、長くは覚えていられないような 展開をするマクロをかくことはあります。 以下の2つがその主な理由です: 1) テストはだいたい1ファイルに閉じてるので読めばわかると思う 2) テストは繰り返しや比較が多いのでなるべく自動化したい
855 名前:デフォルトの名無しさん mailto:sage [04/10/18 15:42:44] >そのためにCで書く部分が多くなるといったところではないだろうか。 話がつながってない気が
856 名前:デフォルトの名無しさん mailto:sage [04/10/18 17:13:28] >>855 「VMで実行するインストラクション数を減らすために処理系やライブラリー関数をSchemeでなくCで実装する」を意図しておりました。 説明がへたですまぬ。
857 名前:850 mailto:sage [04/10/18 18:27:29] >>851 うぷしてみたよ。 ttp://syobon.zive.net:85/src/syobon10968.zip.html サンプル読めば簡単な窓ぐらいは作れるかもしれない。
858 名前:850 mailto:sage [04/10/18 18:35:35] 失敗した。 syobon10969.zipね。
859 名前:デフォルトの名無しさん mailto:sage [04/10/18 19:26:48] schemeのプリミティブを使ってマクロを組み立てれば強力な記述力がある 構文を手にできるというのは別に誰も反対していないと思う。 しかしいくつか問題があって、一つはそのような構文を作るのに多用する継続の 利用コストが小さくないこと。 もう一つは共通語彙が貧弱なこと。SRFIで整えられてきてるけど、 各自で構文を作るのが実現できることと、それが実用上利益になることとは別問題。 それにSchemeコアが万能というわけじゃない。SRFIの多くは 結局使い勝手のために処理系の拡張を必要とするものが多い。 だから理念としてはScheme好きだけど実際に使うのはCommon Lispだったりする。
860 名前:デフォルトの名無しさん mailto:sage [04/10/18 20:42:09] 本人やる気ないなんて言わずに発展させていってくれよ。 面白そうじゃないかコレ。
861 名前:デフォルトの名無しさん mailto:sage [04/10/18 21:05:52] 本人にやる気がないのなら他の人が発展させていけばいい。
862 名前:デフォルトの名無しさん mailto:sage [04/10/18 21:51:10] >>850 ソースくれよ。
863 名前:デフォルトの名無しさん mailto:sage [04/10/18 22:00:14] やーだよ
864 名前:デフォルトの名無しさん mailto:sage [04/10/18 22:05:07] が〜ん。 Gaucheが実行環境の永続化(?)をサポートするのをまとう。 構想はあると聞いてるので...
865 名前:デフォルトの名無しさん mailto:sage [04/10/18 23:47:37] おい、このスレからチャレンジングな Scheme 実装が生まれようとしてるのか?! 面白くなってきたと思わないか?おまいら!
866 名前:832 mailto:sage [04/10/18 23:57:05] >>854 なるほど確かにマクロでもそのファイルだけで閉じてれば良いかも でもテストコードに関しては、例え繰り返しとかあっても抽象化する必要は無い、 即値も平気で書いて ok!とも思うけど それにしても Lisp ほどテストがやりやすい環境も無い! 何たって関数単位で書いたらすぐ試せるし
867 名前:デフォルトの名無しさん mailto:sage [04/10/19 07:33:57] >>857 実行速度が結構出るね。 cygwin上のgoshよりほとんどのケースで速かったよ。 compiled-closureってことはeval前にコンパイルだよね。 永続化も説得力のある代物でした。 正式に公開したらかなりいけてますよ。
868 名前:デフォルトの名無しさん mailto:sage [04/10/20 15:55:46] Lisp Machineで作業しているところのビデオ。既出だったらゴメソ。 lemonodor.com/archives/000103.html lemonodor.com/archives/000441.html これを見て、「Lisp Machineでは、コンパイラのエラーメッセージでさえオブジェクト」 という意味がすこしわかったよ。
869 名前:デフォルトの名無しさん [04/10/21 12:54:30] >>850 再うpきぼんぬ
870 名前:デフォルトの名無しさん mailto:sage [04/10/21 22:27:06] 低レベルな質問で済みません。 CLISP で fork(2) みたいに clisp のプロセスイメージをコピーするのってどうやれば良いので しょうか? fork(2) して子プロセスで S 式を実行し、結果を親プロセスとやり取りするような プログラムを書きたいのです。ext:run-program で CLISP 自体を実行してやるのが普通なので しょうか? CMUCL ではこんな風に出来る(出来た?)らしいです。 cl-cookbook.sourceforge.net/os.html#fork-cmucl
871 名前:デフォルトの名無しさん mailto:sage [04/10/22 07:48:15] >>857 再うp!再うp!再うp!
872 名前:デフォルトの名無しさん mailto:sage [04/10/25 00:22:54] lispでbottom upプログラミングしてると確かに 綺麗になるんですけど、他人には読めないコードに なったりしません? 他人に読めないのは綺麗じゃねーって言われるかも しれませんがやはりそんな感じがします。 抽象的なロジックでも、ほとんど組み込みのリスト操作や map操作で実現できてしまうのが原因だと思うのですが、 (他の言語だといちいち名前をつけて抽出することになる) 皆さんはそういうこと感じませんか?
873 名前:デフォルトの名無しさん mailto:sage [04/10/25 00:51:44] >>872 bottom upの意味が間違ってないか? bottom upはロジックや定型処理を抽出してツールを 作ってそのツールを用いて本体を組むんだが。 そのツール(関数やマクロ)には当然名前がついている。 組込みのリスト操作やmapが生ででてくるのはbottom upとはまた別。
874 名前:デフォルトの名無しさん mailto:sage [04/10/25 01:14:56] LISP 〔原書第3版〕 1巻 を読んでみたいんですが 手に入れる方法ってありますか? 店頭在庫ってまだあるんでしょうか?
875 名前:デフォルトの名無しさん mailto:sage [04/10/25 02:29:17] 大学の図書館には転がってるだろ。
876 名前:デフォルトの名無しさん mailto:sage [04/10/25 09:49:57] >>874 漏れも読みたい!! >>875 学生じゃないもん!!
877 名前:デフォルトの名無しさん mailto:sage [04/10/25 10:12:16] 学生でなかったら別に読まなくてもいいんじゃないの? 池袋のジュンク堂で2巻は見た。 実は俺も読みたいので、引きこもりをやめて学生になる春まで待つつもり。
878 名前:デフォルトの名無しさん mailto:sage [04/10/25 10:15:19] 工業系の図書館に普通においてあるぞ
879 名前:デフォルトの名無しさん mailto:sage [04/10/25 21:31:27] >>876 それって,カバーを外すと緑色で,ピラミッドみたいなのが彫ってある本ですか? まだ Lisp が書けなかったとき,古い本なのにオブジェクトシステムが 載ってて凄い本だと思いました. 郊外の学部の図書館 (うちの大学なんだけど) なら入口でカードが必要なかったりします.
880 名前:デフォルトの名無しさん [04/10/27 09:42:30] Allegro CL 7.0出荷age 相変わらずパンピーには買えない値段なのかな...
881 名前:デフォルトの名無しさん mailto:sage [04/10/27 10:14:24] C#みたいにGUIやWEBを組めますか?
882 名前:デフォルトの名無しさん mailto:sage [04/10/27 14:21:06] GUIビルダもサーブレットコンテナもありますがなにか?
883 名前:デフォルトの名無しさん mailto:sage [04/10/27 16:56:40] The Revised R6RS Status Report ttp://www.schemers.org/Documents/Standards/Charter/2004-10-13.pdf
884 名前:デフォルトの名無しさん mailto:sage [04/10/27 17:02:08] 正直、Schemeは今のままでいいと思う。
885 名前:デフォルトの名無しさん mailto:sage [04/10/27 17:12:57] まあ、srfi もあるしね。
886 名前:デフォルトの名無しさん mailto:sage [04/10/27 17:28:34] モジュールの標準化は激しいバトルになるだろうな〜 できるんかいな?
887 名前:857 mailto:sage [04/10/27 21:00:29] >>869 一部不具合を修正 ttp://syobon.zive.net:85/src/syobon11901.zip.html
888 名前:デフォルトの名無しさん mailto:sage [04/10/28 00:19:19] moduleとobject systemは、srfiかs6rsかどっちかには入ってほしい... でも、886の言うとおり激しいバトルになりそうな分野なので期待薄か
889 名前:デフォルトの名無しさん mailto:sage [04/10/28 00:30:48] そのあたりは普通にやろうとしても一筋縄でいかない部分もあるしね ましてやRxRSとなると…
890 名前:デフォルトの名無しさん mailto:sage [04/10/28 00:37:40] PLTかbiglooのを丸々取り込んじまえばいいんだよ。 デザインに関しては、この二つが抜けてるから。
891 名前:デフォルトの名無しさん mailto:sage [04/10/28 00:55:58] どっちのを取り込むの? その設計で本当にいいの? そもそも取り込む必要あるの? 等々…
892 名前:デフォルトの名無しさん mailto:sage [04/10/28 11:49:07] www.schemers.org/Documents/Standards/Charter/2004-10-13.pdf > module system > A module system will definitely be part of R6RS. We have dis- > cussed this topic extensively and are now converging on a spe- > cific proposal > object-oriented programming > Issue left for R7RS
893 名前:デフォルトの名無しさん mailto:sage [04/10/28 12:56:09] LISP 1 図書館で複写してもらおうと思ったけど 1枚25円かよ・・・ たけーorz
894 名前:デフォルトの名無しさん mailto:sage [04/10/28 21:58:56] (define x 'foo) (display '(x)) -->(x)#<undef> (display (list x)) -->(foo)#<undef> クォートって手続きlistの単なるシンタックスシュガーですよね にも関わらず前者で変数名がプリントされちゃうのは仕様ですか? writeやcons(とドット対)も試したんですけど、同じ結果です。(gaucheにて)
895 名前:デフォルトの名無しさん mailto:sage [04/10/28 22:05:35] > クォートって手続きlistの単なるシンタックスシュガーですよね この時点で間違い。
896 名前:デフォルトの名無しさん mailto:sage [04/10/28 22:05:47] はあ?
897 名前:デフォルトの名無しさん mailto:sage [04/10/28 22:44:35] >>894 (quote x) => X (list x) => unbound variable `X'. まともな入門書を読みたまえ...
898 名前:デフォルトの名無しさん mailto:sage [04/10/28 22:52:55] ゴメンナサイ
899 名前:デフォルトの名無しさん mailto:sage [04/10/29 11:45:58] (find (lambda(x)(equal? 'b x)) '('a 'b 'c)) #f (find (lambda(x)(equal? "b" x)) '("a" "b" "c")) "b" なぜ前者は#fになるんでしょうか?
900 名前:デフォルトの名無しさん mailto:sage [04/10/29 11:57:44] シンボルbとリスト(quote b)を比べてるから。
901 名前:デフォルトの名無しさん mailto:sage [04/10/29 12:14:35] >>900 理解できました。ありがとう。
902 名前:デフォルトの名無しさん mailto:sage [04/10/31 08:12:34] NOW Available Allegro CL 7.0 普通にライブラリ増えた感じだね Allegro Prolog だけは謎だけど
903 名前:デフォルトの名無しさん mailto:sage [04/10/31 17:53:54] vism
904 名前:デフォルトの名無しさん mailto:sage [04/10/31 19:15:31] >>902 > Allegro Prolog だけは謎だけど Franzって基本的に顧客ドリブンだから、「Prologホシイ」って 客がいたんじゃないの?
905 名前:デフォルトの名無しさん mailto:sage [04/10/31 20:18:57] Franzて従業員何人ぐらい? 商売成り立ってる?
906 名前:デフォルトの名無しさん mailto:sage [04/11/01 09:03:48] 製造はカナーリ少人数でやってそうなイメージ
907 名前:デフォルトの名無しさん mailto:sage [04/11/01 11:12:22] matz も書いていたけど言語ビジネスで 食っているのは MS くらいじゃないか。
908 名前:デフォルトの名無しさん mailto:sage [04/11/01 13:06:49] MSのは言語ビジネスじゃなくて殿様ビジネス
909 名前:デフォルトの名無しさん mailto:sage [04/11/01 13:21:45] 言語とOS、セットにならないとまともな商売にならないってことだろうねえ 本当はそこにハードも一緒だったはずなんだけど、MSは特異な例ということで。 そこでLISPマシンですよ!!w
910 名前:デフォルトの名無しさん mailto:sage [04/11/01 17:57:47] Sun とか Apple も MS 同様に OS + 言語 ( もしくは Office スイート ) で 殿様ビジネスできたか、というと違うのでやはり能力の違い。
911 名前:デフォルトの名無しさん mailto:sage [04/11/01 19:29:23] Bolandはそこそこがんばったじゃないか。 某国コンパイラ無料公開した直後から怪しくなってきたが。 やっぱいくらなんでも無料はまずかったんじゃないか? オープンソースや無料で競い合ってるうちにITバブル崩壊。 1000円でも金取るべきだった。
912 名前:デフォルトの名無しさん mailto:sage [04/11/01 22:47:31] ボーランドも開発環境まで全部揃えて真っ向勝負かけたのが失敗だったんだよ。 コンパイル早くて、コンパクトで高速なコード吐くコンパイラ勝負してりゃいいせんいってたと思うんだが。
913 名前:デフォルトの名無しさん mailto:sage [04/11/01 23:07:57] ライブラリももうちょっと充実してればなぁ。さすがにOSメーカーには敵わんか。
914 名前:デフォルトの名無しさん mailto:sage [04/11/02 07:26:37] 教授が英語で宿題出しやがったんだけど。。。 これ、解ける人いたらどういう問題か教えてくれんか? you must write to primary functions: (defun evaluate (expression a b) (....)) This function takes any lisp expression and evaluates it with the stipulation that the values passed in through a and b are mapped to x and y, so that if the expression uses the values x and y, the values passed in through a and b will be used in their place. (defun mutate (expression) (....)) This function will take a mathematical expression, change it according to random rules, and return the resulting new "mutant" expression. Valid input for the function is the list (+ x y) or any expression output by a properly implemented mutate function. Modifying Mathematical Expressions in Lisp tips: (random 1.0) ;; generates a random float between 0 and 1 (random 3) ;; generates a random int less than 3 (0, 1, or 2)
915 名前:914(続き) mailto:sage [04/11/02 07:27:48] rules: operand rule (rule 1): 20% the operand will become x 20% the operand will become y 60% the operand will be a random float in [0,1] operator rule (rule 2): 30% of the time the operator will be: + 30% of the time the operator will be: - 30% of the time the operator will be: * 10% of the time the operator will be: expt mutation: an expression will mutate exactly in one place 20% the operator 40% the first operand 40% the second operand if an operand is itself an expression, then the mutation will recurse down that branch to select the location of mutation if an operand is selected it will mutate according to the following rules 60% the operand will mutate according to rule 1 40% the operand will expand the new operator will be selected according to rule 2 the first operand will be identical to the original operand the second operand will be selected according to rule 1
916 名前:914(続き) mailto:sage [04/11/02 07:28:16] if an operator is selected the possibilities are: 80% the operator will mutate according to rule 2 20% the operator will colapse into an operand according to rule 1 if the expression is a single value...
917 名前:デフォルトの名無しさん mailto:sage [04/11/02 09:31:59] ランダムに変えて評価しろって問題じゃない?
918 名前:デフォルトの名無しさん mailto:sage [04/11/02 11:21:33] 宿題の丸投げですか
919 名前:デフォルトの名無しさん mailto:sage [04/11/02 13:17:12] 問題文を読む限りそれほど難しいことを言ってるわけじゃないので 落ち着いてよく読め。
920 名前:デフォルトの名無しさん mailto:sage [04/11/02 13:27:49] >>919 問題文を読むのに難儀している模様。
921 名前:デフォルトの名無しさん mailto:sage [04/11/02 15:16:12] この英語じゃ無理も無いと思われ... mutateは変数にxとyを使った式を適当に乱数でいじくって出力。 それをevaluateに食わせて計算をするってことかな。 遺伝的アルゴリズムでもやっとるんか?
922 名前:デフォルトの名無しさん mailto:sage [04/11/02 18:15:17] > 20% the operator will colapse into an operand according to rule 1 これの意味がわからん。 20% the expression will colapse into an operand according to rule 1 ということか?
923 名前:デフォルトの名無しさん mailto:sage [04/11/02 21:50:06] collapse
924 名前:デフォルトの名無しさん mailto:sage [04/11/02 22:13:15] で、この問題のどこが分からんのだ?
925 名前:デフォルトの名無しさん mailto:sage [04/11/03 00:04:24] とりあえず GA ってのは置いといて >>914 みたいな、 「確率的に分岐する処理を格好良く書けるマクロを書け」 って問題にして皆で考えないか?
926 名前:デフォルトの名無しさん mailto:sage [04/11/03 07:30:40] >>925 素直に考えるとこんな感じになるのかなあ。 (pcase (0.3 expr ...) ;; 30%の確率でこの節を実行 (0.6 expr ...) ;; 60%の確率でこの節を実行 (else expr ...)) ;; 残り(10%)の確率でこの節を実行 これならそんなに難しくないような。もっと格好いい書き方を 考えてる?
927 名前:914 mailto:sage [04/11/03 12:23:20] みなさんありがとうです 教授も教授なんですが結構まじめに授業やってくれんくて それで宿題ポンと出すんで中々難しいんだわつД`) >>921 さんの説明だとなんとなく意味がつかめたっす >>925 >>926 みんなでこの問題考えられたら嬉しいんすけど、 俺も案出してくんでよろしくおねがいします。
928 名前:デフォルトの名無しさん mailto:sage [04/11/03 13:03:10] >>927 おまえが授業聞いてないだけだろ 失せろ
929 名前:デフォルトの名無しさん mailto:sage [04/11/03 13:57:23] >>926 シンプルイズベスト、だね 他に格好良いのとかあるのか? >>928 まあまあ、もはや問題自体は別にどうでも良いだろw
930 名前:デフォルトの名無しさん [04/11/03 16:41:01] 「計算機プログラムの構造と解釈」(和訳版)を読んでいるのですが、 1.2.4 べき乗の説明で、fast-exptの増加の程度は(p25の注釈37によると) 「2を底とするnの対数に、nの2進表現での1の数を足して1を引いたもの」 と説明があります。 この説明中の 『nの2進表現での1の数』 とはどのような数なのでしょうか?
931 名前:デフォルトの名無しさん mailto:sage [04/11/03 16:46:36] 1 less than the log base 2 of n plus the number of ones in the binary representation of n.
932 名前:デフォルトの名無しさん mailto:sage [04/11/03 16:51:49] >>914 とりあえずevaluate作ってみたよん。 手元にLispがないからSchemeになってまふ。 オペランドは2つに固定ね(美しくないけど解りやすいから) (define *operator* `((+ . ,+) (- . ,-) (* . ,*) (expt . ,expt))) (define evaluate-1 (lambda (op opr1 opr2 a b) (apply (cdr (assoc op *operator*)) (list (cond ((eq? opr1 'x) a) ((eq? opr1 'y) b) (else opr1)) (cond ((eq? opr2 'x) a) ((eq? opr2 'y) b) (else opr2)))))) (define evaluate (lambda (expression a b) (let ((op (car expression)) (opr1 (cadr expression)) (opr2 (caddr expression))) (evaluate-1 op (if (pair? opr1) (evaluate opr1 a b) opr1) (if (pair? opr2) (evaluate opr2 a b) opr2) a b)))) ; (evaluate '(+ 4.1 (- y (* x 2.1))) 2.3 3.3) -> 2.5699999999999994
933 名前:デフォルトの名無しさん mailto:sage [04/11/03 16:58:56] >>930 ビットが立っている数だろ? 100101(2) ⇒ 3
934 名前:デフォルトの名無しさん mailto:sage [04/11/03 17:46:27] 残りのmutateだよん (define mutate-operator (lambda () (let ((r (random 100))) (cond ((< r 30) '+) ((< r 60) '-) ((< r 90) '*) (else 'expt))))) (define mutate-operand (lambda (operand) (let ((r1 (random 100)) (r2 (random 100))) (cond ((or (< r1 60) (null? operand)) (cond ((< r2 20) 'x) ((< r2 40) 'y) (else (random 1.0)))) (else (list (mutate-operator) operand (mutate-operand '())))))))
935 名前:934 mailto:sage [04/11/03 17:47:01] (define mutate (lambda (expression) (let ((op (car expression)) (opr1 (cadr expression)) (opr2 (caddr expression)) (r (random 100))) (cond ((< r 20) (list (mutate-operator) (if (pair? opr1) (mutate opr1) opr1) (if (pair? opr2) (mutate opr2) opr2))) ((< r 60) (list op (if (pair? opr1) (mutate opr1) (mutate-operand opr1)) (if (pair? opr2) (mutate opr2) opr2))) (else (list op (if (pair? opr1) (mutate opr1) opr1) (if (pair? opr2) (mutate opr2) (mutate-operand opr2)))))))) ; (mutate (mutate (mutate (mutate '(* (+ x y) (- x y)) )))) --> (+ (* 0.8420 0.1857) (- (+ x x) 0.9704)) >20% the operator will colapse into an operand according to rule 1 これの意味は不明なのでいれてないよん。
936 名前:デフォルトの名無しさん mailto:sage [04/11/03 18:40:25] (list (mutate-operator) (if (pair? opr1) (mutate opr1) opr1) (if (pair? opr2) (mutate opr2) opr2))) とかって (list (mutate-operator) opr1 opr2)) にすると思ってた。
937 名前:デフォルトの名無しさん mailto:sage [04/11/03 21:10:25] >>930 ,931 原文はなんてことないのに日本語訳だとわかりにくいですねえ。
938 名前:デフォルトの名無しさん mailto:sage [04/11/04 05:18:57] みんなえらいな 助け合いってのが心に染みたよ
939 名前:デフォルトの名無しさん mailto:sage [04/11/04 12:24:08] >>935 >20% the operator will colapse into an operand according to rule 1 そのoperatorを含む式が一つのoperand(x,y,定数のどれか)になる ってのが対称的で美しい気がする。 operandがexpressionになるって規則もあるしね。
940 名前:flatline@Vim%Chalice ◆r6EONKKhcc mailto:sage [04/11/05 04:17:47] おはようございます. On Lispの邦訳がとりあえず第25章まで終りました.ご賞味下さい. っ [ ttp://user.ecc.u-tokyo.ac.jp/~g340299/onlisp_j.pdf ] あとパッケージについてのappendixが残っているのと,全体的な訳の見直し,注の整備, 見栄えの向上,HTMLやtexinfoへの変換(←やるかどうか怪しい)ですかね... なお↑のサイトは私が来年4月に工学部に進学してまもなくすると (移行措置も何もなく)一夜にして移転しますんで,ミラー置いておきますね. っ [ ttp://www.komaba.utmc.or.jp/~flatline/onlisp_j.pdf ] まだ工学部生としての学生証番号が決まってないので, 移転先がどういうアドレスになるかはまだ不明です.
941 名前:デフォルトの名無しさん mailto:sage [04/11/05 04:22:09] >>940 すげーな。一人でやってるのか?これってどのぐらい時間かけてるの? 一日何分ぐらいやってる?
942 名前:デフォルトの名無しさん mailto:sage [04/11/05 04:34:13] flatlineさんおつかれ。よくやったね。 後で印刷して、ありがたく読ませてもらうよ。
943 名前:デフォルトの名無しさん mailto:sage [04/11/05 05:27:24] お疲れさまです。早速読んでみます。
944 名前:デフォルトの名無しさん mailto:'sage' [04/11/05 06:56:20] >>940 おつかれさま! texinfoホスイ
945 名前:flatline@Vim%Chalice ◆r6EONKKhcc mailto:sage [04/11/05 07:16:48] >>941 メインは私ですが様々な方からいただいた指摘を取り込んであります. かかった期間は2年弱. 数日にいっぺん,1,2時間ずつやってたかな? ;; 自分で本を書くのに比べれば微々たる労力,とも言えますが... >>942 Appendixがないのと,誤訳が残ってそうなのは覚悟しといてください. 紙にしちゃうと読みやすいけど更新に追随し辛いですよね. 今後はChangeLogでもつけようかな? あと,印刷するには余白が狭過ぎかもしれません... いずれ直します. >>943 どうもです.何か気付いたら教えてください.
946 名前:flatline@Vim%Chalice ◆r6EONKKhcc mailto:sage [04/11/05 07:21:03] >>944 モウチト待ッテ (´Д`;)
947 名前:デフォルトの名無しさん mailto:sage [04/11/05 07:22:26] >>flatline 乙!喜んで読ませてもらう!
948 名前:デフォルトの名無しさん mailto:sage [04/11/05 13:39:53] 恭一また臭いこといってんな
949 名前:デフォルトの名無しさん mailto:sage [04/11/05 13:40:55] ごめん誤爆した
950 名前:デフォルトの名無しさん mailto:sage [04/11/06 07:29:32] そういえばgaucheのMinGWへのポートは結局どうなったの?
951 名前:デフォルトの名無しさん mailto:sage [04/11/07 04:12:29] みなさんedってつかってますか? clispでedをディスアセンブルしてメモ帳以外のエディタを使おうと思ったのですが、うまくいかないですよ。
952 名前:ミミ mailto:sage [04/11/07 04:20:14] >>951 ディスアセンブル? EDITOR 環境変数を変更するか、*EDITOR* グローバル変数を変更すればいいと思うんだけど。
953 名前:デフォルトの名無しさん mailto:sage [04/11/07 10:14:15] Scheme入門(数学ネタ ttp://www.altum.jp/math/exp2a/ なかなか面白いので晒しage
954 名前:デフォルトの名無しさん mailto:sage [04/11/07 20:16:45] たぶん大学のサーバーに置いてあったころに見たな。
955 名前:デフォルトの名無しさん mailto:sage [04/11/07 22:58:11] Gaucheでpsd使われてる方いますか?
956 名前:デフォルトの名無しさん mailto:sage [04/11/08 23:31:11] LisperはGUI組む必要があるときどうしてますか? CLIMはACLだと別売りみたいだし、LispWorksのドキュメント見るとobsolete扱いで CAPI使え、みたいなこと書いてあるんで何がデファクトなのかよ〜わからん。 ウェブアプリケーションにしちゃうもん?
957 名前:デフォルトの名無しさん mailto:sage [04/11/08 23:34:59] GUIイラネ
958 名前:デフォルトの名無しさん mailto:sage [04/11/08 23:42:19] ですね
959 名前:956 mailto:sage [04/11/08 23:55:59] GUIイラネ、で済めばいいんだけどさ(実際漏れもEmacsからほとんど外に出ないし)、 仕事でLisp使ってブツを作り上げておっさん連中にデモ・プレゼンするとき困らない? Emacsのバッファで作業してるの見せてもおっさんには説得力ないんだよね (でも予算の使い道の決定権を握ってるのは奴らだ)。 折角何の前例もないところにLispを使うという無茶を通して邪魔されないで済んでるので できれば余計な横槍を入れられないように防衛線を張っておきたいのでし。 個人で使って自己満足してるだけならこんなこと気にする必要もないんだけどね。
960 名前:デフォルトの名無しさん mailto:sage [04/11/09 00:36:08] >>959 >>15 なんていうのはあるけれど。
961 名前:デフォルトの名無しさん mailto:sage [04/11/09 01:00:53] ウェブアプリにできるような物ならウェブアプリでいいんじゃない?
962 名前:デフォルトの名無しさん mailto:sage [04/11/09 01:26:18] >>952 *editor*変えたらうまくいきました。今まで何やってたんだ俺… GUIかどうかは微妙だが、xyzzyでヒルベルト曲線を書くデモを見たときはちょっとビビった。
963 名前:デフォルトの名無しさん mailto:sage [04/11/09 02:07:40] >>956 WWWアプリが一番楽なアプローチだけど それができなきゃ自分でGUIライブラリのbindingsを書くしか。
964 名前:956 mailto:sage [04/11/09 02:16:38] やはりウェブアプリに落ち着いちゃいますか。もしくはFFIで外界と接続する、と。 そのわりには307にレスつけてる人が少ないのを見ると、Lisperは必要なモノは自分で 自作しちゃうのかなぁ、やっぱり。
965 名前:デフォルトの名無しさん mailto:sage [04/11/09 03:04:01] >>956-964 つまりLispはVisualBasicやVisualC++のかわりにはなりえないっていう結論になるの?
966 名前:デフォルトの名無しさん mailto:sage [04/11/09 03:17:04] ∩___∩ ? | ノ\ ヽ | / ●゛ ● | ? | | ∪ ( _●_) ミ j 彡、 |∪| | / ∩ノ ⊃ ヽ ( \ / _ノ | | .\ “ /__| | \ /___ /
967 名前:デフォルトの名無しさん mailto:sage [04/11/09 03:20:16] >>964 自作しちゃうので世に出てこなくてコミュニティが発展しないってのは Lisperたちの問題としてよくでてくるよね。 >>965 (よくいる)Lisperのそういう作り込みを基本的に必要としてないってことかなぁ。 でも、垣根を下げるためには、そういう作り込みって重要よね。
968 名前:デフォルトの名無しさん mailto:sage [04/11/09 07:37:35] 動きが必要なら比較的良く使うのは OpenGL バインディングかなぁ… ショボくていいなら Tk インターフェースを良く使う.でも最近だと Web で DHTML つかうのがお手軽かもしれん. プレゼン資料ならデータを他のツールで可視化(GNU Plot とか GraphViz とか) よくやるなぁ.
969 名前:デフォルトの名無しさん mailto:sage [04/11/09 09:36:00] >>967 逆だよ。 ブラックボックスはダメ。
970 名前:デフォルトの名無しさん mailto:sage [04/11/09 14:57:42] 仕様が公開されてればブラックボックスだろうが別にかまわないが
971 名前:デフォルトの名無しさん mailto:sage [04/11/09 21:44:48] 出来が良けりゃブラックボックスで良い 糞コードしか書けない奴はブラックボックスじゃなくてもいいけどな
972 名前:デフォルトの名無しさん mailto:sage [04/11/10 00:27:55] Dr.Schemeはいかがでしょう?
973 名前:デフォルトの名無しさん mailto:sage [04/11/10 22:22:02] なんかハリボテ感が強い>Dr もうちょっとスマートにまとまらないのかな GUIも独自とかじゃなくてScheme/tkとかwxSchemeとか
974 名前:デフォルトの名無しさん mailto:sage [04/11/11 02:23:40] widestudioなんかは既にたくさんのOSと言語に対応している状態なんだから、 比較的楽にlispにも対応できる柔軟性を持ってそうに思えるんだけど、どうなんですかねぇ?
975 名前:デフォルトの名無しさん mailto:sage [04/11/11 09:38:49] シェルスクリプトで書かれたLISPインタプリタとかってありますか?
976 名前:デフォルトの名無しさん [04/11/11 11:19:58] >>975 シェルは分かりませんが、awk ならあります。 awklisp っってヤツね。 >>7 を見てね。
977 名前:デフォルトの名無しさん mailto:sage [04/11/11 12:02:28] >>976 あ、これなかなか面白いです。どうもです。
978 名前:デフォルトの名無しさん mailto:sage [04/11/11 12:35:13] ECLってどうですか? 使ってる人いますか?
979 名前:デフォルトの名無しさん mailto:sage [04/11/12 02:17:34] scheme処理系では一般的に日本語(というかSHIFT-JIS)の扱いってどうしているんでしょうか。 SRFIで定義しているようなやつはCとかで書くのか、 それとも他のASCIIを扱う関数から定義しているものなのか…。 実際にSJIS使ったサンプルとかもあれば…。SRFIでは良くわかりませんでした。 今勉強がてらに使ってるやつでは例えば(string-ref "あかさたな" 0)とかするとエラー終了したりしてます。 ここで"あ"って返して欲しいんですが。
980 名前:デフォルトの名無しさん mailto:sage [04/11/12 07:36:43] comp.lang.schemeよりコピペ。Scheme処理系のunicodeサポート。 1) Gauche: unarguably best Unicode support, including native read/write syntax for strings, chars, regexps & char-sets; support for SRFI-13 & SRFI-14; charconv libraries and extensions to I/O procedures to specify encoding for ports, including auto-detection of Japanese encodings. 2) PLT >= v299: native Unicode support; regexps and SRFI-13 are Unicode-aware, SRFI-14 is not; port encodings assumed UTF-8. 3) Gambit: native Unicode support, no regexp or SRFI support, encoding for files and terminal is fixed at startup time and limited to Latin-1 or common Unicode encodings (UCS-2, UCS-4 or UTF-8). 4) SISC/Kawa/Jscheme: leverages Java Unicode support; SISC has Unicode aware SRFI-13, Unicode unaware SRFI-14, the others have neither; encoding is determined by default by locale, but SISC and Kawa provide port encoding procedures; Java uses UTF-16 internally which may cause complications with surrogate pairs.
981 名前:デフォルトの名無しさん mailto:sage [04/11/12 07:37:26] 7) Chicken: characters are allowed within the full 21-bit Unicode range, however by default the non-ASCII characters have no read/write syntax. I have a unit almost ready for release that leverages this and assumes UTF-8 encoded strings/ports to provide full Unicode support, including regexps, SRFI-13 and SRFI-14. Chicken has an iconv interface, and I also have a unit with a more friendly interface such as (with-input-from-encoded-file enc file thunk). 8) MIT-Scheme: Unicode chars strings are disjoint types; 'alphabet' type as Unicode-char alternative to char-sets; Unicode string ports; no port encoding utilities. 9) Bigloo: Unicode strings and characters are disjoint types; no port encoding utilities. 10) Chez/Elk/Guile/Inlab-Scheme/Rscheme/SCM/Stalin/Stklos: nothing.
982 名前:デフォルトの名無しさん mailto:sage [04/11/12 10:28:15] どなたかそろそろ、次スレを立てていただけないでしょうか?
983 名前:デフォルトの名無しさん mailto:sage [04/11/12 12:16:45] 次スレ pc5.2ch.net/test/read.cgi/tech/1100229366/l50
984 名前:デフォルトの名無しさん mailto:sage [04/11/12 15:18:09] >>7 にあるawklispに含まれていたperlispですが、 これはPerl4での動作することを想定して書かれていました。 なのでリファレンスやレキシカルスコープ変数はまったく使われておらず、 コードも煩雑なものとなっています。 Perl5でLISPインタプリタを実装した例などはありますか? 自分で勉強して書けと言われそうですが・・・
985 名前:デフォルトの名無しさん [04/11/12 17:46:04] >>984 こっちのほうが分かりやすいかも。awk と sh で書いてあります。参考までに。 www-2.cs.cmu.edu/afs/cs/project/ai-repository/ai/lang/lisp/impl/awk/
986 名前:ミミ mailto:sage [04/11/12 20:01:50] >>973 DrScheme の GUI (MrEd) は wxWidgets の初期のバージョンから 派生したものらしいよ。
987 名前:本田 [04/11/13 00:12:16] >>956 >Lisp-Tk www.cliki.net/Lisp-Tk >ウェブアプリケーションにしちゃうもん? >CL-HTTP www.ai.mit.edu/projects/iiip/doc/cl-http/home-page.html 流行としてはGUIよりアプリケーションサーバーだと思う。
988 名前:デフォルトの名無しさん mailto:sage [04/11/13 00:19:04] >>980-981 どうもありがとうございます。 やはり多国語を扱えるような処理系はネイティブでサポートしているのが多いんですね。 処理系のソースは持っているので自分でなんとかしてみます。
989 名前:デフォルトの名無しさん mailto:sage [04/11/13 00:20:16] LISPでWEBサービスってできるの?
990 名前:本田 [04/11/13 00:38:31] >>989 >db-sockets www.cliki.net/db-sockets こんなの使えば、HTTPも処理できるプログラム書けるはず。
991 名前:デフォルトの名無しさん mailto:sage [04/11/13 00:41:49] >>990 そうなんだ。ありがとう^^
992 名前:デフォルトの名無しさん mailto:sage [04/11/13 00:59:44] >>989 kahuaとか
993 名前:デフォルトの名無しさん mailto:sage [04/11/13 12:22:54] WebサービスってGoogleみたいにSOAPとか使うやつのことだろ
994 名前:デフォルトの名無しさん mailto:sage [04/11/13 12:37:41] >>993 そういう規格もありますねー にゃんにゃん