04/09/18 02:36:20
レスどうもです。やっぱりFFI使ってCで書くのが定石なんですね。
Cltl2眺めててbit-vectorのオブジェクトの存在するアドレスを物理メモリにマップできれば
もしかして・・・と思ったのですが違ったようです。LispMachineとかだとできたのかなぁ。
データの圧縮とかビットマップインデックスみたいに素のLispが提供していないメモリ上のデータ構造を
ゴリゴリ扱いたいなぁ、と思ったらLisperの取る道はFFIしかないんですかね。それともマクロで
抽象化してarray :element-type (unsigned-byte 32)の上で操作するのでしょうか。
332:デフォルトの名無しさん
04/09/18 03:06:04
物理メモリにmapするには、もひとつOSの助けも必要だと思われ。
Linuxはユーザ空間にmemory mapped I/Oをmapできたんだっけか。
ユーザ空間にI/OをmapするAPIと、具体的な仮想アドレスのreferenceを
取得できるAPIをFFIで書いたらできるのかな。
333:デフォルトの名無しさん
04/09/18 03:26:40
結局そういうインタフェース作ったとして問題は参照方法だろ
さすがにメモリ走査とかはポインタないと辛い
Cでやった方が全然楽だし速いよ
(let (ptr (make-integer-ptr mem)) ;; ポインタの作成
(ref ptr) ;; 参照
(deref ptr value) ;; 逆参照
(inc ptr)
こんなことやってられっか?
実際は型の問題もあるし、もっと煩雑になる
そもそも演算子がないのが痛い
int *ptr = mem; // ポインタの作成
&ptr; // 参照
*ptr = value; // 逆参照
++ptr;
やっぱ記述量が割に合わない
334:デフォルトの名無しさん
04/09/18 03:35:32
餅は餅屋
335:328
04/09/18 03:55:28
はぅあ。袋叩きにあってしまいましたな。記述量が割に合わないとかLisp向きじゃないよなぁ
とは思いながらも知らない世界があるかも程度の好奇心で聞いただけなのでした。
>>334 餅は餅屋
御意。いまも仕事でLispのコード書いてたんだけど、Lispで書いてるととにかく楽なんで
何でもかんでもLispで書けないかなとか思った私が阿呆でした。
どうでもいいけど、みんなこんな時間まで何やってんの?皆もデスマ?
336:デフォルトの名無しさん
04/09/18 04:01:40
Schemeで名前空間で名前を分類するようなことをしたいのですが、どういう方法を
取ればよいのでしょうか?
C++でnamespaceでモジュール全体を囲って名前の衝突が起きないようにして、
using namespaceで名前空間を使うというようなことです。
名前空間を階層化したりもしたいのです。
337:デフォルトの名無しさん
04/09/18 04:22:51
標準的な方法はないから
toplevelをletか何かで包んで必要な名前だけ外部に出すとか
(define proc1 #f)
(let ()
(define (proc1-sub1) ... )
(define (proc1-sub2) ... )
(set! proc1 proc1-sub1)) ;; export
あとは処理系依存だから、付属のマニュアルでも嫁
338:デフォルトの名無しさん
04/09/18 05:32:43
>>328
>>338 の言う通り、やってできなくはないと思う。mapしたアドレス値を
取得するのと、そのアドレスにアクセスするプリミティブは処理系
依存になるが。だがCでポインタを扱いなれてると、Lispでのアクセスは
冗長だね。マクロが使えることはメリットだけど。
339:デフォルトの名無しさん
04/09/18 09:28:32
>>336
処理系依存でよければmoduleシステムやなんやらを使うのがいいでしょう。
どうしてもportableでやりたいなら、top levelの束縛を変更する関数を
マクロで置き換えて、ほげほげとか。
って、top levelの束縛をマクロにするのはR5RS的にはだめなんだっけか...
340:デフォルトの名無しさん
04/09/18 10:40:21
スペースで区切られたテキストが以下のようにあったとして
A B C
D E F
↓(変換)
A
D
B
E
C
F
みたいな文章に整形するプログラムを作ろうと思ったのですが
いまいちエレガントにかけません
読み込むテキストファイルを"test.dat"として
以下のように書きました
(with-open-file (in "test.dat" :direction :input)
(let ((buff)
(str1)
(str2)
(str3)
(vstr))
(while (setq buff (read-line in nil))
(setq vstr (split-string buff "\t"))
(setq str1 (concatenate 'string str1 (first vstr) "\n"))
(setq str2 (concatenate 'string str2 (second vstr) "\n"))
(setq str3 (concatenate 'string str3 (third vstr) "\n")))
(format t "~A\n~A\n~A\n" str1 str2 str3)))
誰かアドバイスください・・・
341:デフォルトの名無しさん
04/09/18 13:02:49
縦読みデコーダでも作るの?
342:340
04/09/18 13:15:05
>>341
そんな大層なものではなくて
練習用に書いているのですが・・・
上の例では3列と固定しているところを可変で
対応できるようにしたいのです
str1,str2,str3 とかやるのは格好悪いし・・
もっとすっきり書けませんかね?
343:デフォルトの名無しさん
04/09/18 13:32:22
下のコードはヒントにならない?
(mapcar #'list '(a b c d e) '(3 4 5 6 7))
=> ((a 3) (b 4) (c 5) (d 6) (e 7))
344:340
04/09/18 15:24:32
>>342
有難うございます
で、さっそく以下のように書いてみたのですが、
結果が nil になってしまいます
(defun util (fname)
(with-open-file (in fname :direction :input)
(let ((buff)
(output))
(while (setq buff (read-line in nil))
(setq output
(mapcar #'list output (split-string buff "\t"))))
(mapcar #'(lambda (s) (format t "~A\n" s)) output))))
(util "test.dat")
nil
なぜ nil になってしまうのでしょうか?
345:デフォルトの名無しさん
04/09/18 16:18:32
whileの返り値
346:デフォルトの名無しさん
04/09/18 18:07:39
(defmacro for ((var start stop) &body body)
(let ((gstop (gensym)))
`(do ((,var ,start (1+ ,var))
(,gstop ,stop))
((> ,var ,gstop))
,@body)))
これはOnLispに載っている "正しいforマクロ" (図42)
ですが、このgensymの例が何故正しいのかよくわかりません。
bodyの中にフリーなgstopが出てきたらやはり名前衝突を
起こしてしまう気がするのですが、私は何か勘違いして
いるのでしょうか。
347:デフォルトの名無しさん
04/09/18 18:16:40
>>344
(mapcar #'list nil '(1 2 3)) => nil だよ
まず output として '((A B C) (D E F)) を作ってこれを '((A D) (B E) (C F)) に変換する
と思えば良いんじゃない?
あんま考えてないけど↓
(defun util2 (output result)
(if (car output)
(util2 (mapcar #'cdr output) (cons (mapcar #'car output) result))
(reverse result)))
>(util2 '((A B C) (D E F)) '())=>((A D) (B E) (C F))
348:デフォルトの名無しさん
04/09/18 18:45:50
gensymはinternされない (システム内部の、名前からシンボルへの
対応表に登録されない) シンボルを作るので、このマクロの展開時に
作られるシンボル (#:G0031とか) と同じシンボルを外から与えることは
できない。(同じ名前にしてもシンボル自身は別オブジェクトなので
衝突しない)
349:340
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:デフォルトの名無しさん
04/09/19 11:07:15
不可能な理由がなかったら可能だよ。
354:& ◆TACpYgPjX6
04/09/19 11:17:07
それがよくわからないんですよ。
だって、OS 側でどんな処理をしているか分からないじゃないですか。
たとえば WM_KEYDOWN ハンドラ内で継続を作成して、
一度そのハンドラを終了して OS に制御を返すでしょ。
そのあと WM_LBUTTONDOWN ハンドラ内で
先ほどの継続を呼び出すと、WM_KEYDOWN メッセージの処理が
再開されるわけですよね。
OS 側でスタック上のデータではない
グローバル変数をいじっていたとすると、
コンテキストがめちゃくちゃになって、
よくない気がするんです。
355:デフォルトの名無しさん
04/09/19 11:26:55
> OS 側でどんな処理をしているか分からない
分からない以上、可能だという確認ができないんじゃないか?
356:ミミ
04/09/19 11:31:53
いえいえ、今の私の知識ではわからないということなんです。
どなたか深い知識をご存知の方はいらっしゃらないかなと思いまして。
357:デフォルトの名無しさん
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:デフォルトの名無しさん
04/09/19 11:50:34
で?
360:ミミ
04/09/19 11:51:32
協力してくれたらうれしい。
できたら使わせてあげるから。
361:デフォルトの名無しさん
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:デフォルトの名無しさん
04/09/19 12:00:52
PythonはMac出身じゃなかったっけ.
まぁ、それはともかく、Unixっぽいってどういうこと?
365:デフォルトの名無しさん
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:デフォルトの名無しさん
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:デフォルトの名無しさん
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:デフォルトの名無しさん
04/09/19 12:40:07
>>367
だよね。他にもあるかも知れないけど、
.NETFramework をサポートする Scheme を開発するプロジェクト
URLリンク(radio.weblogs.com)
URLリンク(www.cs.indiana.edu)
372:デフォルトの名無しさん
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:デフォルトの名無しさん
04/09/19 13:13:42
おぇ
376:デフォルトの名無しさん
04/09/19 13:17:42
"as a hacking tool"
===> "as a hacking tool"
377:デフォルトの名無しさん
04/09/19 14:24:34
なんでハンドル二つ使って常時ageなんだ?
378:デフォルトの名無しさん
04/09/19 14:34:01
Cからのscheme呼出しの中で補足された継続のエクステントが無制限な処理系ってあるの?
GaucheでもCからのコールバックで補足されたもののエクステントはコールバック内に限定されるし
379:デフォルトの名無しさん
04/09/19 15:02:33
>>363
クロージャが難しいというよりはガーベジコレクションが難しそう.
Schemeで書かれた関数をWin32APIに渡して,コールバック関数として登録したとして,
その関数がいつまで使われるかはSchemeインタプリタ側では判別できないと思う.
380:デフォルトの名無しさん
04/09/19 16:06:22
>>377
1. 2ch が Netscape や Mozilla に対応していない。
2. よって、cookie に書き込まれた全角のハンドル名が化ける。
3. あわててハンドル名を入れなおすと、そのときは正しい名前で掲示板に
書き込まれる。
4. 次に書き込むと、またハンドルが化ける。
5. 以下繰り返し。
Netscape, Mozilla ではハンドルは半角英数にするのが吉。
常時 age については分からない。
381:デフォルトの名無しさん
04/09/19 16:13:53
>>380
> >>377
> 常時 age については分からない。
sage を知らない、だろうな。
382:デフォルトの名無しさん
04/09/19 17:31:16
> Windows みたいな素敵なシステムに、
ここんとこに賛同できないのは漏れだけなのか。s/Windows/MacOSX/だったら同意なんだが。
383:デフォルトの名無しさん
04/09/19 17:42:53
その部分は罠と判断した。
384:デフォルトの名無しさん
04/09/19 17:53:10
>>366
> 一番大きなのは、コンソール (標準入出力) を前提としていること。
なにか大きな誤解をしているような。
Schemeって必ずしもトップレベル環境のreader/writerと標準入出力が結びついている
必要はないでしょ。Dr.Schemeとか触ってみれば? URLリンク(www.drscheme.org)
あとDLLの動的呼び出しそのものはそれほど難しくないと思われ
URLリンク(www.kt.rim.or.jp)
> 共有オブジェクト(Win32ではDLL)を動的にロードし、
> 中の関数をscheme コードから呼び出すことができる。
> さらにコールバック関数をscheme コードで記述できる。
385:デフォルトの名無しさん
04/09/19 22:06:34
DrSchemeって、一応他のエディタで編集してロードすれば、日本語表示できるみたいだな。
例えば、「あ」と言う文字のように二文字目が\と同じコードの場合には「あ\」と、\を余分にくっつけて
\\を\と認識させるという技を使わなくちゃいけないのが面倒だけど。
ランタイムDLLが必要になるがEXEも作れるようだし、俺の中ではDrScheme最強になりつつある。
386:デフォルトの名無しさん
04/09/20 01:04:59
gaucheでhtml解析するときって皆さんどうやってます?
saaxとかつかってます?
それとも自分で解析モジュールを書いちゃいます?
387:デフォルトの名無しさん
04/09/23 02:10:26
やっと cygwin + slib のインスコ完了したよ・・・
なんでこんなに疲れるんだろう
388:デフォルトの名無しさん
04/09/23 11:27:01
>>386 これは? 使ったことないけど。
URLリンク(www.neilvandyke.org)
389:デフォルトの名無しさん
04/09/23 18:33:55
gosh のload-path は add-load-path 以外に方法がないのですか?
毎回指定するの面度印ですけど・・・
390:デフォルトの名無しさん
04/09/23 18:40:08
>>389
command line optionの-I
391:デフォルトの名無しさん
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:デフォルトの名無しさん
04/09/23 20:27:26
>>393
>問題は、ContA を呼び出し後に、コールバック A から呼び出し側に戻って
>しまうことが問題なのですよね。
Scheme の継続って、OS 側のコンテキストすら
捕獲できるほど強力だったか?
根源的に何か勘違いしていないか?
395:& ◆TACpYgPjX6
04/09/23 20:40:39
>>394
実装によってはできますよ。
スタックをすべて記憶する類の実装の場合です。
396:デフォルトの名無しさん
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:デフォルトの名無しさん
04/09/23 21:10:25
いいかげんsageてくんないかなあ・・・
400:デフォルトの名無しさん
04/09/23 21:22:30
こんなことでぐだぐだ言ってないで、さっさと処理系書いてみれ。
コールバックをまたぐ継続が動かないことくらいすぐ分かるよ。
401:ミミ
04/09/23 21:37:21
>> 400
いや、私がいいたかったのは、そうじゃないんですよぉ。。。
おこんないでくださいよぉ。。
402:デフォルトの名無しさん
04/09/23 21:41:42
具体的に 「こういう使い方すると非常に便利だから絶対使いたい」 というわけでもないのに、
処理系云々の前段階げグダグダいっても意味無いだろ。
実装するにはいろいろ難しい問題があり、汎用的なものにすることは不可能なんだから、
要求が出る前から考えたって良い解法が出るわけがない。
あと、いいかげんsageろ知障。
403:デフォルトの名無しさん
04/09/23 21:43:55
くれぐれもshiroさんとこ行ったりして迷惑かけるなよ
404:デフォルトの名無しさん
04/09/23 21:52:20
汎用的に実装するのはまず無理だろうし,できたとしても
OS側の継続(変な言い方だけど)が戻らないんじゃ意味無し.
が,絶対に無理かと問われると断言できないのが歯痒いというか何というか.
405:ミミ
04/09/23 22:02:04
> 汎用的に実装するのはまず無理だろうし,
うーんと、私はコールバックを超えて継続したいと言っているんではないのですよ。
> OS側の継続(変な言い方だけど)が戻らないんじゃ意味無し
いや、ですから、OS 側の継続を行うのは可能なんですって。。。
> くれぐれもshiroさんとこ行ったりして迷惑かけるなよ
あのう、shiroさんて、誰でしょうか。。。
> あと、いいかげんsageろ知障。
すいません、やっと意味が分かりました。m(_ _)m
406:デフォルトの名無しさん
04/09/23 22:22:17
> コールバック A から OS 側に戻ろうとする直前に、
> あたかも、コールバック B から戻ったように見せかけることができれば、
この時点でOS側の継続は戻ってないと思うんだが
そもそもOSがコールバック関数を呼ぶってのは言わば見せかけであって,
実際にはプロセス間通信なんかが絡んでるの判ってる?
407:デフォルトの名無しさん
04/09/23 22:26:21
>>406
Windows素人は黙ってて欲しいなあ・・・
408:ミミ
04/09/23 22:31:33
>>406
たぶん、私の意図を誤解されています。
実際に OS 側の継続を戻す Scheme 実装系はありますよ。
409:デフォルトの名無しさん
04/09/23 22:33:06
OS のコールバックを跨ぐ事を前提にしているのに、
Scheme 側で生のスタックを使おうとしているのが、
根本的な設計ミスだろ?
普通の Scheme コンパイラで生のスタックを使っていたりするのは、
それが "たまたま" 使えたから。
それを理解せずにスタックに拘る奴は愚かと言う他はない。
410:デフォルトの名無しさん
04/09/23 22:35:34
>>408
> 実際に OS 側の継続を戻す Scheme 実装系はありますよ。
それはどの OS 上のどの実装系?
OS 側のサポートが無い限り setjmp/longjmp 以上のことができるとは思えないんだが。
411:ミミ
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:デフォルトの名無しさん
04/09/23 22:54:28
>私がやりたいのは、いかに継続をコールバックというしがらみから解放させたように
>見せかけるか、という手法なんですよ。
で、そう見せかけるためには、実際にはコールバックをまたぐ必要があるんだろ?
>これほど汎用的に使える手法を"たまたま"と表現することはできないでしょう。
"たまたま" の意味を取り違えているな。
レジスタに 0 をセットのには、たまたま XOR が使えるけど、
123 をセットする為には、どんなにビットをいじくりまわしても
無理。素直にロード命令を使っとけって事。
413:デフォルトの名無しさん
04/09/23 22:55:51
> ですから、私はコールバックをまたぎたいんではないんですって。
まず,「コールバックを跨がなければ問題なく継続を扱える」のは
>>391さんの言う通り問題ない.
>>392の発言はどう読んでも「コールバックを跨ぎたい」という風にしか
読み取れないんだが.
> いかに継続をコールバックというしがらみから解放させたように
> 見せかけるか、
もう少し具体的に書いてくれ.これでは全く意味不明.
414:デフォルトの名無しさん
04/09/23 23:00:38
なんか変なやつが増えた?
具体的には412だけどさ・・・
おねがいだからこれ以上変なスレにしないでね(苦笑
恐らくミミが言ってるのはschemeで擬似的な継続を作ってやりすごそうって事だよな?
その偽の継続と、OS側の本物の継続はかならずしも一致しなくていい。
415:デフォルトの名無しさん
04/09/23 23:03:01
つまりschemeコード上で破綻してなければどんな手段の継続であるうとかまわない、
最終的にプログラムを終了させたときにOS側の継続と一致していれば良い、
って事だと思う。
416:デフォルトの名無しさん
04/09/23 23:05:21
だからコールバックに突入してそのままルートの継続呼び出して戻ってきても、
OS側の本物の継続はまだコールバックの中、ってこともありえる。
417:デフォルトの名無しさん
04/09/23 23:11:02
>>416
言ってることは分からなくもないが,別に疑似的な継続なんて持ち出さなくても
「コールバックを跨がなければ問題なく継続を扱える」
方法はあるわけで.
418:デフォルトの名無しさん
04/09/23 23:17:24
で,コールバックを跨ぐために疑似的な継続を持ち出してみたものの,
どのみちOS側の継続は戻せないので意味ないじゃん…という感じ.
419:デフォルトの名無しさん
04/09/23 23:19:33
別にOS側の継続戻す必要ないよ
420:デフォルトの名無しさん
04/09/23 23:23:51
おまいらちょっと用語の整理が居るんじゃないか?
おれは理解が追いついていないから何もできんですまんが
421:デフォルトの名無しさん
04/09/23 23:26:00
>>419
WM_* のコールバック中に継続を保存し、それを再開できるとでも?
422:デフォルトの名無しさん
04/09/23 23:29:22
コールバックをまたがないのなら、それは継続ではないし、継続である必要も無い。
全く無意味で非実用的な事態を想定し、無駄に思考時間を消費しているだけ。
423:デフォルトの名無しさん
04/09/23 23:31:10
>>420
ついでにカキコしてる人の整理もな…
どれとどれが同じ人の書き込みなのかさっぱり
424:デフォルトの名無しさん
04/09/23 23:32:44
>>423
「ミミ」以外は区別する必要無い気が
425:デフォルトの名無しさん
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:デフォルトの名無しさん
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:ミミ
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:デフォルトの名無しさん
04/09/24 00:07:16
コールバックの用途が概ね副作用であり、大域的状態変化が伴う事を無視して
スタックだけを取り上げるのはいかがなものかと
429:デフォルトの名無しさん
04/09/24 00:10:13
>>410は無視ですかそうですか
430:デフォルトの名無しさん
04/09/24 00:17:24
410に限らず、都合の悪いレスは無視みたいね
オナニーは一人でやってほしいもんだ
431:デフォルトの名無しさん
04/09/24 00:17:45
>>429
素人さんは、すっこんでろ
432:デフォルトの名無しさん
04/09/24 00:20:10
410は何が知りたいんだろう・・・
433:デフォルトの名無しさん
04/09/24 00:25:59
>>410=429=430
setjmp/longjmpは、別に「OSの機能」で実現されてるわけじゃないぞ?
ほぼレジスタやスタックの操作だけ。
アセンブラというものが使える状況なら基本的にどのOSでも作れる。
434:デフォルトの名無しさん
04/09/24 00:29:04
>>433
だからこそOSを含めて継続の保存/復帰を実現するには、OS側のサポートも必要だろってことだよ。
で、そういう実装があるのなら参考のために是非知りたいということ。
435:デフォルトの名無しさん
04/09/24 00:30:55
>>434
おまえさ、わざと勘違いしてんのか?
つまんねえよ。
話の腰を折るだけのつもりなら消えてくれ。
436:デフォルトの名無しさん
04/09/24 00:35:35
なんか、OSを含めて継続保存とか意味不明なこと言ってるアフォがいるけど、
いつからOS含めた話になったの?
437:デフォルトの名無しさん
04/09/24 00:37:55
>>436
>>408に、「実際に OS 側の継続を戻す Scheme 実装系はありますよ。」とあり、
>>410は、その実装系はなんなのかを知りたいという。
ただそれだけの話なんだが、そんなに分かりづらいか?
438:デフォルトの名無しさん
04/09/24 00:38:21
WindowsプログラマとUNIX BAKA (BAd Knowhow Association)の
間で文化摩擦が発生しています
439:デフォルトの名無しさん
04/09/24 00:42:16
「OS側の継続」の定義がそれぞれ違うんだろうね。
なんかプロセス間通信とか言ってる馬鹿(=410)が混じってるので
これ以上続けても無駄な気がする。
それでも続けるなら、
ここからは「Windows限定」でどぞ↓
440:デフォルトの名無しさん
04/09/24 00:42:35
なんでそーなるの?
Windows でも X でも、Scheme 的継続はコールバック跨げないよ。
441:デフォルトの名無しさん
04/09/24 00:44:31
>>440
だから話をシンプルにするための処置だよ。
おまえた単にWindows嫌いなだけだろ。
以降「Windows限定」でどぞ↓
442:デフォルトの名無しさん
04/09/24 00:46:44
('A`)
443:デフォルトの名無しさん
04/09/24 00:48:36
そもそもXなんて誰も使わないしUNIX系は無視してもいいと思う。
「ミミ」自体Windowsって言ってるんだし。
444:デフォルトの名無しさん
04/09/24 00:49:15
いや~、やっぱり Scheme は面白いですね。
445:デフォルトの名無しさん
04/09/24 00:50:30
(gc)
446:デフォルトの名無しさん
04/09/24 00:50:58
(exit)
447:デフォルトの名無しさん
04/09/24 00:59:15
UNIX馬鹿の粘着のおかげで横道逸れすぎて話が全然進まなかったな。
448:デフォルトの名無しさん
04/09/24 01:00:04
なんでもいいからさー、実装出してよ。
449:デフォルトの名無しさん
04/09/24 01:10:55
程よく荒れてきたようなので、一つ質問。
例えば、
ContA:[S1][S2][O1][O2][A]
で、[A] から抜けて([O2][O1]の事は脇に置いておいて)
[S2]に戻るから、これを「継続」って呼んでいるんだよね?
なのに 6.のように
[A] から抜けた後、[S6]に戻る(?)ものを
「継続」って呼んでも良いとでも思っているの?
それは Scheme でいう「継続」とは全く別のものじゃないの?
450:デフォルトの名無しさん
04/09/24 01:30:40
ミミタンの作る処理系は独自実装なので
そんなコトはどうでもいいのです。
451:デフォルトの名無しさん
04/09/24 01:32:18
別に問題ない。
スタックのどこであろうとschemeコードに制御が移ったのなら、それは立派な継続。
コールバック内外へ飛んだ事を「継続を使うユーザー」が知っていればいい。
452:デフォルトの名無しさん
04/09/24 01:32:59
とりあえず Scheme にやさしい OS をつくろうよ。
453:デフォルトの名無しさん
04/09/24 01:45:21
頭固い人多いね
ま、一人が粘着してるだけかもしらんけど・・
>>449
>「継続」って呼んでも良いとでも思っているの?
>「継続」って呼んでも良いとでも思っているの?
>「継続」って呼んでも良いとでも思っているの?
もうね、君に理解は無理だよ
454:デフォルトの名無しさん
04/09/24 01:55:24
>>453
>もうね、君に理解は無理だよ
いや、それはすなわち規格で規定された動作が
出来なくなってしまうという事を意味すると思ったのだが・・・
ま、確かに俺には理解不能だな。
455:デフォルトの名無しさん
04/09/24 02:26:12
>>454
ミミが定義した偽継続だからそれでいいんだろ。scheme的継続だと思ってはいけない。
456:デフォルトの名無しさん
04/09/24 02:37:43
規格に通らなくなるってわけでもなさそうだけど。
規定された動作って、どの辺の事?>454
457:デフォルトの名無しさん
04/09/24 02:59:31
実装の話もいいけど、
使う側の話もしようぜ?
458:デフォルトの名無しさん
04/09/24 04:27:16
ヒント。partial continuaionについて調べよ。
459:デフォルトの名無しさん
04/09/24 08:17:03
事の発端となった香具師の要件が明確でないのに本人はうやむやにしたまま消えちゃうし、
まるでそれと入れ替わるかのようにいつもは議論になっても出てこないような類のレベルの低い煽りのみを繰り返す香具師が出てくるし、
そんな状態で外野が言い合ってたって全く意味が無く、時間の無駄以外の何者でもないと思う。
460:デフォルトの名無しさん
04/09/24 09:25:41
ミミは夜行性だから夜まで待て
461:デフォルトの名無しさん
04/09/24 13:45:00
話を蒸し返すようで悪いが,「プロセス間通信云々」→「Windows素人は黙ってろ」
の流れの意味が分からない.誰か説明キボン.
例えば,Windowsのウィンドウプロシージャが呼び出される過程は,
・OSからウィンドウの属しているスレッドのメッセージキューに
メッセージが送られる.(ここでプロセス間通信)
・ウィンドウの属しているスレッドにて,キューからメッセージ取り出し.
・取り出したメッセージを引数にコールバックプロシージャを呼び出す.
こんな感じじゃないの?
明らかにプロセス間通信は絡んでると思うんだけど.
462:デフォルトの名無しさん
04/09/24 15:50:49
URLリンク(www.double.co.nz)
463:デフォルトの名無しさん
04/09/24 16:23:22
>>461
必死に慣れない参考書読んで調べたんだろうけどさ、基本的なことを
まるで理解してないな。
おまえが調べた内容は、OS側でブラックボックス化してる部分を
ただほじくりかえしただけ。つまり大ハズレもいいとこ。
これはね、まず恥ずかしいことなんだと認識してくれよ?
悦に浸るどころじゃないよ?(w
なんのためにスレッド毎にメッセージキューがあるのかをまずよく考えてね?
Windowsの開発者はメッセージキューの知識だけでプログラミングできるだろ。
あえて「プロセス間通信」を意識して扱う必要なんてないんだよ。
別にOSを作るわけじゃないんだから。
つーかプログラム書いた事もなさそうだし、どっか他行って勉強してきて。
もうね、ここで続けられると邪魔だから消えろ。
464:デフォルトの名無しさん
04/09/24 17:38:49
全然素人なんだけど、WindowsってOSの使用するスタック領域と
アプリケーションプロセスの使用するスタック領域は連続しているの?
連続しているからスタックを保存すれば継続が補足できると言う前提で
議論しているみたいだけど、OS側に制御が渡った瞬間、別のプロセス空間の
スタック領域にスイッチする場合、どう考えてもOS側の継続を制御するのは
無理のように思えるけど。。
465:デフォルトの名無しさん
04/09/24 17:59:39
>>464=461
全部間違ってる
もう引退時じゃね?
LISPには柔軟な頭が必要なのよ
466:デフォルトの名無しさん
04/09/24 18:06:09
> ・OSからウィンドウの属しているスレッドのメッセージキューに
> メッセージが送られる.(ここでプロセス間通信)
PostMessage,SendMessageは
・他プロセスの場合は最初に該当するスレッドの保有するメッセージキュー領域を
メモリマップドファイルを使って共有し、データ書き込み。
・同一プロセス、他スレッドの場合は受信スレッドのメッセージキューに直接書き込み。
・同一スレッドなら、コールバックの直接呼出し。
こんな感じか?
467:464
04/09/24 18:11:17
一応いっておくけど、461とは別人です。
>>425みてもわかるように、OS側の継続がアプリケーションと
同じスタックに乗っている前提で話してるよね?
違うのかな?
468:デフォルトの名無しさん
04/09/24 18:11:50
>>463
反応するのも馬鹿らしいが,
メッセージキューってのは立派なプロセス/スレッド間通信の一種.
あと,この部分は別にブラックボックスにはなってない.むしろ基礎の基礎.
>>464
> OS側の継続を制御するのは無理
これは正しい.
> スタックを保存すれば継続が補足できると言う前提で議論している
こっちは×.最終的にスタックを元の状態に戻してやれば
Schemeインタプリタ側では好き勝手にいじってもいいよねー,って話.
たぶん.
469:464
04/09/24 18:15:44
>>468
コールバックは常に同一プロセス内から直接呼び出されるのなら、
スタックコピーで制御は戻りそうなんだけど、私が疑問に思ったのは、
コールバックを渡すOS側は同じプロセス空間で動いてないような気が
するんだけど。あてずっぽうですが。
470:デフォルトの名無しさん
04/09/24 18:16:57
>>458
URLリンク(www.google.co.jp)
R5RS partial continuaionに該当するページが見つかりませんでした。
URLリンク(www.google.co.jp)
scheme partial continuaionに該当するページが見つかりませんでした。
>>462
規格とは関係ないみたいよ?
もちろん部分継続も問題ないし。
いったい何を危惧してるのかね。
ちゃんと継続を理解してる人って少ないの?
471:デフォルトの名無しさん
04/09/24 18:19:46
>>464
スレ違いな質問繰り返してんじゃねーよ
デバッガ使って自分で確かめろ
ミミよりウザイ
472:464
04/09/24 18:20:40
Schemeインタプリタ自体は同一プロセス内で動いてるから、
スタックコピーで継続が戻るのは当たり前だと思うけど、
Schemeインタプリタとは異なるプロセスの継続も補足できるの?
473:デフォルトの名無しさん
04/09/24 18:21:27
>>469
メッセージキューにメッセージを置くのはOS側(もちろん違うプロセス空間で動いてる)だけど,
メッセージを取り出すのは自分なので問題ない.というか,別に違うプロセス空間から
呼び出されても問題ないと思うけど.
>>470
ミミがやりたいのは部分継続じゃないの? ってことだと思う.
474:464
04/09/24 18:24:37
>>473
ああ、ここでコールバックって言ってるのは、あくまでも
イベントキューから自分で読み出して関数を呼ぶイベント駆動
プログラミングのことなんだね。
違うものを想像してたよ。
475:デフォルトの名無しさん
04/09/24 18:25:26
>Schemeインタプリタとは異なるプロセスの継続も補足できるの?
で き ま せ ん
なあ、その電波な質問はどっからやってくるんだ?
476:464
04/09/24 18:26:20
>>475
言葉のすれ違いと思ってくんなまし。
477:デフォルトの名無しさん
04/09/24 18:26:43
つーか試しもしないで質問ばかりする464は不要な人材
478:ミミ
04/09/24 18:46:38
こんにちは。
昨日は遅くまでありがとうございます。
細かい議論はあるかもしれませんが、
おおまかなアイデアは理解していただけたようですね。
私は部分継続を行いたいのではなくて、
コールバックの検問所を作りたいということです。
図にまとめてみました。
479:ミミ
04/09/24 18:47:08
■従来のコールバックの実装
┌─┐
│ │ ┌──┐
│ │ ┌┘ │
│ CbA├─┘ │
OS │ ├─┐ ContA │
側 │ │ └┐ │
│ │ └──┘
│ │ ┌──┐
│ │ ┌┘ │
│ CbB├─┘ │
│ ├─┐ o--───ここから ContA を呼ぶと
│ │ └┐ │ CbA から出て行ってしまう。
└─┘ └──┘ これは破綻する。
480:ミミ
04/09/24 18:47:28
■検問所式コールバックの実装
┌─┐
│ │
│ │ CbA ┌───┐
│ │ ┌─┘ │
│ ├─┼─┐ ContA │
OS │ │ │ └───┘
側 │ ⇔ │
│ │ │ ┌───┐
│ ├─┼─┘ │
│ │ └─┐ o--─── ここから ContA を呼んでも
│ │ CbB └───┘ OS 側に正しく戻ってくれる。
│ │
└─┘
コールバックは必ず検問所(⇔)を通して呼び出されるし、
検問所を通して戻る。検問所を通して戻るときは、
必要があればスタックの回復を行ってくれる。
したがって、Scheme 側では継続とコールバックの関係を
気にしなくてよい。
481:ミミ
04/09/24 18:49:37
■従来のコールバックの実装
┌─┐
│ │ ┌──┐
│ │ ┌┘ │
│ CbA├─┘ │
OS │ ├─┐ ContA │
側 │ │ └┐ │
│ │ └──┘
│ │ ┌──┐
│ │ ┌┘ │
│ CbB├─┘ │
│ ├─┐ o--───ここから ContA を呼ぶと
│ │ └┐ │ CbA から出て行ってしまう。
└─┘ └──┘ これは破綻する。
482:ミミ
04/09/24 18:50:32
あれれ、うまく表示されませんねぇ。。。
483:ミミ
04/09/24 18:54:26
■従来のコールバックの実装
┌─┐
│ │ ┌──┐
│ │ ┌┘ │
│ CbA├─┘ │
OS │ ├─┐ ContA │
側 │ │ └┐ │
│ │ └──┘
│ │ ┌──┐
│ │ ┌┘ │
│ CbB├─┘ │
│ ├─┐ o--───ここから ContA を呼ぶと
│ │ └┐ │ CbA から出て行ってしまう。
└─┘ └──┘ これは破綻する。
484:デフォルトの名無しさん
04/09/24 18:55:39
もういいよ・・・
なんとなくわかったから
書き込みの練習は専用板があるからそっちでやってくれ
URLリンク(aa5.2ch.net)
485:デフォルトの名無しさん
04/09/24 19:18:16
だから、具体的にどういう場面で使いたいのよ?
それは継続でなければならないのか?
486:デフォルトの名無しさん
04/09/24 19:20:13
UNIXっぽくない用途だって。
487:ミミ
04/09/24 19:31:23
>>485
> だから、具体的にどういう場面で使いたいのよ?
今のところ、特に使い道というものは考えていないです。
コールバック ベースの Scheme コードを書く場合、
Gauche のように継続に何らかを制限をつけるという方法もありますが、
検問所方式で常に安全を確保するという方法もあるのでは、
というだけです。
もう少しアイデアを膨らませたら、何か面白いことができるかもしれません。
Scheme 実装を書きながら、おいおい考えたいと思っています。
488:デフォルトの名無しさん
04/09/24 19:35:08
案の定何も考えてないのに非現実的なものを想定して時間を無駄にしてただけかよ
アホくさ
489:ミミ
04/09/24 19:37:58
>>448
そんなことはありませんよ。
どんな小さなアイデアも、大きな発明に結びつく可能性があるって、
どこかの発明家が言っていましたよ。
Windows 専用 Scheme で実現したい機能とかありましたら、
みなさんのご意見もお聞きしたいです。
面白そうだったら実装したいと思います。
490:デフォルトの名無しさん
04/09/24 19:52:13
RS232Cに継続ベースで送受信
491:ミミ
04/09/24 19:57:05
> RS232Cに継続ベースで送受信
ええ?これはどういうことですか?
492:デフォルトの名無しさん
04/09/24 19:58:21
なぜかここって学習能力のないUNIX知障が常駐してるね。
何故?
ここには何もありませんよ~?
493:デフォルトの名無しさん
04/09/24 20:03:36
「知障」だの「全部間違ってる」だの言うだけで具体的なことを
何一つ言えない威勢のいいやつが一人居るなw
おれ? まあ、おれもそうかな・・・
494:デフォルトの名無しさん
04/09/24 20:09:03
>>489
そういうのは、まずできることをやってから言うもんだよ。
技術的知識やノウハウがなきゃ、せっかくのアイデアもその価値を正しく見極めることができず、
多大な時間とコストをかけて実装したのに実はもっと簡単でいい解法があった、なんてことになりかねない。
そうでなくても、モノが無いのに口先だけの人が好かれやすいとは思えないし。
495:デフォルトの名無しさん
04/09/24 21:00:54
>>494 いいじゃん。いずれ実装が出れば白黒はっきりつくんだしさ。
実装がなきゃ評価できないってんなら黙ってればいい。
漏れは、>>480 で言っているのが部分継続とどう違うのか
よくわからないんで、これ以上はコードで説明してもらいたい
(仮想OSを使ったSchemeコードで構わない) と思うけど。
コールバックで捕まえる継続は、検問所までの部分継続だと
するだけでちゃんと動くんじゃないの、ってことね。
496:デフォルトの名無しさん
04/09/24 21:18:25
>>480
URLリンク(www.ipsj.or.jp)
これがズバリかな?
個人的には,
> Scheme 側では継続とコールバックの関係を気にしなくてよい
とは思えない.
完全な継続とコールバックまでの部分継続が暗黙のうちに
すり替えられるのはこわい…というか,常に意識していなければ危険だと思う.
call/ccとは別の名前で実装するんなら問題ないかな?
>>495
コールバック時に暗黙に行うって所がポイントなんじゃない?
俺は上述のようにデメリットが大きいと思うけどね.
497:デフォルトの名無しさん
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:デフォルトの名無しさん
04/09/24 23:09:41
そういや昔glutのインターフェースが無茶苦茶いいかげんな事に
気付いて使う気なくしたんだった。
501:デフォルトの名無しさん
04/09/24 23:20:57
ここを見る限りだと成功している人がいるみたいなんだけど・・・
やり方がわからん
URLリンク(www.kauda.jp)
502:デフォルトの名無しさん
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:デフォルトの名無しさん
04/09/25 12:43:57
>>504
OpenGLパッケージをインストールすれば入ってくるが。
506:デフォルトの名無しさん
04/09/25 18:22:47
こういう話はうまくいったバージョン書いてくれないとダメなんじゃない?
まあcygwinて適当なftpから適当なバージョンのアーカイブ引っ張ってくるから
うまくいく組み合わせの特定ってかなり難しいとは思うけどね。
つまりcygwinで同一環境にするにはインストールログが必要なわけ。
こんなシステムだからcygwinは不安定って言われるのさ。
507:デフォルトの名無しさん
04/09/25 18:53:06
\ ∩─ー、 ====
\/ ● 、_ `ヽ ======
/ \( ● ● |つ
| X_入__ノ ミ そんなエサで俺様がクマ―!!
、 (_/ ノ /⌒l
/\___ノ゙_/ / =====
〈 __ノ ====
\ \_ \
\___) \ ====== (´⌒
\ ___ \__ (´⌒;;(´⌒;;
\___)___)(´;;⌒ (´⌒;; ズザザザ
(´⌒; (´⌒;;;
508:498
04/09/25 20:28:31
>>506
色々試行錯誤したんですが、上手くいきませんでした
OpenGLのバージョンを落とさないといけないっぽいことは
わかったのですが・・・
力尽きました
509:デフォルトの名無しさん
04/09/25 23:57:34
なんかcygwinのgaucheって不安定じゃない?
何かすぐにフリーズする
510:デフォルトの名無しさん
04/09/26 00:36:44
coLinuxを使えば?
511:デフォルトの名無しさん
04/09/26 01:14:43
それって解決になってない気が。
それよりVC++やMingwで動かす話があったはずだけど。
512:デフォルトの名無しさん
04/09/26 03:55:19
>>511
gauche-gl の話しでしょ?
もしかして VC++で使えるって話し?
513:デフォルトの名無しさん
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:デフォルトの名無しさん
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
04/09/26 05:31:02
あ、よくみたら同じことやってる、おれってばか(;´Д`)
もう寝ます…
517:ミミ
04/09/26 06:07:28
>>514
UNIX だけならそれでいいと思う。
Win だとドライブ名がないとだめだね。
("/" "C:" "WinNT" . "Notepad.exe")
絶対パスと相対パスはどう区別するのかな。
518:ミミ
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 を使えるそうなのですが・・・
URLリンク(www.rivendell.ws)
これって使うプロジェクトの直下において
使えばよろしいの?
というかmzSchme,PLT Scheme DrScheme って
なんで名前が3つあるんですかね?関係性が
わからないんですけど・・・
521:ミミ
04/09/26 23:29:19
>>529
> mzSchme,PLT Scheme DrScheme って
MzScheme は Scheme 実装のコア部分
DrScheme は統合開発環境
PLT Scheme は全体の総称かな。たぶん。
522:デフォルトの名無しさん
04/09/26 23:32:42
>>521
お前のキーボードにテンキーついてないだろ
HHKだから俺のにもついてないけどさ
523:ミミ
04/09/26 23:38:14
え、なんか鋭いですね。。。
探偵さんですか。。。
524:デフォルトの名無しさん
04/09/27 00:21:38
>>521
そういうことですか、サンクス。
>>522
え、なんでそうなるの?
525:デフォルトの名無しさん
04/09/27 00:26:56
ふつーは数字入力でわざわざテンキーまで手をのばしたりしないよ。
526:デフォルトの名無しさん
04/09/28 10:43:06
ふつーはレス番号を直接入力したりしないよ。
527:デフォルトの名無しさん
04/09/28 11:15:44
ふつーの人は2ちゃんねるなんてやらないよ
528:デフォルトの名無しさん
04/09/28 20:13:20
ふつーのひとはLispなんてやらないよ。
529:デフォルトの名無しさん
04/09/28 20:59:04
普通のやつらの上を行け
530:デフォルトの名無しさん
04/09/28 22:39:02
そんな実力はありません
531:デフォルトの名無しさん
04/09/29 04:52:42
(ノーマル? 普通のやつ) ; => #t
(ノーマル? (上 普通のやつ)) ; => #f
(ノーマル? (下 普通のやつ)) ; => #f
(アブノーマル? 普通のやつ) ; => #f
(アブノーマル? (上 普通のやつ)) ; => #t
(アブノーマル? (下 普通のやつ)) ; => #t
(equal? (上 普通のやつ) (下 普通のやつ)) ; => ?
532:デフォルトの名無しさん
04/09/29 04:55:37
(ノーマル? 普通のやつ) ; => #t
(ノーマル? (上 普通のやつ)) ; => #f
(ノーマル? (下 普通のやつ)) ; => #f
(アブノーマル? 普通のやつ) ; => #f
(アブノーマル? (上 普通のやつ)) ; => #t
(アブノーマル? (下 普通のやつ)) ; => #t
(equal? (上 普通のやつ) (下 普通のやつ)) ; => ?
533:デフォルトの名無しさん
04/09/29 07:15:56
だが気を付けたまえ
534:デフォルトの名無しさん
04/09/29 23:24:51
アブノーマルの行きつく先はAranskだ
535:デフォルトの名無しさん
04/09/29 23:54:01
MIT Schemeというので自作のDLLを呼びたいのですが
なかなかそういうサンプルソースが見つかりません
FFIとかで検索してみたのですが、なんか良いサンプル
ないですかね?付属のドキュメントは何か概要ぐらいしか
書いていない感じなんです
536:ミミ
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:デフォルトの名無しさん
04/09/30 01:04:39
>>536
見ました
それだけみてもよくわかんないんです
そもそもエラーが出るし・・・
;Syntactic keyword may not be used as an expression: define
とか
538:デフォルトの名無しさん
04/09/30 23:51:48
いつのまにかgaucheがmingwでコンパイルできるようになっとる。
前はできんかったのに。mingwをバージョンアップしたからだろうか。(--;
539:デフォルトの名無しさん
04/10/01 00:12:12
shiroさんが業を煮やしてちょこっと進めた
540:デフォルトの名無しさん
04/10/01 02:09:58
おぉーーー
541:デフォルトの名無しさん
04/10/01 08:56:57
ACLってVisualStudioより高いですか。
ぐぐってもわからないってことは、相当な値段でしょうけど、、
542:デフォルトの名無しさん
04/10/01 10:32:44
>>541
前スレからコピペ。
----------------------------------------------------
715 :デフォルトの名無しさん :04/06/28 23:09
ACL アカデミックとかじゃなくて普通に商用に使うために買うといくらするの?
716 :デフォルトの名無しさん :04/06/29 02:30
このスレの Part 8 で紹介されていた URL に $599 という価格があるんだけど、
URLリンク(www.franz.com)
これって、アカデミック・ディスカウントなの?
そうは思ってなかった。
教育関係なら、ここからさらに割り引かれるのかと思ってました。
ご存知の方おられませんか?
543:デフォルトの名無しさん
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:デフォルトの名無しさん
04/10/01 10:40:04
flatline 氏の『on Lisp』翻訳、24/25章まで進んだようです。いよいよProlog。
URLリンク(user.ecc.u-tokyo.ac.jp)
ちなみに、進振りで志望に通ったらしい。おめでとうございます。
545:541
04/10/01 12:01:02
>>542 >>543
あ、ありがとうございます。
WindowsでProfessionalだと、75万円ですか、、そもそも比較の対象ではないですね ... orz
しょーがない自分で作るか(嘘)
546:デフォルトの名無しさん
04/10/01 13:47:54
>>539
shiroさんにもWindowsの良さをもっと解って欲しいな
バイナリ配布形式に対応してActivePerlみたいにsetup.exeから
インストール出来るようになればユーザーかなり増えると思ふ
まあそれに比例してDQNも増えるんだけどね・・
547:デフォルトの名無しさん
04/10/01 14:45:30
>>546
Window$かよ。( ゚д゚)、ペッ
548:デフォルトの名無しさん
04/10/01 15:02:20
しまった。
ここにはUNIX馬鹿厨がいるんだった。
549:デフォルトの名無しさん
04/10/01 15:02:52
別にWindowsが(他の実用レベルのOSと比較して)悪いとは思わないが,
>>546から激しくDQN臭がするのは確かだ.
550:547
04/10/01 15:03:49
>>548
MACですが何か?
551:デフォルトの名無しさん
04/10/01 15:04:02
やっぱDQNだった….
552:デフォルトの名無しさん
04/10/01 15:15:06
>>549-551
相変わらず反応早いですね。
553:デフォルトの名無しさん
04/10/01 17:24:55
今MIT Scheme落としてるんだけど、これPLTと比べてどう?
554:デフォルトの名無しさん
04/10/01 17:25:01
とまあこのような連中が増えるという例でした。
555:ミミ
04/10/01 18:28:12
>>545
ACL Professional は 2 年間レンタルで
5, 6 万円だって聞きました。
556:デフォルトの名無しさん
04/10/01 20:40:05
ACLってそんなにいいの?
どんな最適化するのか興味ある~
ところでfranz社ってサ、LISP以外手を出さんの?
例えば、MLとかprologトカサ
あ?そんなLISPがええか?ええのんか?
どないやねん
557:デフォルトの名無しさん
04/10/01 20:44:28
Borland Turbo Prologという製品が昔あったと言う。
末路は (ry
558:デフォルトの名無しさん
04/10/01 20:47:40
>>557
ネタかと思ったら本当にあったのね。
正直、驚いた。
トリビアスレ向きだな。
559:デフォルトの名無しさん
04/10/01 20:53:02
Microsoft Visual L# 2005
Borland LBuilder 2005
とか出るといいのか?
560:デフォルトの名無しさん
04/10/01 21:08:47
某国の場合
Pascal→Delphiみたいな名前置換があるやも
いやむしろナイスな銘々してくれって感じ?
オタ向け言語から一気に若者の主流に返り咲くか?
そういやcurlてどうよ?
本見た感じでは、うーん・・・
561:デフォルトの名無しさん
04/10/01 21:20:45
なんか短期間で書き込んでる変な人がいますね。
562:デフォルトの名無しさん
04/10/01 22:44:05
ACL Professionalの個人向け2年間$599リースは日本でもやってんの?
間に挟まってるぼったくり屋さんが黙って無さそうなんだけど。
AllegroPrologは7で入るんだっけ?それとも別製品か?作ってるのは知ってるけど
どんな製品ラインナップになるのかまでは知らん。
563:デフォルトの名無しさん
04/10/02 00:01:18
CLHS は float に inf や NaN を求めていないんですね.
これらが無いと困りませんか?
近日規格策定予定だったりしますか?
564:563
04/10/02 00:04:09
おっと,clisp の impnotes で触れられているのをまだ見てなかった.スマソ。
565:ミミ
04/10/02 02:06:02
>>562
>ACL Professionalの個人向け2年間$599リースは日本でもやってんの?
Franz の営業さん (日本人) から聞きましたよ。
ただ、リースの場合のテクニカルサポートは英語のみだそうです。
566:デフォルトの名無しさん
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ならこういう具合であるようなのですが。
URLリンク(www.shiro.dreamhost.com)
568:デフォルトの名無しさん
04/10/02 17:45:30
>>567
あのな、C言語でどうやって使うかを考えろ。
それわかったらGaucheでも使えるだろ。
569:デフォルトの名無しさん
04/10/02 20:27:32
わかった!Pythonインタープリタを実装するんだね!!
570:デフォルトの名無しさん
04/10/02 23:57:10
おれもわかった!PHP を Scheme で書きなおすんだ!
…つか PHP なんてなんで使いたいんだ?
Gauche で書けよ HTML も
571:デフォルトの名無しさん
04/10/03 01:23:46
チ○コかきたい
572:デフォルトの名無しさん
04/10/03 13:30:50
MIT schemeがアンインストールできないんですけど・・・何なんだよヽ(`Д´)ノ
573:デフォルトの名無しさん
04/10/03 13:38:12
λ教は一度入ったら、
もう二度とやめれません
574:デフォルトの名無しさん
04/10/03 13:48:31
信者の社会復帰を支援するツールとしてPythonが用意されています
575:デフォルトの名無しさん
04/10/03 14:00:08
Pythonなんてswitch文さえまともに使えない言語はダメ
576:デフォルトの名無しさん
04/10/03 15:07:31
しかし豊富なライブラリは欲しいよぅ(;´Д`)
577:デフォルトの名無しさん
04/10/03 15:26:09
では parrot 待ちだな
578:デフォルトの名無しさん
04/10/03 17:26:11
parrotでみんな幸せになれますか?
579:デフォルトの名無しさん
04/10/03 17:26:54
schemeでRS232-Cを制御しようと思ったらどうすればよいのでしょうか。
580:デフォルトの名無しさん
04/10/03 17:47:41
>>579
>>568
581:デフォルトの名無しさん
04/10/03 17:52:04
初心者な質問ですみません。
よろしくお願いします。
CLOSで引数を2つ取るメソッドを定義した場合、
それ以降は引数の数が異なる同名のメソッドの定義(オーバーロード)
って不可能なのでしょうか?
582:デフォルトの名無しさん
04/10/03 18:52:54
>>579
termiosインタフェースがある処理系なら
Schemeオンリーでできないか? Gaucheとか。
ioctlが叩けないからだめかな。
583:デフォルトの名無しさん
04/10/03 20:47:03
>>581
普通にできるだろ
584:デフォルトの名無しさん
04/10/03 23:17:18
Unix でのおすすめの scheme 実行環境は何ですか?
585:デフォルトの名無しさん
04/10/03 23:21:37
>>584
guileが標準的
586:デフォルトの名無しさん
04/10/03 23:23:47
>>585
本気か?
いや俺も標準的になって欲しいとは思ってるけど…
587:デフォルトの名無しさん
04/10/03 23:41:07
>>586
ここではそれが良いって書いてあるけれど…
URLリンク(www.sra.co.jp)
588:デフォルトの名無しさん
04/10/03 23:41:39
GNU ソフトウェアの標準の拡張用インタプリタは GUILE である.
GUILE はScheme 言語の実装である
(Scheme は Lisp の非常にきれいで簡潔な方言である).
URLリンク(www.gnu.org)
われわれは他の「スクリプト言語」例えば Perl や Python で書かれたプログラムを
拒絶することはないが, GUILE を使うことは GNU システム全体の一貫性のためには
非常に重要である.
589:デフォルトの名無しさん
04/10/03 23:47:25
guile ってどう読むの?
590:デフォルトの名無しさん
04/10/03 23:48:48
>>588
それは知ってるけど、実際はまだろくに使っていないと思っているんだけど…
おれが無知なだけだったらスマン、例を教えて欲しい
591:デフォルトの名無しさん
04/10/03 23:51:42
>>590
いや、私もどこで使われているか知らない。
同様の用途ではPerlかシェルを良く使うと思うけれど。
でも標準が合った方が良いのは確かでしょ?
乱立しても、いくつの処理系をインストールしたくないし。。
>>589
guile=ぐいるって読んでいるけれど、どうだろう。
592:デフォルトの名無しさん
04/10/03 23:51:57
guileで書かれたスクリプトって何かあるの?
あまり見たことないような…
593:デフォルトの名無しさん
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:デフォルトの名無しさん
04/10/03 23:56:04
いつになったら”まだ”が取れるんだろう。
永遠にこない気がしてならない。
そもそも「標準の拡張用インタプリタ」とはなんぞや?
何時使うんだよ。
Linuxのインストーラーはpythonで書かれている様だし。
使われないで標準もあったもんじゃない。
そもそもSCMをベースにしておきながらあの遅さはなんなんだ?
Cにトランスレートすりゃあいいってもんでもないだろ。
595:デフォルトの名無しさん
04/10/03 23:58:45
ガイルでしょう
596:デフォルトの名無しさん
04/10/04 00:01:51
URLリンク(www.google.co.jp)
URLリンク(www.google.co.jp)
597:デフォルトの名無しさん
04/10/04 00:06:59
URLリンク(www.google.co.jp)
URLリンク(www.google.co.jp)
598:デフォルトの名無しさん
04/10/04 00:09:11
>>596
その検索結果には明らかに>>593のガイルが含まれているよ
599:デフォルトの名無しさん
04/10/04 00:10:37
lisp ガイル 7件
lisp guile ガイル 3件
guile ガイル 303件
ノイズばっかだな
600:デフォルトの名無しさん
04/10/04 00:18:45
>>598
綴として読むのだからどのガイルでも良いと思う。
601:デフォルトの名無しさん
04/10/04 00:19:39
lispじゃ引っかかんないんじゃない?
scheme
602:デフォルトの名無しさん
04/10/04 00:22:03
gaucheよりguileの方がいいところって何?
603:デフォルトの名無しさん
04/10/04 00:22:52
gacuhe-gl のマンデルブロートのサンプルを実行したいんですけど
load するだけじゃだめですよね
実行して画面にだしたいんですけどどうやったらよいのでしょう?
604:デフォルトの名無しさん
04/10/04 00:22:56
URLリンク(www.google.com)
URLリンク(www.google.com)
605:デフォルトの名無しさん
04/10/04 00:23:08
>>602
GNUのお墨つき。
606:デフォルトの名無しさん
04/10/04 00:23:55
そこで Pika Scheme ですよ
607:デフォルトの名無しさん
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:デフォルトの名無しさん
04/10/04 01:09:19
gimpとか
609:デフォルトの名無しさん
04/10/04 01:13:37
その中だとbiglooがよさそう
610:デフォルトの名無しさん
04/10/04 02:04:45
guileはGNU/LINUXならほぼ最初から入っているので、悪い選択じゃない。
611:デフォルトの名無しさん
04/10/04 02:08:11
>>610
貴様はguile使ったことあるのか?
guile常用してるやついるの?
何に使うのか知らんが。
612:デフォルトの名無しさん
04/10/04 02:27:24
scheme処理系一覧っぽいのが出てきたところでふと思い出したのですが、
リアルタイムで経緯をご存知の方がいたらYale Tがどんな末路を辿ったのか教えて
いただきたく。全然話題にも上らないんでマイナーな本なんだろうと思うけど
Slade先生のObject-Oriented Common LispでLisp使い始めたのでちと興味あり。
613:デフォルトの名無しさん
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:デフォルトの名無しさん
04/10/04 08:30:22
既に知ってるかもしれんが、T についての文書ってこれくらいしか知らんなあ。
Olin Shivers: History of T
URLリンク(store.yahoo.com)
615:デフォルトの名無しさん
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:デフォルトの名無しさん
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:デフォルトの名無しさん
04/10/05 12:32:40
>>616の質問も、>>617の回答も、まったく意味がわからんのは俺だけ?
619:デフォルトの名無しさん
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 (´∀`) 'マターリ)
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 (´∀`) 'マターリ)
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:デフォルトの名無しさん
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:デフォルトの名無しさん
04/10/05 15:14:42
>>625
やれやれ... それは君への宿題とするので来週までに解いてきたまえ。
それと、メール欄に sage と書きたまえ。
627:デフォルトの名無しさん
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 (´∀`) 'マターリ)
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:デフォルトの名無しさん
04/10/05 22:06:35
>>614
Tについてのドキュメントって異様に少ないですよね。普通に失敗したプロジェクトだったの
でしょうか。
>>615
継続スタイルはUCWのウリみたいですが、フレームワークの他の部分はどんな感じですか?
副作用バリバリの手続きでHTML生成する設計になってたりしたらイヤかも。
beseのMLに開発者がポストしてましたが、パフォーマンスが気になるくらい遅いですか?
もう少し詳細な使用感を語っていただけるとうれしいです。参考にするので。
630:デフォルトの名無しさん
04/10/05 22:52:06
Tは失敗というか、誰もメンテしなかった・できなかった結果のような
386以降で書かれてたなら誰もが欲しかっただろうし
631:デフォルトの名無しさん
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
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:デフォルトの名無しさん
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:デフォルトの名無しさん
04/10/05 23:17:32
(if (pair? (car file))の内側に(foo-iterがあるけど
(foo-iterの内側に(if (pair? (car file))を持っていったほうが
すっきりすると思う。
635:631
04/10/05 23:34:12
>> 633
まったく、おっしゃる通りでした。
>> 634
...暫く考える...
なるほど。なんとなくイメージできました。勉強になります。
他の人のと見比べるとやっぱり、map とかも勉強しないとだめですね。
636:デフォルトの名無しさん
04/10/06 00:45:10
>>631
SICPの何ページですか。俺の勉強したいので。
637:デフォルトの名無しさん
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
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:デフォルトの名無しさん
04/10/06 01:59:12
foo-entryにresultはいらんな。
640:デフォルトの名無しさん
04/10/06 02:05:50
foo 本体は(foo-entry 'hoge "" l)でいいな。
641:デフォルトの名無しさん
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:デフォルトの名無しさん
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
04/10/06 23:21:02
>>639 >>640
確かにそうですね。
>>641
メリットは特にないですね。
高階関数に馴染みがなくてあれ以外の実装を
思いつかなかったというのが真相だったりします。
やろうと思えば引数を増やして全て末尾再帰にできるかも
しれませんが、やたら読みにくいソースになるでしょうね。
644:デフォルトの名無しさん
04/10/07 23:52:58
埋め込み言語の例というのが見てみたいんだけど,
onlisp 以外にもなにかありませんか?
645:デフォルトの名無しさん
04/10/08 00:21:31
>>644 これとか?
URLリンク(www.shiro.dreamhost.com)
これはちょっと埋め込みとはちがうけど、S 式で HTML を書くというアプローチ
URLリンク(cl-www.msi.co.jp)
URLリンク(cl-www.msi.co.jp)
646:645
04/10/08 00:28:51
あ、ちがった、埋め込み言語ってそういう意味じゃないのね。
たとえば Lisp/Scheme で書かれた LR パーザジェネレータとか。
腐るほどありそうだな。今、さっと見つかったのはこんなの。
URLリンク(www.informatik.uni-freiburg.de)
647:644
04/10/08 01:00:10
>>646
ども.
たしかに数はたくさんありそうなんですけど,うまく見つけられなくて.
ここのリンク先のはソースもあるんで,
schemeは使ったこと無いけど,本とにらめっこしながら読んでみます.
他にもいい例があればお願いします.
648:デフォルトの名無しさん
04/10/08 01:13:04
LISPはちょっとかじった程度でよくわかってないのですが
質問させてください
たとえば、Cでネットワークゲームを作るときに
なんか処理したかったら、適当なデータ構造に
情報を埋め込んで送信して、受信側でデータを解釈→処理
とかなりますよね
LISPのevalとかを使うと、プログラム本体がデータ構造もかねるから
動作させたい処理のS式をそのままリテラルとして送信して
eval させて動作させてしまう、とか出来るんでしょうかね?
649:デフォルトの名無しさん
04/10/08 01:54:37
Lisp に限らず、eval のある言語ならだいたいできるんじゃないのかな。
650:デフォルトの名無しさん
04/10/08 02:08:45
eval is evil.
651:デフォルトの名無しさん
04/10/08 07:33:19
でもそういう設計はよくないけどな。
ネットワーク越し(じゃなくても)で通信するときに相手から送られてくるものを
信用するというのは危険すぎる、ということを歴史は教えている。
652:デフォルトの名無しさん
04/10/08 08:02:59
>>651
アプレットやSOAPと基本は同じでしょ?
用はセキュリティーの確保の仕方の問題だと思われ。
653:デフォルトの名無しさん
04/10/08 09:32:56
>>648
evalも結局のところは、「受信側でデータを解釈→処理」してるだけ
なんだけどね。「解釈→処理」の処理系が最初から用意されていると
いうだけで。
汎用性が高い、本体と同じ言語で書ける、といった側面はそのまま
メリットにもデメリットにもなるし。
654:デフォルトの名無しさん
04/10/08 10:17:45
scheme の eval みたいに環境を指定できれば比較的手軽にセキュリティー確保できるね
655:デフォルトの名無しさん
04/10/08 11:19:34
shiro さんの2004.10.07の文章で、
URLリンク(www.shiro.dreamhost.com)
以前から Lisper としての適性に関係があるとして、時々話題になっている、
アスペルガー症候群・高機能自閉症の、簡易テストが紹介されている。
「平均は16.4ポイントで、 32ポイント以上のうち8割はautism related disorder
だそうだ。私(shiroさん)は31ポイントだった」そうです。
URLリンク(www.wired.com)
自分でやってみたところ、慎重に回答したのに38ポイントだった。
しかし自分はヘタレ Schemer。ぜんぜんLisp能力に比例して無いじゃん…。
656:デフォルトの名無しさん
04/10/08 12:14:36
このテスト、人間関係が苦手である、うまく行っていないという項目が多いな。
だから、
・ Lisper として能力が高い
→・他言語のプログラマとしても成功する
→・周囲から尊敬を集める
→・人間関係が良くなる
→・このテストのスコアが下がる
Lisper としての能力と、このテストのスコアには、こういう負の相関が
働いている気がするのだが。
657:デフォルトの名無しさん
04/10/08 12:48:17
心理テストに気休め以上の意味があるとは思わん。
658:デフォルトの名無しさん
04/10/08 17:18:30
>>655
辞書引きながらやってみた。 24ポイント。
微妙に低くてチョトくやしい (w
659:655
04/10/08 18:40:48
念のために言うけど、このテストはまったく当てにならないと思うよ。
『on Lisp』をいつまでも読み進められない私がそれは保証できる。
だけどなんとなく、ほかの人の点数も知りたいのう。
冷やかしでトライしてくれた人、他にもいたら書き込んでください。
おながいします。
660:デフォルトの名無しさん
04/10/08 19:26:09
34。Lisp は好きだけど能力があるのかどうか……
661:デフォルトの名無しさん
04/10/08 19:27:47
emacs で動く scheme 実行環境はありますか?
662:デフォルトの名無しさん
04/10/08 19:51:11
>>659
自閉症スペクトラムのテストとしてはそこそこいい出来だと思うが。
親戚男性自閉症率高の趣味の Schemer で、40点。非人間的なものへ
のこだわりと認識能力で点数が出て、直接 Lisp と関係があるわけ
じゃないから。
>>661
M-x run-scheme では不満?
663:655
04/10/08 20:08:14
>>662
自閉症スペクトラムについては、まあ同意です。
自閉症には私も興味を持って、いろいろ調べてみたことがあります。
「当てにならない」と書いたのは、Lisper としての能力と、このテストの関連。
>>661
思い切って guile-emacs を導入するのはどうだろう?
使ったことはないけれど。
664:デフォルトの名無しさん
04/10/08 20:08:44
>>656
・ Lisper として能力が高い
→・でも別にプログラマとしては成功しない
→・周囲からも尊敬は集めない
→・人間関係も良くならない
→・このテストのスコアが上がる
Lisper としての能力と、このテストのスコアには、こういう正の相関が(以下略)
665:デフォルトの名無しさん
04/10/08 20:41:18
感O しないで AC になれなかったので,
せめて lisp で AC に近づこうとしています.
これが妥当な lisp の用途ということでよろしいでしょうか?
666:655
04/10/08 21:32:01
それにしても、当然のように「自閉症スペクトラム」という言葉を使う人も、
やはりこのスレにはいましたか。ポイントも私より上だし。
>>664
私はプログラマとして才能がなかったんで、Lisp を覚えて「普通の奴らに差をつけ」
ようとしたんだけど、Lisper としても才能がなかった。
しかも副作用として、それまでは面白かった Java がつまらなくなってしまった。
自分はダメだったけど、Lisperとして成功できる人なら、他の言語でも成功するのかと
思っていたのに、まさか逆だというのですか?!
>>665
私は感電と Lisp の経験者だけど、現状は前述のとおり。
でもいいのだ。Lisp は面白いから。
きっと Lisp は、ただ面白いためにあるのだ。
才能はさておき、こういうことに興味を持つことには、自閉症傾向は関係が
あるような気がしなくもない。
667:デフォルトの名無しさん
04/10/08 21:59:47
ACよりもSEXPになりたい。
668:デフォルトの名無しさん
04/10/08 22:13:30
この自閉症どもが
669:デフォルトの名無しさん
04/10/08 23:13:31
>>667
sexp が t になるには 8 歳までに (ry
670:デフォルトの名無しさん
04/10/08 23:36:39
∩
( ゚∀゚)彡 sexp!sexp!
⊂彡
671:デフォルトの名無しさん
04/10/09 00:47:43
Lispの才能と体重は正比例の関係があるらしいよ
672:デフォルトの名無しさん
04/10/09 00:51:02
>>671
デブヲタ発見。
673:デフォルトの名無しさん
04/10/09 01:16:40
sexpと体重は正比例の関係があるらしいよ
674:デフォルトの名無しさん
04/10/09 09:57:46
「on Lisp」の日本語版があるって聞いたんだがその本の日本語名ってなに?
'on' も 'Lisp'も一般的すぎて検索してもよくわからない・・・
本じゃなくてどこかのWebページなのか?
675:デフォルトの名無しさん
04/10/09 10:00:05
>>674
>>544
676:デフォルトの名無しさん
04/10/09 10:00:29
>>674
>>544
677:674
04/10/09 10:14:44
おお、サンクス!!
スレの真ん中あたりにあったのか・・・
#こう書くべきかな? (thanx 675 676)
678:デフォルトの名無しさん
04/10/09 11:11:51
>>671
なんとなく,才能は体重の逆数にあるような.
0 Kgで発散しますが,CLHS には inf が無いのでちょっと分かりません.
679:デフォルトの名無しさん
04/10/09 11:55:07
Gauche(ver 0.8.1)でGauche-gtk(ver 0.4.1)
やってるんですけど、
(gdk-font-load)が未定義の値って言われちゃいます。
なんで?