[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 09/01 00:11 / Filesize : 268 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

CommonLisp Scheme Part13



1 名前:デフォルトの名無しさん [2005/05/12(木) 21:44:01 ]
過去スレ
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: pc5.2ch.net/tech/kako/1042/10421/1042167213.html
Part8: pc5.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/
Part11: pc5.2ch.net/test/read.cgi/tech/1091456033/
Part12: pc8.2ch.net/test/read.cgi/tech/1100229366/

関連リンクは>>2-10あたり

331 名前:デフォルトの名無しさん mailto:sage [2005/06/13(月) 22:03:28 ]
>>325
まじか。
中西(正和)先生も少し前に亡くなったが、今度は後藤先生か。

332 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 10:56:27 ]
このスレでもおなじみの新山ゆうすけ氏が、Common Lisp の仕事を始めたらしい。
tabesugi.net/memo/2005/62.html#111413

> しかし相手はそこそこ有名なLisp ハッカーであり、習うべきことは多い。
> Lisp で仕事できる機会なんてそんなにないと思う。

などと書いている。今まで Lisp の悪口ばかり書いていたのになあ。

と思ったら、今日はさっそく Lisp の悪口であった。
tabesugi.net/memo/2005/62.html#131404

やっぱり新山氏はそう来なくっちゃ!


333 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 12:56:36 ]
>>332
なんか有名な人なの?
嫌いな言語使って仕事してるっていう愚痴のようにしか読めんが。

334 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 14:50:02 ]
>>333
NY市立大の院生で、Python や Scheme、OpenSSH の世界ではそこそこ有名な人。
www.unixuser.org/~euske/doc/index.html

Shiro さんが wiliki で取り上げたこともある。
www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?Shiro%3alog%3a2004%b8%e5%c8%be


335 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 15:01:18 ]
>>334
何言ってんの? この人ぜんぜん有名じゃないよ。

336 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 18:25:51 ]
有名かどうかは人それぞれが判断すればいいこと。それより、内容についての
話をしようよ。

Common Lisp のライブラリが、過去互換性のために見通しが利きにくいこと、
package は実用上不可欠なのに、Scheme にはまだ標準がなく、実装依存だと
いうこと、これらはもっともな批判だと思うのだけど。


337 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 19:06:44 ]
ごく一部の日本人で英語が読めない奴限定で有名かも知れんが

>>334
> Python や Scheme、OpenSSH の世界ではそこそこ有名

なんていうような仕事はしとらん。

まあ言ってみればプチ岩谷宏。


338 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 19:08:14 ]
LispはJavaにMLはC#に昇華しましたので、そのようなことを考えること自体無駄です。

339 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 19:36:34 ]
>>336
> Common Lisp のライブラリが、過去互換性のために見通しが利きにくいこと、

確かにそういう面は否定できないが、正直言って慣れてしまったね。

それを言うなら例えば C のライブラリとか UNIX のシステムコールにしたって
「過去互換性のために見通しが利きにくい」と思うし。

誰かが整然とした New Common Lisp を設計したとしても、それを布教するのは
大変だろうなぁ・・・



340 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 20:04:52 ]
Scheme はそういう整然とした Lisp の標準を作ろうとしているわけだが、議
論百出で、いつまでたっても Common Lisp 並のライブラリがそろわない件に
ついて。


341 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 20:12:26 ]
今のペースだと、
あと50年は掛かるな

342 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 20:25:24 ]
C や UNIX の設計のまずいところを一気に作り直そうとした Plan9(Inferno)
も、いつまでたっても実験段階から離陸しないものね。

コンピュータ技術、ひいては技術一般に、いかに市場とのタイミングというも
のが重要か、分かるように思う。


343 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 20:41:53 ]
「技術」の一般論を語るには、まだまだじゃない?
現状と個人の経験なわけで。
このスレには厳密主義が多いかと思った。


344 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 20:47:54 ]
>>338
ちょっと待て、聞き捨てならん。こんな書いてて楽しくないものが、LISP の
昇華物であってたまるかぁっ!

345 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 21:03:17 ]
>>344
昔、Lispの研究をしていた人がSunに行ってJavaを作り、それに対抗したMicrosoftが
MLの研究グループを引き抜いてC#を作ったんだよ。

Lispは特にリサーチプロジェクトなんかには便利な言語だね。 Javaは大規模なプロジェクト
向きかな。 要するに、適材適所で使えば良いかと。

346 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 21:09:40 ]
昇華(しょうか)(Sublimation)

物理学では
  省略・・・

心理学では

 防衛機制の一つ。
 実現不可能な目標・葛藤や満たすことができない欲求から、
 別のより高度で社会に認められる目標に目を向け、
 その実現によって自己実現を図ろうとすること。

 例)かつてアクション映画で活躍したが、
  障害を負ってアクション映画に出演できなくなった→障害者保護団体を設立する


347 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 21:18:09 ]
>>345
本気で言ってるのだとしたら面白すぎる

348 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 21:22:16 ]

数理論理学では
ならば

349 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 21:33:23 ]
>>345
それって、ガイ・スティールのことか?Java はやっぱりジェームズ・ゴスリ
ングのものだと思うのだけどなあ。ゴスリングとビル・ジョイが Java の仕様
でもめたところを、ガイ・スティールがまとめたんだろう。彼は他にもいろん
な言語の仕様に関わってるし。JavaScript とか。

ML とC# の関係は全然知らなかった。ありがとう。




350 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 22:08:05 ]
下らん
ヒント:Java, Delphi, ObjectPascal

351 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 22:15:33 ]
>>349
> 彼は他にもいろんな言語の仕様に関わってるし。

をいをい。Schemeを忘れるなよ。w
時系列で言えば Scheme→Common Lisp→Java の順で手がけている。
もちろんこの順序と言語の優劣は関係ない。
漏れはGuy Steeleの絡んだ言語はすべて好きだよ。

352 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 22:24:29 ]
>>351
初期のJavaの研究会行ったら「私の仕事はGuy L. Steele 仕事ですw」という奴が居て噴いたなぁ。

 Scheme → CommonLisp → StarLisp, C* (ThinkingMachine) → HighPerformanceFortran → Java

のうち、漏れ自身ThinkingMachine以外はやってたw


353 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 22:48:06 ]
C: A Reference Manual を書いたり ECMAScript の標準化を手伝ったりも

354 名前:デフォルトの名無しさん mailto:sage [2005/06/15(水) 00:09:09 ]
ガイ・スティールの手のひらでころがされてる気分になってきた


355 名前:デフォルトの名無しさん mailto:sage [2005/06/15(水) 00:20:44 ]
>>344
反応するなよ

>>349
騙されるなよ

356 名前:デフォルトの名無しさん mailto:sage [2005/06/15(水) 00:31:28 ]
>>345
ダウト

357 名前:デフォルトの名無しさん mailto:sage [2005/06/15(水) 01:21:56 ]
r6rs の作業が始まってから一年半経つけど、あとどのくらい掛かるんだろうか。
UNICODE サポート、例外機構、モジュール機構、構造体辺りが楽しみだ。
モジュールは長く標準化が待ち望まれた機能だしね。

358 名前:デフォルトの名無しさん mailto:sage [2005/06/15(水) 01:28:41 ]
構造体作るから多値はいらないという
多値は受け取ったり受け取らなかったりと、今一不可解なプロトコルと言える
参照ベースな言語では構造体パックが正解なのかもしれない


359 名前:デフォルトの名無しさん mailto:sage [2005/06/15(水) 03:35:45 ]
>>339
そこで Arc ですよ。

>>358
個人的には多値で渡していくやり方は細かいことを気にせずに済んで好きなんだけど、
いまいち現状だと構文上すっきりしないところが多いのも確かですね。
wiliki であった、アリティに応じて返す値の数を変えられるようにする、
ってのは結構面白いなあと思った。問題が色々出て来ちゃうみたいだったけど。

……でもその辺すっきりしたいなら他の関数型言語に転んじゃった方が楽な気が。
どうせ構造体でパックしちゃうなら 1-in 1-out で、型付けも静的な方が楽じゃないですか?



360 名前:デフォルトの名無しさん mailto:sage [2005/06/15(水) 07:09:22 ]
多値で受け取るのも、構造体のアクセッサ経由で値を受け取るのも、
手間は変わらないって考えて良いのかな。

361 名前:デフォルトの名無しさん [2005/06/15(水) 11:25:48 ]
こんな感じかな?

(i) 構造体のコンストラクタが関数の末尾位置にあるときは、構造体
そのものをスタックにアロケートして、
(ii) その関数の呼び出し側で返値(構造体)がエスケープしないなら
そのままスタックの上で使う。

362 名前:デフォルトの名無しさん mailto:sage [2005/06/15(水) 11:37:37 ]
割り込み失礼。スラドに載った。シンボルを HashTable にしたのが後藤氏の
仕事とは知りませんでした。

「日本のコンピュータ研究の先駆者、後藤英一さん他界」
slashdot.jp/article.pl?sid=05/06/14/0954213&topic=89&mode=nested&threshold=-1


363 名前:デフォルトの名無しさん mailto:sage [2005/06/16(木) 11:02:58 ]
質問です。
『初めての人のためのLISP』を図書館で借りて読んでいるのですが、ちょっと
分からない点があります。

P147
-------------------------
初心者は nconc の使い方でミスをするケースが非常に多い。例えば,プログ
ラムの中で
(setq x (nconc '(title =) y))
などとやると,プログラムの中の
(title =)
というリストの後ろに y の値がくっついてしまう。だからふたたびこの式を
評価すると,前回くっついたものの後ろにまた nconc することになる。プロ
グラム中で quote されたリストもデータには代わりはないから要注意。
-------------------------

しかし、手元の処理系(emacs21, xyzzy)では、上の式は何度評価しても、x に
は同じ(equalな)値がバインドされています。どんどん長くなったりしません。

私が勘違いしているのでしょうか?それとも、昔の処理系なら x はどんどん
長くなったのでしょうか?


364 名前:ζ [2005/06/16(木) 12:21:12 ]
こうゆーことが言いたいんじゃないのか?

(setq a "hi" )
=> "hi"

(setq a (nconc '(title =) a))
=> (title = . "hi")
=> (title = title = . "hi")
=> (title = title = title = . "hi")
=> (title = title = title = title = . "hi")


365 名前:363 mailto:sage [2005/06/16(木) 12:37:21 ]
ちょっと違うと思います。それだったら、nconc ではなく append でも同じで
すから。


366 名前:デフォルトの名無しさん mailto:sage [2005/06/16(木) 13:31:00 ]
評価するときに
(setq x (nconc '(title =) y))
ってもう一度打ち込んでるとか。
そうすると '(title =) のリストが(多くの処理系では)再評価のたびに新しく作られる。
(defun f () (setq x (nconc '(title =) y)))
のような関数を作って (f) を再評価してみては?

ちなみにANSI Common Lispの規定ではquote式のリストを書き換えることは禁止
になっていたと思う。

367 名前:364 mailto:sage [2005/06/16(木) 14:06:31 ]
当方の環境は emacs と xyzzy ですので、新たに手入力をしたりはしていませ
ん。*scratch buffer* の同じ行で、C-j を繰り返しています。それでも x は
伸びないのです。

なお、念のため (defun f () (setq x (nconc '(title =) y))) も書いてみま
したが、やはり emacs、xyzzy とも x が伸びたりはしません。


368 名前:デフォルトの名無しさん mailto:sage [2005/06/16(木) 14:15:10 ]
こうじゃないの?
(setq x '(1 2 3))
(nconc x '(4 5))
nconc を繰り返すと x は長くなっていく(@emacs21)。

369 名前:デフォルトの名無しさん mailto:sage [2005/06/16(木) 14:15:44 ]
>>367
>C-j を繰り返しています。
これはLispインタプリタ側から見たらテキストを再入力してるのと同じ。
内部的にはトップレベルの (read) がもう一回呼ばれるからね。

ところで y の値には何を入れて試してるの?



370 名前:364 mailto:sage [2005/06/16(木) 14:36:05 ]
(setq y 'hoge) としてから実行しています。ちなみに、先の関数 f をバイト
コンパイルしても、やはり x は伸びません。

私の疑問をまとめますと、'(title =) を評価したら、それが再度の手入力で
あれ、バイトコンパイル後の関数内であれ、毎回新たな cons セルが生成され
るのが自然なのではないか、x が伸びるのはおかしいではないか、というもの
です。

しかし、よく考えてみると、伸びないのが逆におかしいような気もします。混
乱してきました。

nconc に渡されるものの実体は何でしょうか?渡されるものがただの文字列で、
それを nconc が評価してリストを生成するなら、伸びないのが自然だし、渡
されるものが cons セルそのもので、その生成は最初にコードを書いたときに
行われるなら、伸びるのが当然のような気がします。

皆さんの処理系では、どうなるでしょうか?


371 名前:デフォルトの名無しさん mailto:sage [2005/06/16(木) 14:44:44 ]
destructive か non-destructive の差だろ。
実装による。

372 名前:デフォルトの名無しさん mailto:sage [2005/06/16(木) 14:48:44 ]
>>370
'(title =)のセルが作られるのはトップレベルの内部で呼ばれるread関数の中。
エディタは文字列で持っているが、それがLispの世界に渡されるときにconsセル
に変換される。君の場合はC-jを押したときに起こっているはず。

あとyの値がアトムでは面白いことは起きないだろ。
(setq y '(hoge))
(defun f () (setq x (nconc '(title =) y)))
しておいて(f)を評価してみ。2回目の評価で凄いことが起きるぞ。w

373 名前:デフォルトの名無しさん mailto:sage [2005/06/16(木) 14:50:01 ]
>>371
nconcがdestructiveでない実装ってある?

374 名前:364 mailto:sage [2005/06/16(木) 16:39:48 ]
大変よく分かりました。ありがとうございます。というか、実に自分は分かっ
てませんでした。

(setq y '(hoge); リストを入れる。
(f);      評価にあたって、バイトコンパイルの必要はない。
=>(title = hoge) ; 1回目
=>(title = hoge hoge . #2) ; 2回目
=>無限ループ ;3回目...あわてて C-g で停止。

nconc は破壊的だから、同じリストを nconc で何度も結合すると、自己参照
が起きてしまうのですね。私のところで問題が起きなかったのは、一つはアト
ムを nconc していたからなのですね。

まとめると、こんな感じでしょうか。
・(setq x (nconc '(title =) y)) の評価は、これを素で評価するのと、関数
 に入れて評価するのとで、結果が違う。
・(setq z '(title =)) として、(setq x (nconc z y)) を評価すると、素で
 評価しても、関数に入れても同じ結果になる。
・だから、Common Lisp では、quote 式のリストに破壊的操作を行ってはなら
 ないことになっている。


375 名前:デフォルトの名無しさん mailto:sage [2005/06/16(木) 18:54:46 ]
違う。それだと (setq x (nconc (list 'title '=) y)) でも同じだよね。

* '(a b c) のようなフォームはリテラルと呼ばれ、コンパイル時に作成される。
* だから (defun f () '(a b c)) の時、(eq (f) (f)) は真になる。
* もしここでリテラルの変更を許可してしまうと
(f) => '(a b c)
(nconc (f) '(d e f))
(f) => '(a b c d e f)
となり、参照透過性が保てなくなる。
* また、コンパイラは同じ値のリテラルを同じオブジェクトにしてもかまわない。
(setq x '(a b c) y '(a b c)) において (eq x y) が真になってもかまわない
ということ。そのような最適化をするコンパイラでは
(setq x '(a b c) y (nconc '(a b c) '(d e f))) で x まで '(a b c d e f)
になってしまう。

376 名前:デフォルトの名無しさん mailto:sage [2005/06/16(木) 20:06:54 ]
>>375
「コンパイル時に作成される」という言い方は抵抗あるなぁ。
基本的にはインタプリタでも事情は似たようなもんだから。
同一リテラルを再利用する最適化はread関数が行う可能性も
あるし、もちろんコンパイラが行う可能性もある。
(実際にやる処理系は見たことないけど)

377 名前:363 mailto:sage [2005/06/16(木) 21:16:25 ]
興味深い、ありがとうございました。
しかし、後者の理由はわかりますが、前者の参照透過性については、副作用の
ある関数も多いわけですから(カウントアップのクロージャとか)、純粋な関
数型言語でない LISP にとってそれほど重要なのか、よく分からないです。

あと、
(setq y '(hoge))
(defun f ()
(setq x (nconc (list 'title '=) y)))
これだと、(f) を何度評価しても、結果は (title = hoge) なのですが。


378 名前:363 mailto:sage [2005/06/16(木) 21:17:16 ]
あ、日本語がおかしい。「興味深いお話、ありがとうございます」でした。

379 名前:375 mailto:sage [2005/06/16(木) 22:16:50 ]
>>376
インタプリタであっても、クロージャの作成等ある程度の変換処理が入るので、
そういった物も含めてコンパイラと書いたんだけど、 Common Lisp では
「コンパイラ」という用語は interpreted function を compiled function に
変換する機能として定義されてるからよくなかったね。
「処理系によって作成される」等に訂正。

ところで、read 関数が返すのは #n# 等の例外を除いて新規に割り当てられる
ことが保証されてなかったっけ。reader の段階では '... を (quote ...) と
変換できることは知ってても (quote (a b c)) がリテラルであり再利用可能
であることは知らないはずだけど。
もし保証されてないとすると、prin1 で保存したデータを read して破壊的操
作してるコードを修正しないと。。。

>>377
一見参照透過に見えるのにそうでないのは混乱の元だってこと。
実際にはリテラルを直接返すのは呼び出し元の挙動に依存するので
あまり好ましいやり方じゃないんだけどね。
あと、後半部についてはそのとおり。(setq x (nconc (list ... はまとめ
の部分に対してのコメント。



380 名前:363 mailto:sage [2005/06/16(木) 23:07:13 ]
なるほど、意図を逆だと勘違いしていました。すみません。

381 名前:デフォルトの名無しさん mailto:sage [2005/06/16(木) 23:26:37 ]
すみませんが質問です。

Windows で Scheme を書いておられる方は、環境に何をお使いですか?Emacs の
scheme-mode + run-scheme と似たような環境がほしいのです。

・ChezEdit ... Shift + F2 で範囲選択した個所を評価・実行できるので、Emacs と
 かなり使い勝手は近い。しかし Petite Chez Scheme 専用。また Windows95 系の
 OS では動かない。
・xyzzy ... scheme-mode はあるが、run-scheme はない。
・Meadow ... 使ったことないけれど、run-scheme は Gauche ではうまく動かない
 らしい。
・Dr.Scheme ... MzScheme 専用。英語なので使い方がよく分からない。


382 名前:デフォルトの名無しさん mailto:sage [2005/06/17(金) 04:17:37 ]
お願い:
ある処理系で Shift_JIS をサポートするに当たり、locale が Shift_JIS の
際の nl_langinfo(CODESET) の値を調べてます。
以下のコードを foo.sh と保存し、sh foo.sh の結果を教えてください。
ちなみに、当方では以下のようになります。
FreeBSD 5.4-RELEASE-p2
codeset: SJIS

--ここから-- foo.sh
#! /bin/sh

c=$0.$$.c
o=$0.$$.out
cat > $c <<__EOF__
#include <langinfo.h>
#include <locale.h>
#include <stdio.h>

main()
{
setlocale(LC_ALL, "");
printf("codeset: %s\n", nl_langinfo(CODESET));
}
__EOF__
cc -o $o $c
uname -sr
for l in $(locale -a | grep -i -e sjis -e 'shift.*jis'); do
LC_ALL=$l ./$o
done | sort -u
rm $c $o
--ここまで--

383 名前:デフォルトの名無しさん mailto:sage [2005/06/17(金) 05:25:49 ]
SolarisではPCKだったと思うのでひっかからないような。


384 名前:デフォルトの名無しさん mailto:sage [2005/06/17(金) 05:27:28 ]
スレ違いなものにレスをつけてしまったorz


385 名前:デフォルトの名無しさん mailto:sage [2005/06/17(金) 09:07:13 ]
あっそ、じゃあ調査は終了。

386 名前:381 mailto:sage [2005/06/17(金) 10:42:50 ]
うわーい、全然レスがついてません。まいりました。

みんなホント、Windows でどうやってるんですか?Gauche を Windows に移植
した人たちとか、一体どんな環境で Gauche を使いたくて移植したんでしょうか?


387 名前:デフォルトの名無しさん mailto:sage [2005/06/17(金) 11:18:19 ]
>>381
Windows でも Emacs(Meadow) + scheme-mode + run-scheme ですが何か?


388 名前:381 mailto:sage [2005/06/17(金) 12:52:38 ]
>>387
すみません、Meadow は Gauche を普通に使えるみたいですね。

64.233.161.104/search?q=cache:pD4TKAZBB8cJ:eclipse.neneko.com/diary/20040313.html
Meadowのrun-schemeでGaucheを使う場合には-iオプションを付ける必要がある.
(setq scheme-program-name "gosh -i")

少し質問させてください。
・Meadow で MzScheme、Chez Scheme などは使えますか?
・もう少し軽い環境はないでしょうか?VisualStudio が軽々動くマシンでし
 たら、Meadow + Cygwin も問題なく使えるのだろうと思うのですが、私の
 Windows 機は xyzzy ももっさりしているぐらいなので。


389 名前:デフォルトの名無しさん mailto:sage [2005/06/17(金) 12:59:07 ]
Windowsの代わりにLinuxかFreeBSDでも入れて、GnomeやKDEなんかの
重たいデスクトップ環境を使わないようにすれば古いPCでも快適ですよ。
当方は初代ThinkPad560をそうやって使ってます。買い替えたのは内蔵
ハードディスクだけ。GoshもMzSchemeもそこそこ快適に動きますよ。



390 名前:381 mailto:sage [2005/06/17(金) 15:15:05 ]
ありがとうございます。実は、Linux をすでに別のマシンに導入しており、
Emacs21 + Gauche を快適に使っています。それまでずっと Windows (とその
系統のソフト)しか使っていなかったので、こんなに便利な環境があるなんて、
想像もしていませんでした。今まで使わないで大損をしていた、と後悔してい
るほどです。
www.math.s.chiba-u.ac.jp/~matsu/emacs/emacs21/scheme.html

現用の Windows(98)機は事情があって、Linux を入れることはできないのです
が、このマシンでも Petite Chez Scheme は意外に早く動くので、こちらでも
もう少し環境を整えられないかな、と思ったのです。Emacs 環境がいかに便利
とは言え、長く使った Win 版ChezScheme に少々愛着もありますので。


391 名前:デフォルトの名無しさん mailto:sage [2005/06/17(金) 21:13:21 ]
>381
>Windows で Scheme を書いておられる方は、環境に何をお使いですか?
DrScheme 使ってる。

>Dr.Scheme ... MzScheme 専用。英語なので使い方がよく分からない。
最近 GUI が日本語化されたよ (v299.106 以降)。
マニュアルは英語のままだけど。


392 名前:デフォルトの名無しさん mailto:sage [2005/06/17(金) 21:39:49 ]
>>391
それって、どこでダウンロードできますか?下記のサイトではまだ
Version:299.100 なんだけど。
download.plt-scheme.org/drscheme/

393 名前:デフォルトの名無しさん mailto:sage [2005/06/17(金) 21:50:31 ]
pre.plt-scheme.org/installers/table.html

394 名前:デフォルトの名無しさん mailto:sage [2005/06/17(金) 22:20:52 ]
ありがとう!これはなかなか凄そうだ!

395 名前:381 mailto:sage [2005/06/17(金) 23:44:45 ]
Dr.Scheme(PLT Scheme)は、Windows の COM オブジェクトの操作ができるとい
うので、とても興味があります。

いくつか質問させてください。
・開発環境は、日本語は通りますか?
・エディタ画面の、指定した範囲の評価はできますか?
 (Emacs の C-x C-e にあたるもの)
・エディタ画面は、S式単位の編集はできますか?
(参照:4.2. カーソル移動)
www.kahua.org/cgi-bin/khead.cgi/kahua-web/show/eg/emacs
・Emacs キーバインドにすることはできますか?
・以前試したとき、素のMzScheme は結構早いのに、Dr.Scheme環境だと大変遅
 くなった記憶があります。今はどうでしょうか?遅いままだとしたら、使い
 方による回避はできますか?

たくさん聞いてすみません。私のほかにも、興味はあるけど手を出せないでい
る人は多いと思いますので。少しでも答えてもらえたら、大喜びです。


396 名前:デフォルトの名無しさん mailto:sage [2005/06/17(金) 23:52:39 ]
>興味はあるけど手を出せないでいる人は多いと思いますので。

この辺が漏れには理解できないんだよね。
とりあえず試してみればいいのに。

397 名前:デフォルトの名無しさん mailto:sage [2005/06/18(土) 00:08:12 ]
(本音-of >>395)
=> いちいち試すの面倒だからさっさと教えろよ!

398 名前:デフォルトの名無しさん mailto:sage [2005/06/18(土) 07:13:00 ]
>>395
(cond
(開発環境は、日本語は通りますか?
今時Unicode対応は標準だと思うんだが.....)
(エディタ画面の、指定した範囲の評価はできますか?
そんなことすらできないものをIDEと呼ぶはずが無いと思うんだが....)
(エディタ画面は、S式単位の編集はできますか?
できなかったらキーボードに突っ伏して寝てしまうほど基本的な機能だと思うんだが....)
(Emacs キーバインドにすることはできますか?
キーバインド固定のIDEなんて絶滅して久しいと思うんだが....)
(素のMzScheme は結構早いのに、Dr.Scheme環境だと大変遅くなった記憶があります。
デバッグ機能を外せば実行は早くなると思うんだが....)
(else
予想と現実ってあんまり一致しないんだよな))

399 名前:381 mailto:sage [2005/06/18(土) 08:48:50 ]
すみません、確かに少々ずうずうしい質問でした。

実は、最新版を一応インストールして、少し試してはいたのですが、知人のマ
シンを借りて行っていたので、きちんと試す時間がなかったのです。だから試
したとは書かなかった(書けなかった)のですが、>>395の質問項目は、いず
れもその短い時間で解決できなかった項目を、知人のマシンから書き込んだも
のです。

現在は自宅の自分のマシンですが、実は、インストールしようとすると、何度
やってもインストーラが途中で失敗してしまいました。おそらくメモリ不足で
しょう。知人のマシンで試した時、かなり重かったので、うまく行かないよう
な気がしてはいたのですが。

ただ、開発環境としては非常に興味があります。将来、新しいマシンを入手し
た時のために、参考になることを教えてもらえたら、大変ありがたいのです。




400 名前:デフォルトの名無しさん mailto:sage [2005/06/18(土) 18:14:12 ]
(atom 381)
nil

401 名前:デフォルトの名無しさん [2005/06/18(土) 20:25:36 ]
Scheme で
(if #t
(define abc 123))
とするとエラーになるのはなんで?


402 名前:デフォルトの名無しさん mailto:sage [2005/06/18(土) 20:31:44 ]
>>401
そこは define の書ける場所ではなから。

403 名前:デフォルトの名無しさん [2005/06/18(土) 20:36:01 ]
なぜ、書けないのでしょうか。
たとえば、何らかのフラグ (これこれのシンボルが定義されているかどうか)
によって、定義を変えたいときは、どのようにするのがよいでしょうか。

404 名前:デフォルトの名無しさん mailto:sage [2005/06/18(土) 20:37:27 ]
>>403
set!

405 名前:デフォルトの名無しさん mailto:sage [2005/06/18(土) 20:38:24 ]
>>404
すいません、もう少し詳しく説明していただけませんか?

406 名前:デフォルトの名無しさん mailto:sage [2005/06/18(土) 20:42:17 ]
>>405
(define abc 123)
(if 何かの条件
 (set! abc 456))
みたいにすればいい。
define は他の言語での変数の宣言に近い。
純粋な代入は set! を使う。

407 名前:デフォルトの名無しさん mailto:sage [2005/06/18(土) 20:47:23 ]
> 他の言語での変数の宣言に近い。
なるほどー。
今の例だと、123 という簡単な値なのでよいのですが、
たとえば、構文の定義を変えたい場合はどうでしょう?
たとえば、Windows と Mac で、構文の定義を変えたい場合です。
シンボル WIN32 が定義されていれば Windows の定義にしたい。
これも set! で可能でしょうか?

408 名前:デフォルトの名無しさん [2005/06/18(土) 20:47:26 ]
>>402
ブロックの先頭だから書けるはずじゃない?
ローカルスコープなので>>401の例では無意味だが。

ちなみにGaucheだと書けるが、グローバルにabcが定義されちゃう。
これはバグだと思うが。

409 名前:デフォルトの名無しさん mailto:sage [2005/06/18(土) 20:56:48 ]
>>408
R5RS的にはdefineが書けるのはトップレベルか<body>の先頭。
ifの中の式は<body>ではないのでR5RS的には駄目。
つまり、lambdaとかletなどの新しいスコープを作る場所でのみ許すという
考え方だとおもわれる。
Gaucheの場合、トップレベルのifの中はまだトップレベルのスコープだという
解釈なのではないかな。これはこれで便利に使えそうな気がする。



410 名前:デフォルトの名無しさん mailto:sage [2005/06/18(土) 20:58:01 ]
おれならMLですまーとにかくけどねw

411 名前:デフォルトの名無しさん mailto:sage [2005/06/18(土) 21:00:46 ]
>>407
構文というのがマクロの定義を変えたいという意味なら不可だと思う。
(Gaucheなどは>>409で書いたように可能かもしれないが)

関数の定義を変えたいという意味であれば、
(set! func (lambda (...) ...))
のようにすれば定義を変更できる。

412 名前:デフォルトの名無しさん mailto:sage [2005/06/18(土) 21:10:01 ]
>>411
> 構文というのがマクロの定義を変えたいという意味なら不可だと思う。

そうですかー。
できてもよさそうな機能なんですけど。。

> 関数の定義を変えたいという意味であれば、
> (set! func (lambda (...) ...))
> のようにすれば定義を変更できる。

Scheme コードをコンパイルする場合、
これだと無駄なコードがコンパイルされてしまいますよね。
だから、構文展開時に切り替えたいんです。。


413 名前:デフォルトの名無しさん mailto:sage [2005/06/18(土) 22:07:43 ]
>>412
> これだと無駄なコードがコンパイルされてしまいますよね。
仮に if の中に define が書けたところで、この辺の事情は
変わらないと思うのだが。

414 名前:デフォルトの名無しさん mailto:sage [2005/06/18(土) 22:09:07 ]
>>412
そんなのが気になるなら、win32.scm macos.scm とかにプラットフォーム
依存の構文を入れておいて、make 等でそれを target.scm にコピー、
使用する際は (load "target.scm") するようにすれば?

415 名前:デフォルトの名無しさん mailto:sage [2005/06/18(土) 22:22:48 ]
基本すら理解できていないのに、何故そんな枝葉にこだわるのか

416 名前:デフォルトの名無しさん mailto:sage [2005/06/18(土) 23:22:26 ]
俺もそうだけど、初学者ってそういうもんじゃないかな。
今の疑問が枝葉かどうか判別するには、ある程度見通しが立ってないと。

417 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 00:39:27 ]
それは学習の仕方が下手なだけ。
ある程度学習経験があれば、そういうところにあまり時間を浪費せずに進み
後でわかるようになってるという進め方が普通。
その決断が自分でできないなら、疑問点をまとめてリストアップしておく
ノートを作っておけばいい。ノートに覚えてもらうわけだ。
先に進んで問題にぶちあたったとき、スキップした項目が理解に関連するなら
そのとき立ち戻ればいい。


418 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 00:58:21 ]
まぁ、理想的にはその通りなんだろうけどね。
マンドクサ狩りの俺みたいなのは

    Scheme には #ifdef ないのか マンドクセ とりあえず放置...

で終了する事が多いんで、疑問は感じた時に解決っつー
スタンスもありだと思うよ。

419 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 00:59:43 ]
結局だれも解決できないんじゃ。。。
だから初学者だの何だのと言って話をそらすんじゃ。。



420 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 01:08:10 ]
>>419
んなこたぁないょ

421 名前:ミミ mailto:sage [2005/06/19(日) 01:15:26 ]
こんなんでどう?
MzScheme だけど。

(define-syntax (if-for-syntax stx)
  (syntax-case stx ()
    ((_ TEST-EXPR TRUE-EXPR FALSE-EXPR)
     (if (eval #'TEST-EXPR)
         #'TRUE-EXPR
         #'FALSE-EXPR))))
 
 (define PLATFORM "Windows")
 
 (if-for-syntax (string=? PLATFORM "Windows")
   (begin
     (define Vendor "Microsoft")
     (define Color  "Blue"))
   (begin
     (define Vendor "Unknown")
     (define Color  "Red")))
 
 (display Vendor)


422 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 01:18:41 ]
>>419
そもそも、言語処理系のユーザが考えるべき問題じゃないし、
ユーザレベルで解決できる問題じゃないってこと。

マクロがどう展開されるか、関数がどう最適化されるかって問題だろ?
部分評価とかする処理系なら、>>412みたいな心配はないかもしれない
わけだし。

423 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 01:26:12 ]
>>419
414 で解決したと思ってたんだけど

424 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 01:32:31 ]
それもありだけど。

425 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 01:59:01 ]
SRFI 0 の feature にプラットフォームも入れてくれる処理系なら
(cond-expand
(win32 ...)
((or unix macosx) ...)
(else ...))
とか

426 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 18:16:57 ]
前も書いた気がするが、おれの処理系は#if #else #endif をreadに入れたよ。
>>425みたいに無駄にS式縛りにするのは面倒だし
読みにくいと思ってる。
S式に縛られてないから任意の箇所で
(func
#if (defined 'platform-win32)
1 2 3)
#else
#if #t
4 5 6)
#else
7 8 9)
#endif
#endif

みたいなことができる。
まあSRFIレベルの定義じゃ無理だな。

427 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 18:42:54 ]
>>426 エディタはちゃんとインデントしてくれるの?


428 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 18:44:20 ]
ちなみにCommon Lispだと#+, #-でやるよね.
CL風の#+ #-が使えるScheme処理系ってないの?

429 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 19:00:36 ]
プラットフォームで分けたい場合って、関数の中身の処理だけ違っていてインターフェースは同一なはずだから
scheme だと単純に変数へ束縛する関数オブジェクトを変えればいいだけになる。
だから scheme ではわざわざ新しい構文を導入するまでもなく
(define hoge
(if (eq? 'platform win32)
(lambda (arg) ...)
(lambda (arg) ...)))
とかすればいい。
そしてなにより美しい。 ← 一番重要w



430 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 19:07:30 ]
実行時に (if (eq? ... したくないって流れだと オモテタ けど...

431 名前:デフォルトの名無しさん mailto:sage [2005/06/19(日) 19:11:00 ]
>>430
マクロ展開されるのだって1回だけと期待できるにせよ実行時だし、
>>429のifだってよほどnaiveな実装でない限り、1回しか実行されない。

わかってる?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<268KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef