1 :
デフォルトの名無しさん :
2008/04/04(金) 18:18:17
※LispとSchemeのスレです。
お酒とワインのスレです。みたい
麺類とうどんのスレです。みたい
>>15 ワラタ
;;;蕎麦で喧嘩するんだぜきっとw
テンプレ追加 ☆初心者が集うIRC(布教してくれる先生も大募集です) irc.scenecritique.com port 6667 チャンネル #Lisp_Scheme クライアントはcottonあたりが誰でも使いやすいと思います (LisperならEmacsでつないだ方がいいかもしれませんが) ※IRCはつないだまま離席している人が結構いるので即返答がないことも。気長に待ちましょう 現在cdrcdrな感じですが宜しくお願いします
If you give someone Fortran, he has Fortran. If you give someone Lisp,
Scheme Gauche part1 って(略
場合のカズ、三浦カズ (define C (lambda (n k) (if (eq? k 0) 1 (* (/ n k) (C (- n 1) (- k 1)))))) (display (C 5 2)) ⇒10 (define C (lambda (n k) (if (eq? k 0) 1 (if (eq? n k) 1 (+ (C (- n 1) (- k 1)) (C (- n 1) k)))))) (display (C 5 2)) ⇒10
場合の数 (define Y (lambda (X) ((lambda (procedure) (X (lambda (arg) ((procedure procedure) arg)))) (lambda (procedure) (X (lambda (arg) ((procedure procedure) arg))))))) (define (Fact my-fact) (lambda (n) (if (= n 0) 1 (* n (my-fact (- n 1)))))) (define fact (Y Fact)) (define P (lambda (n r) (/ (fact n) (fact r)))) (display (P 4 2))
>>22 (define P
(lambda (n r)
(/ (fact n) (fact (n-r)))))
(define C (lambda (n r) (/ (P n r) (fact r))))
(thread "Lisp Scheme" (part 21))
そういう余計な括弧よさはいりません
むしろ括弧が少なすぎるぜ
(thread "Lisp Scheme" :part 21)
ディレクトリいじれたわ。 Gaucheは俺の既定スクリプト言語になりました。
文字列リテラルってダブルクオートで囲うんだっけ?
シンボルが文字列の代わりです
glintがバージョンアップされたようです
(explode 'SYMBOL)
>>32 internされてて欲しいとき(キーになるもの等)はシンボル
頻繁に作ったり壊したりするならストリング
極めて頻繁にコンペアするならシンボル
とりあえず、デフォルトはストリングだな
(glint '(Lisp Scheme Gauche)) ⇒ バグの数 21
ネタにマジレスっていうか、元ネタが微妙だったねw Lisp1.5ってなあ。
EOPLとLisp in Small Pieceってどっちがやさしいですか? 簡単な方から挑戦してみようと思ってます。
lispのプロジェクトをいろいろ見てるけど、pythonと比べて toy problem解いただけで実際の複雑な問題に適用できないの多くないですか? ある程度泥臭いこともやる人がいないからなのかな
つ 実際の複雑な問題 kwsk
>>40 そのプロジェクトってどれよ?
#うちの社内プロジェクトだったらいろんな意味で笑う
そうですね、あなたにはPythonが向いてると思います。
pythonと実際の複雑な問題だけじゃどう吊られると喜んでくれるかわかんないYO!
すまんが教えてくれ read関数って空白類記号(スペース、タブ、改行)は読み飛ばすのか?
うんそうだよ
>>40 Pythonマシンとかつくってから出直してこい
まあせめてPmacsぐらい作ってほしいね。
>>51 Prologで書かれたpmacsなら昔使ってたなあ。
入社したら新人教育がLisp班とProlog班に分かれて、俺はProlog班だった。
そんな夢のような会社があるわけねえだろ!
>>53 AIバブル全盛期にはあったんだよね。
俺がやったPrologはFM-8上のCP/Mで動くmicro-PLOLOGという丸括弧で括るPrologだった。
pmacsを使ったのはそれとは別のワークステーションで、小型冷蔵庫ぐらいの筐体だったよ。
http://d.hatena.ne.jp/niitsuma/20080328/1207515072 swigよりも高度なことができるcffiのwrapper toolを試してみました
しかし少し複雑なc++コードを与えるとエラーをおこして止まります
基のc++コードを自動でwrapが生成できようにいじるべきか
それとも自動はあきらめて手書きした方がいいのでしょうか?
pythonなら自動でwrapを作成できるみたいなので
pythonを経由してlispから呼ぶという2度手間という手もできるのでしょうか?
ツールをいじるのは手書きを極めてから
>>54 Micro-PROLOGですぜ、旦那。
"Programming in Logic"読んだ口ですか?
Lisp班の環境は? muLispとか?
2001年宇宙の旅に出てくるHALってLispで書かれてるんでしょ?
そんな設定あったっけ?
ありません
>>58 > "Programming in Logic"読んだ口ですか?
はっきり覚えていないけど教材は手作りだったような。
> Lisp班の環境は? muLispとか?
名前は忘れたけど日立のプラズマ(赤色1色)Laptop(DOS 16bit)で動いている
マルチウインドウのLispだった。Common Lispだったかどうかは分からない。
あとこの会社にはXerox J-Starもあったよ。俺が入って1〜2年で廃棄されたが。
>>63 muLISP/86 on MS-DOSの可能性大
そりゃファクスくらいあるだろw
雨の日も風の日も 息をするようにlambdaを書く。 そんな人にわたしはなりたい。
自分自身の定義を書き換える関数って書ける? 学習して賢くなる関数。
メモ化された関数は定義は変わらないけど一度計算した結果を覚えて高速化する。
関数で新たな関数を作ってevalとか?
「賢い」の定義はどんなものなの?
「かしこいランプ」(商品名)って 走行中 かつ 周辺が暗い ならば 点灯、という論理で動作してるな
>>67 できる。つーか、そんなのアセンブラでもできるだろ。w
まぁ自己書き換えコードはあまりお勧めしないがな
関数は普通に賢いので、データを賢くすることを考えてはどうか
>>67 書き換えるのは簡単だが、賢くするのは難しい。w
Yは相互再帰を学習できますか?
79 :
67 :2008/04/09(水) 18:04:46
昨夜は書きこんだ後に寝てしまったです。スマンです。 Schemeでdefineを使って定義した内容をリストとして取り出し、 書き換えて自分自身を再定義するってことを考えてました。 自らアルゴリズムを改良していくとかできたらおもしろいなぁって。 夢物語だけれども人造人間キカイダーのように思考し、反省し、学習するプログラム があったらおもしろいだろうね。
AIか?
昔ネットに人工無能ってのがあったなあ。
あるんだワラ
実は俺・・・
cffi使ってたのだけど 大きいプログラムを呼ぼうとする glibc detected *** sbcl: malloc corruption で止まる。何か対策ないのでしょうか?
大きいとはどのくらいか、 プログラムの大きさかデータの大きさか、 具体的にどのくらいより大きいと駄目なのか、 その辺をいろいろ実験してみると有意義であろう。
これをcffiで呼ぼうとしたら同じバグになる #include <stdio.h> //ここが問題 int test(int i){ return 0; }
89 :
88 :2008/04/09(水) 21:25:19
allegro CLならこんなこと起きないのでしょうか?
>>89 それを聞く前に、普通は起きた処理系が何かを書くもんじゃないかい?
91 :
88 :2008/04/09(水) 21:30:21
sbclです
>>88 だけで駄目ってのはさすがに無かったと思うけどなあ。
#includeを抜くと大丈夫なんだよね?
OSは何?
>>79 defineで定義した関数をリストとして取り出すことはschemeでは(少なくとも規格内の方法では)出来ない。
94 :
88 :2008/04/09(水) 23:36:13
OSはubuntu7.10です
>>60-62 【HAL-9000 series】
映画版では1992年1月12日、クラークによる小説版では1997年同日に、イリノイ大学アーバナ・シャンペーン校にて誕生した。
開発者はシバサブラマニアン・チャンドラセガランピライ、通称チャンドラ博士。
HALはIBMを1文字ずつ前にずらして命名された。
小説『2010年宇宙の旅』では、チャンドラー博士自らIBM説を否定した。
が、アーサー・C・クラークは後年になってからIBM社がこの説を迷惑がっているどころか半ば自慢しているらしいと聞き及び、
著書「3001年終局への旅」のあとがきで「今後はこの説の間違いを正す試みを放棄する」と記した。
スペースシャトルの機上コンピュータには、高い信頼性を確保するためにシャトル専用のプログラミング言語が用いられており、これを「HAL/S」という。
「HAL/S」を構築したIntermetrics社の創業者は、大学の同僚でこの言語のコンセプト構築に多大な貢献があった J. Halcombe Laning 博士に敬意を表し、
彼の通称 Hal に因んで HAL と命名した。
しかしこれがいかにもくどく不自然なことから、やはり「HAL/S」は「HAL 9000」に因んだものという憶測が浸透した。
ちなみにシャトルの三番機、OV-103の船名は「ディスカバリー号」となっており、『2001年宇宙の旅』との関連が噂された。
奇しくもスペースシャトル史上2度の大事故の後の初飛行はいずれもこの機体である。
IBM AP-101 The IBM AP-101 is an avionics computer, used most notably in the U.S. Space Shuttle, but also in the B-52 and F-15, among others. When it was designed, it was a high-performance pipelined processor with core memory. Today, its specifications are exceeded by many microprocessors. The AP-101, being the top-of-the-line of the System/4 Pi range, shares its general architecture with the System/360 mainframes. The shuttle software is written in HAL/S, a special-purpose high-level language, whereas AP-101s used by the US Air Force are mostly programmed in JOVIAL.
>67 遺伝的アルゴリズムを調べろ。 アクセス規制だから詳細は書けない。
98 :
デフォルトの名無しさん :2008/04/10(木) 01:50:06
遺伝的プログラミングだ。KOZAが最初にLISPを使って示した方法だ。 アクセス規制で携帯だから、他で調べろ
>>78 Y そのままだとやりにくいんじゃないかな。
二関数での相互再帰なら
(Y2 f g) = (f (Y2 f g) (Y2 g f))
みたいに拡張するとか。
よし、この調子でまたAIバブルを発生させようぜ! ぶくぶく
次はセマンティックバブルだ! LispハッカーはXMLという妥協を受けいれ、 メインストリームに帰り咲くのだ
セマンティックバブルって SOAPバブルと同じ運命って気がするんだけど
とりあえずソープで泡踊りしてきまつ
105 :
78 :2008/04/10(木) 18:51:55
>>100 おもしろそうなので書いてみます。Arcで
iPod touchでGauche動かせた人いる? ノシ
普通のUnixなので普通に動きますね。NDAがあるので詳しいことは書けませんが。w
>>107 Open Programming環境では動かなかったってこと?純正SDKでしか試してないならNDAあるから書けないかw
すまん、純正しかやってない。
>>109 d。参考になりました。
Zaurusポートもそうだけど、Open Programming環境では問題点が出ることが多いのに、純正では大丈夫だったのはちょっと驚き。
>65が放置されてるのはお約束?
Seasoned Schemer 18章、オレも解決!
ttp://codepad.org/cWiNn5qr 18章の出だしでリストが返ってくるような書き方が良くないと思う。
この二つを比べてみるとconsとkonsの違いがわかる。
(kdisplay (lots 5))
(display (lots 5))
もう少しきれいに書けYO! (define kdisplay (lambda (c) (c (lambda (a d) (cond ((null? a)(display "")) (else (display "(") (display a) (k2display d) (display ")") (newline))))))) (define k2display (lambda (e) (cond ((null? e)(display "")) (else (e (lambda (a2 d2) (display " ") (display a2) (k2display d2)))))))
blogに投稿する処理を半自動化したいのですが 参考になるコードまたはパッケージなどないでしょうか?
XPなんですがDr.Schemeを放置しておくと勝手にメモリがんがん食ってフリーズします。
>>116 Common LispやSchemeのコードは知らないけど、
Emacs LispでAtomに対応してるのが二、三あったはず。
参考にするだけなら、PerlやPythonやRubyとかのが、
いくらでもありそうだけど。
ぶっちゃけ、処理自体は全然難しくないんで、
Atomとかのリファレンス見ながら自分で実装しても、
あまり苦労はしないと思う。自分でやろうとしたときは、
UI書くのが一番だるそうだと思った。
継続について あっわかった!! ん? こういう場合は。。。 これの繰り返し
プログラミングGaucheの306ページのモジュールシステムですが 本のとおりに打ち込んで実行しても (addx 10) が110にならずに 11になってしまいます。本に誤記はありますか?
121 :
120 :2008/04/12(土) 16:47:07
再度、Emacs立ち上げたらできました。 失礼しました。
>>116 xml-rpcがつかえるブログなら、gaucheのxml-rpcライブラリがある。サードパーティーだけど。
ぐぐればすぐ見つかる。
なんだかわかんねーけど、Schemeってすごいんだな。
Ruby使いがSchemeを勉強して何か得るところはありますか?
Ruby厨の汚名を晴らせる
晴らせた時には既にただのLisperだけどな
λ..........
そりゃあ Brainfuck でも得るところはあるでしょう 失うものも多いかもしれないけど
何かSchemeの人は怖いと聞いていましたが、本当のようですね。 Rubyはクロージャも継続もスレッドも備えていますから、 Schemeはなんでも自作しないといけなくて大変そうに見えるのですが。
まさにRuby厨と呼ばれるにふさわしいな。
思い込みの激しい人というよりは、目の前で色々思い込んでみせて 引き留めて欲しい人、という感じだな。気持ち悪い。
構って君に構っちゃいけませんよ
.............................λ ````````````y
ArcとOzにヒントを得て、Orzって言語を考えたんだ。 仕様はまだ無いけど。
2ch発のマルチパラダイムLisp系言語orz な?
SICPとHtDPはどっちが読みやすい?
どっちも読まなくていい 読まなくていいけど、ちょっとつまみ食いしてみようかな というふいんきがベスト
````````````y <やあ、ラムダさん .............................λ <やあ、Yコンビネータさん
>>138 比べるものが違うと思う。
[ {Simply Scheme or HtDP}読了後 ⇒ SICP ] or [Little Schemer ⇒ Seasoned Schemer]
でも最近は
[Little Schemer ⇒ Seasoned Schemer ⇒ SICP]
という読み方が多いかも。
λY
.............................λ ````````````y
.............................λ y ````````````おっとっと
「SICP完全制覇」とか出ないかな。
>>145 あるじゃん。Instructors Manualって解説用の本。
それ読んだらよくわかったの?
>>148 アメリカの教科書って難しい内容だと生徒がデスマになるからか、HPがあったり副読本がついてたりするな。至れり尽くせり。
Gauche本のDesktop ReferenceとかInstructor's Manualも出て欲しいw
Structure and Interpretation of Classical Mechanics SICMっていう古典力学のプログラミング本も出てるラスィ
ブックレヴュー見ていて思い出したんだけど、 Littleの9章で出てきた"partial function"のpartialって偏微分の偏だよね。 どこかで「引数を全て使わない関数のことだ」と書いてあったけど、 全て使っててもpartialだと言ってるし意味が通じない。
同じ本ではないでしょうか><
>>152 完全な関数になっていないという意味でpartial(部分的な)と呼んでいる。
引数を使うかどうかは呼称に重要ではない。関数が計算を終了するかどうかでpartialと区別する。
>>155 ええ。それはわかりました。
永遠にリスト内を探し続けるが、見つけるべき文字列が見つからないとか、、
そんな例がありましたね。
ISBNが同じなんです><
>>158 古いと灰色や金色の表紙のものがある。amazon.co.jpは古い表紙のpicを使いまわしてると思われ
>>160 実際は赤なんだけど灰色の画像使ってるだけかと思ってました。
ISBNが古いのと同じなのかぁ。出版社のHPで確認するのって大事だな。 amazon.co.jp見ただけじゃそんなことわからないYO!
>>159 そのページの対応する言語を見ると日本語がないw
SICM 持ってる。けど、自分はラグランジュアンがよくわかってないので 宝の持ち腐れだ。先に数学、勉強するよ。
和田訳のSICPがあれだけグダグダなのを考えるとSICMを翻訳できるとは思えんなw
>>167 d。部分写像(partial mapping)がpartial functionに近い。
いいなあ、学生は暇があって
学生じゃないし暇じゃないけど、ゴロゴロしてる。
>169 先週から仕事中の現実逃避に>163読み始めたよ 出来れば日本語訳が( ゚Д゚)ホスィ・・・
さーてそろそろLittle Schemer読んじゃわないと````````````y
8章くらいから難しくなって涙目
もれも8章涙目だったけど、何度も読み返して何とか理解した。 まだちょっともやもや残ってるけど、、、、 今9章だお。
>>138 HtDPより同じ著者のEOPLの方がいい。
Little Schemerシリーズもいいけど、SICPとEOPLは体系的な知識が得られる。
Simply Schemeは?
EOPLってナーヌ?
しばらく英語に触れてなかったので、Littleで一杯一杯なんだ。
Simply→SICPという意図で書かれているらしいけど、英語読めるか心配。
>>178 おそらくEssential Of Programing Languageかと。
Simply SchemeはLittle Schemerに近い内容をもっとページ数をかけて説明してる。 表計算プログラムを作る演習などのfinger practiceが充実してるけど理論的には浅い。 Haskellで言えばCraftみたいな内容。 HtDPも理論的なレベルは同程度。こっちはプログラミング作法にページを費やしている。
>>180 ありがとう。
退屈させないように色々やってみて、プログラミングに馴染んで来たら、
さてそこから深くするには何が困難か?と考えさせて
SICPにつなげる感じなんですかね。
>>182 そんな感じ。Littleの8章で困るのも演習でなれることが出来ないからじゃないかい?
SICPに取り組むには、他の言語経験があればLittleぐらい難しくても短期間に十分なレベルに達するけど、
全くの初心者には大量のfinger practiceで経験を積ませないと理論の良さが実感できないから壁を感じるんだと思う。
>>183 まさにそんな感じです。Simplyいっといたほうが良かったかな・・・・
プログラミングGaucheで代わりになります?
>>184 Gauche本もってるかな?リファレンス的でfinger practiceはあまりないよ。
SimplyはSICPの前に必要な知識をうまく選んで入れてると思う。
でも Little Schemer ⇒ Seasoned Schemer と読んで、ネット上の他人のプログラムを読むのも面白い。
楽しんで継続できるのが一番いい方法だと思う。
>>185 持ってないです。ネットの立ち読み版は眺めましたけど。
折角Little読み終わりそうだから続けてSeasoned読んじゃおう。
どうもありがとう。
>>186 おれも内容知りたいなぁ>>継続フェスタ。
>>187 Seasonedをしっかり理解するとSICPの山場といえる3・4章が簡単になるからガンガレ。
特に継続(callcc)がSICP3.5ストリームで利用されるのは面白い。
これがわかるとSICMの入門準備も完了。runge-kutta4(つまり微分方程式)とか出来るとシミュレーションの幅がちょっと広がるし。
ストリームで無限リストが作れるのも目からうろこの体験だった。
これ位はできないとHaskellerに馬鹿にされるしw
xyzzyの独自機能をcommon lispで読み代えるmacroみたいなのないでしょうか?
Little Schemerな連中は、はてなとかで、グループ作って 活動すれば良いんじゃないかと思った。
まああれだ コンパイラといえばyacc OSといえばブートローダー SchemeといえばLittle Schemer
Little Schemer 何度でも読んでいいですか?
いいですよ
何度も読むと理解がさらに深まりますか?
少なくとも浅くなることは無いから安心して読め
じゃあ毎日音読する。
>>190 どういうものをイメージしてるのかよく分からないよ……
何と言ってもSICPだ。俺はあれを読んで人生が変わった気分だよ。 プログラマは皆SICP必須だな。あれを読めば、場当たり的なコーディングから 完全に開放されるよ。
読むなら、やっぱり英語版?
>>200 俺は英語版を読んだ。最初翻訳本買おうかと思ってAmazon見たらあのコメントの
群れを見て引いちゃったよw。「超循環評価機」とかのタイトル見ても???だったしね。
英語は教科書だからか、受験英語やってりゃ普通に読める英文だよ。ネイティブ風な
言い回しは一切無い。多少英語が読めるんだったら、タダでネットで見れるんだし、
原語でいいんじゃないか。
ちなみに俺はあまりの感動にハードカバーの洋書を買ってしまった。9000円ぐらい
したかな。ただ、持ち運びにはペーパーバックのほうがいいし、値段も半額以下なので
これについては激しく後悔しているw
昔のマグロウヒル日本語版から比べたら、現行日本語版なんて天国みたいなもんだよ。
別に悪い訳じゃないと思うけどなぁ。 超循環評価機をメタサーキュラ〜とかカタカナで書かれたら死ぬ。
Amazonの書評は異常だね。攻撃的な人って居るんだなと感心する。
ニヤニヤ
>204 あれは読んでない奴の戯言だ Amazonのあの手の書き込みは鵜呑みにしない事にしている
単語まで全て逐語訳にしないで ->計算機(computer) みたいな感じで元の英単語も書けば良かったんだよな。
字幕の最初の方が出来上がったてるみたいだ。
>>207 英語版はLaTeXだけど、日本語版は組版でやってるからちょっとした修正が出来ない。
もとの単語を書くと文字数が増えるからページ数を抑えるためにポイント数を抑えざるを得ない。
でもそれは技術的に難しい。かといってページ数を増やすと\5,000以上になってしまう。
つまりピアソンがコストダウンできる技術力を持っていないことにもそういう工夫を出来ない原因がある。
かといってムリをすればマグロウヒルみたいに倒産して書物が入手できなくなってしまう。
良い本なら買い支えるというのも消費者の選択なんジャマイカ?
>>152 total functionは、全ての実引数に対して値が定義されている関数。
partial functoinは、値の定義されてない実引数のある関数。
具体例は、
(define (f x)
(if (= x 1) 1
(f (- x 1))))
定義域を自然数だとするとtotal function。
整数だとするとpartial function。
負の数の時に停らないあるいは値が未定義だから。
(define (f x) (/ 1 x))もxが0だと駄目だからpartial function。
それじゃ数学関数の定義で駄目。152はそこは判ってるようだ。これを関数型での関数の引数でイパーン的に説明汁
Dを意味関数だとしたら、 ∃x (x≠⊥ & D[f(x)] = ⊥) なら、fはpartial functionってことだよな。
>>214 を見た漏れの脳にはテトリスが浮かんだ
とりあえず泣いてくる
>>215 ああ俺もギャル文字を思い出した。一緒に泣こうぜ。
217 :
152 :2008/04/14(月) 02:08:46
戸田山和久の「論理学を作る」はよかったな 大学に対しては良書を教えてくれた事に関しては感謝してる
そういう感じで「計算論 計算可能性とラムダ計算 著高橋 正子」とかが self-containedで読めるようになる本教えてください。
他言語で書かれたプログラムのメタ制御したいのだけど 適切なbindingがない場合はxml-rpcが一番簡単なのかな?
いいえ
計算理論の基礎 シプサ てのが気になってる。 アマゾンによると翻訳がすこぶる良いという。
すまんがちょっと教えてくれ。 Chiken Schemeは簡単に実行形式ファイルが作れるんかの?
>>225 お前のことなんぞ知らんからお前にとって簡単かどうかはお前が判断しろ。
マニュアル通りやってみてできたならお前にも簡単にできるってことだ。
そうでなければ難しいんだろう。
HtDPの目次見たけど継続とかlet、letrecは出てこないんだね。Schemerシリーズのほうが 難しそうだ。
>>227 ふむ、chicken schemeっての初めて見てみたけど簡単に実行ファイルが作れるんだな。
>>207 そうそう、和田先生が翻訳メモとして技術用語の翻訳対照表をつけてくれれば、
読みやすかったのに。
schemeをC++プロジェクトに組み込みたいのですが、 組み込みやC++クラスのエクスポートが簡単にできる ポータブルな処理系ってありますか?
libgaucheとCで書いてextern "C"ってすればいいんじゃね 俺もほとんど知らない。教えてほしい
Chickenはsyntax-caseが使えるんだけど
有理数がないのと多倍長数がないのが残念。
biglooもそうだったような気がするけど
Cにコンパイルする処理系はCの整数型、浮動小数型に縛られる物が多い。
Gambit-CはCコンパイルタイプには珍しく
多倍長数、有理数と正確数表現の複素数(これはGaucheにもない!)があるんだけど
SRFI周りが互換性の無い独自の実装なのが残念。
(たとえばSRFI-22の引数にスクリプトファイル名を含めない、文字列ポートを読み込むと空になる等)
>>233 組み込み系UnixライクOSでも動くとなればguileかScheme48でしょう。
Cでプログラムを書くのも容易だし
ソースに手を入れなくてもターゲットで動く。
但し前者は遅い上にR5RS準拠ではない。(R5RS手続きは網羅してるけど)
後者はR5RS準拠で完成度は高いけどやや重くてやや遅い。
処理系ソースに手を入れる事を厭わないのであればGaucheかGambit-C。
前者は軽くてそこそこ速い。後者はそこそこ軽くて(コンパイルすれば)かなり速い。
PLTScheme(MzScheme)がUnix系全般で動くようになれば最強っぽいんだけど
BoehmGCを移植しただけじゃ動かないのが×。
さらにコンパイルしなくても速いのにコンパイルしても(そんなに)速くならないのはご愛嬌。
>>235 >複素数(これはGaucheにもない!)
あるっしょ
正確数表現の複素数(これはGaucheにもない!)
> (exact? (sqrt -1024)) #t これはいいsqrt
R5RS-6.2.3 sqrtのような潜在的に不正確な演算は、正確引数に適用されたとき、 可能ならばいつでも正確な答えを算出することが望ましい(が要求はされていない)。 なので処理系依存。
240 :
225 :2008/04/15(火) 20:40:37
>227 参考になった。ありがとう。
>>225 Linuxだと簡単にバイナリ作れた。
winだとコンパイルも通らなかった orz
mingwin32嫌いだ!
>241 あれ、出来なかったっけ? ちょっと今MinGW環境壊しちゃったので手元で確認できないけど
>>242 できたらgccのバージョンとかライブラリのバージョンさらしてください。
しょぼーん。
#共通環境はsbclが一番良いんじゃないかと思うようになっちゃったのでscheme嫌いになりそう
>>243 Makefile.mingwを使うとchicken-config.hの作成に失敗する。
そこだけ手作業でやったらあとは普通にmakeが走ってる。
今ビルド中。っていうか本家に最新版のWindowsバイナリ置いて無いな。
みんな苦労してでもWindowsdで使いたいんだな。 Windowsは偉大だな。
自分が使いたいというより、より広く使われるものを作りたい、そういうものを作る ために使いたい、という動機が大きいのでは? 趣味にしても、仕事にしても。
248 :
244 :2008/04/16(水) 00:55:30
よくみたらMakefile.mingw-msysってのがあったな。 こっちでやれば一発でいけたのかも。 まぁ、gcc3.4.5で普通にコンパイルはできたよ。
249 :
242 :2008/04/16(水) 02:07:59
>248 漏れもgcc4.3.0 & Makefile.mingw-msysでやってみたけど問題なさそう
>>246 処理系はとりあえずUNIX系の上でつくられて、
そういう尊い方々がWinに移植なさるのですね。
感動しました。
漏れはWinでないと使う気にならないから使ってるだけだが、
いつかそうなりたいね。
とりあえずUNIX上に作られるのはそのほうが楽だからだな。 WindowsのAPIってなんか例外事項が多くてごちゃごちゃしてる感じ。
252 :
231 :2008/04/16(水) 03:00:47
>>248 俺はgcc3.4.2+msysでうまくいったみたい
>簡単に実行形式ファイルが作れる という観点では エンドユーザが自分でMinGWを入れるという前提はおかしい 普通の人はVisual C++とMzSchemeを使えばいい
>>253 「エンドユーザ」はMinGWを入れる必要は無いだろ
じゃあ「簡単に実行ファイルを作りたいWindowsユーザ」に訂正
簡単だけど話題としてはスレ違いだね。
簡単だから得意げに説明するのが恥ずかしい気がするけど、注意点を ・ソースファイルと同じ名前のモジュールで包む たとえば hello.scm なら (module hello mzscheme (display "Hello, world!") (newline)) ・--exeオプション たとえば mzc --exe hello hello.scm ・bccに対応していると書いてあるが無償版のbccでは失敗するみたい
>>235 とりあえず、いろいろ試してみました。
guile)
・GPLライセンス
・試してないがVCでコンパイルできなさそう
Scheme48)
・VCでもコンパイル可能
・ただ、実行の際に〜.imageファイルが必要なのと、
その作成にScheme48インストールディレクトリのフルパスが必要・・・
・(美学の問題だが)関数名がおかしいのと、コンパイル時に
「○○関数は未定義です」「○○は初期化されていません」みたいな警告が普通に出てくる。
chiken)
・VCでもコンパイル可能のはず。自分には無理だった。
・(pcreを使っているので多分)正規表現がマルチバイトをサポートしていない。
Gauche)
・コアはVCでコンパイル可能だが、拡張ライブラリが全滅
・クラス登録機構がGNUのリンカの実装に依存している。VCだと拡張ライブラリを作ること自体が難しそう。
・基本的にposixべったり
・デフォルトで日本語が使える。ドキュメントも日本語
Gambit-C)
・VCでコンパイル可能
・自動生成されたソースが長すぎるため、IntelliSenseの更新に長大な時間がかかる。たまに開発環境自体が落ちる
・(サイズが)すごく大きいです・・・
総括)
こうやって並べてみると、日本語が使えるGaucheか、Gambit-Cが問題が少なさそうですね。
自分は多分、gaucheをstatic libraryで使うことにすると思います。
個人的にはluaのようにもっと手軽に組み込める処理系があると嬉しいのですが、文句ばっかり言ってもしょうがないですよね。
>>235 さん、ライブラリの紹介どうもありがとうございました。
Windowsで動かしたいというのは判るが、VCでコンパイルしたいという理由がよくわらかん。 MinGWじゃ駄目なのかい。
261 :
デフォルトの名無しさん :2008/04/16(水) 21:42:41
IntelliSenseが使いたいのか 頭のとんがった上司がいるのか その両方か
>>259 Gauche-win32-0.8.13.exeじゃだめなの?
exeがつくれないとプログラムをしている気にならないんじゃないかな? Windowsしか知らなかったころはexeをつくれて一人前の開発環境というイメージだった。
>>263 自分で使うコードなら別にexeにする必要ないんだけど、ちょいと配布したりするのに実行環境必要とか言うと困るからじゃないの?
どんなプログラムだかしらないけど。
265 :
233 :2008/04/16(水) 22:28:13
>>260 理由1、VCの便利な機能が使いたい
理由2、schemeという小さな言語がVCでコンパイルできない理由がわからない
仕様も小さいんだしVCでもコンパイルさせてくれよ・・・
というのが本音です。
>>261 > IntelliSenseが使いたいのか
どちらかというとこっちです。
でも後者の方が面白いので、できればこっちを強弁したいですねw
>>262 すみません、書いてませんでしたが自分は
>>233 です。
C++に組み込むので、別途インストールというのはちょっと考えられないのです。
>>260 MinGWはMSYSが要るのか要らないのかはっきりしてほしいw
POSIX べったりという表現が面白かった 確かに逆から見たらそう感じても不思議じゃないね
>>266 実行だけなら要らない。ランタイムのDLLさえも要らない場合が多い。
最近のVCはRuntime(もちろん自由に再配布できるが)を入れないといけないことが多い。
VCじゃなきゃ嫌んの人はMinGWをよく知らないだけではないかと思う。
Schemeは実はC及びC++(のスタックフレーム)とは相性が悪い。 ファーストクラスの継続があるため 関数からreturnする時に 単純にスタックフレームを開放できない。 また、末尾呼び出しの最適化は C及びC++では行えない。 (だからSchemeの場合はバイトコードインタプリタの方が 効率が良かったりする。) これらの理由により、ネイティヴコードをポータブルに吐く方法がない為 GCC用のソースは手を入れない限り他の処理系でコンパイルできない場合が多い。
>>265 > 理由2、schemeという小さな言語がVCでコンパイルできない理由がわからない
> 仕様も小さいんだしVCでもコンパイルさせてくれよ・・・
君がScheme処理系を書けば良いのでは?
ちなみにschemeは仕様がすっきりしているだけで、 実行環境はさほど小さくない。処理系もけっこう大きい。
書けねえよ
273 :
233 :2008/04/17(木) 00:22:42
>>268 自分のプログラムでは外部ランタイムは無用です。
あと全く別の問題として、schemeのために開発環境を変えるということ自体がちょっと嫌なんです。
>>269 ・ネイティブスタックを使わず、自前のスタックかメモリを確保すれば
継続でもコルーチンでもポータブルに作れます(作れるはずです)
・バイトコードを採用すれば、処理系のコードは自然とポータブルになります
・ネイティブコードをポータブルに吐く方法なんて自分は一つも知りません
って、あまり面白くないツッコミですみません。
あと、schemeがポータブルに実装できないわけではですよ。
実際、明らかにwindowsのようなマイナーな環境(?)を無視した作りのgaucheでも、
コア部分はコンパイルできるわけですし。
>>270 今までは、あまり実用にならなそうなマイ言語を作っている人を、
内心バカにしたりもしていたのですが(すみません)
schemeでも他の言語でも、自作の処理系が一つあると意外なところで使えたりするのかもしれませんね。
scheme作るのも面白そうなので、時間があれば是非やってみたいです。
スキルないのが丸分かりの自己紹介ありがとう。
漏れも学生時代はMacではHyperCardを必要とするスタックは軟弱物。Pascal or Cで実行形式をつくるのがカコイイだと思っていたし、 Win32でもランタイムを必要とするVBを見下し、CをつかってもMSVCRTの依存すら排除しようとしていた経験のある俺には233の気持がわかる気がする。
ゲーム作るときはマシン語モニタをBASICで自作することから始める時代の話だな。 そんなMSXが許されるのは小学生までだよねー
スキームの質問 今、手元にThe Little Schemerがあるんだけど この本に書いてある例題は全部 Dr.schemeで実行できるの?
1行で全部の処理をするんでなくて、 まずcdrする 次にcarする、 最後にcdrする、 と3段階に分けて処理をしたいんだけど、 どうすればいいの? BASICみたいに a=(a,b,c) みたいにリストを変数に代入して、 ってできるの?
(let* ((a '(a b c)) (a (cdr a)) (a (car a)) (a (cdr a))) a)
(progn (setq a '(a b c)) (setq a (cdr a)) (setq a (car a)) (setq a (cdr a)) ) Lispならこんなのでいいんでないの
CL全然知らないんだけど手続きぽく書きやすいのかな。
端っこに括弧がいるから慣れない人は書きにくいと思う。 Lisp脳が育つと括弧を空気のように感じるようになる。
いや、Schemeにくらべてってこと。
再帰じゃなくloop使うと手続き型っぽくなるよ。(カッコだらけだけど)
>>273 > あと全く別の問題として、schemeのために開発環境を変えるということ自体がちょっと嫌なんです。
いずれEmacs+Schemeに慣れればVisual Studioには戻りたくなくなる。
そうでなければそもそもSchemeには縁がない。
>>284 SICPやSchemerシリーズやっている人は、
schemeが手続き型っぽく書けないと思い込んでいる人が多い。
ただそれらのテキストが関数型っぽく書いているというだけなのに。
Common Lispとさほど変わらない。
>>287 本当?かなり違うと思ってた。
例外とかgotoとかを手続型と
さほどかわらないように書くにはどうするの?
手続き型っぽいのがgoto?
つ loopマクロ
つ 継続
; f(g(h(x)))
(apply (fcompose f g x) x)
みたいなものができる筈なんで
>>279 の処理も
(fcompose-and-apply cdr car cdr a)
みたいにできるfcompose-and-apply(仮)が書ける気がせんでもない
tagbody は?
emacs lispならconditon-case(try..catch)とかsignall, error(throw)とか unwind-protect(finally)とかあるから殆んど手続き型と同じように書けるよ R6RSにも似たようなものがあるはず
>>288 例外はr6rsに入ってただろ。手軽にやりたいなら継続呼べばいいし。
goto相当のジャンプも継続が使えるけど、
継続はラベルじゃなくてオブジェクトなので使い勝手をgotoみたいにしたいなら
自前でラップしなきゃ駄目かもな。
S式でいいならマクロでなんでもできる。CLならCインタープリタの実装まであるくらいだ。
Google Apps APIs をlispから使う方法ないのでしょうか?
ないならnilを、あるなら使い方を返していただきたいのですが。
303 :
277 :2008/04/17(木) 23:07:24
>>233 の人ー、WiLiKiで、VC++の項目とか、
Windows向けインストーラの話とか、
色々更新されたから行っといでー。
釣りじゃないなら、話し合う絶好の機会だよー。
>>286 schemeの処理系を書く環境と
schemeを書く環境はちょっと違うと思うぞ。
>>304 SchemeでSchemeを書けばいいジャマイカ
いまおれいいこといった と思ってるに違いない 空気読めない奴の発言は反吐が出る
>>306 何でそんな事でいきなりヒートアップするんだよ。
まあ、元の話題はC++にSchemeを組み込みたい、って話だったから、
>>286 のレスが明後日の方向を向いてるとは、俺も思うけどさ。
SchemeでSchemeの処理系を書いてParentheCでCにポートすればC++にSchemeを組み込めるな。 Cで書かれたTinySchemeをマージするほうが簡単かもしれないがw
なんか知らんが1人イラついてる人が居るな。 本当に自分の方がレベルが高いなら、 別に同じレベルと思われても構わないという態度で 淡々としてれば良いのさ。 あるいはそんなものスルーして自分の興味のある別の、 レベルの高い話を振ればいいよ。
(eval (read))ですね、わかります
314 :
sage :2008/04/18(金) 11:25:53
MOP レシピ集みたいなページはありませんか?
XML-MOPのコードはどうよ?
ソケット関係で挫折しそうなんだけど、苦労するといいことあるのかな 同じ内容のpythonのプログラムは動くこと確認したんだけど
仕事じゃないなら好きにすればいい。
http://www.cs.indiana.edu/classes/c311/pmatch.scm ここのpmatchを、define-macroで書き直すとどうなるでしょうか。
syntax-rules内の'...'の展開のされ方がよく判らんのです。
1つのパターン内に'...'が複数使われているのがあって、
これは残りの同一のパターンにマッチするという事なんでしょうか。
例えばこの部分とか
((_ (rator rand ...) cs ...)
(let ((v (rator rand ...)))
(pmatch v cs ...)))
それぞれに(別々に)マッチするって感じだね。 これだから衛生的なマクロは嫌いなのだ。
質問が判りにくいですね。つまり上のrandの後の ...と、 csの後の ... の中身は違っててもいいのかどうか? ってことです。 '...'はその文脈の残り((car . cdr)のcdr)という意味しかない と考えてよいのでしょうか?
>>320 やはりそうですか。
だとするとまぎらわしいですね。
あと1つ確認したいのですが、
>>319 の意味を変えずに
((_ (rator rand . rest1) cs . rest2)
(let ((v (rator rand . rest1)))
(pmatch v cs . rest2)))
こういう風に書き直す事は可能でしょうか?
リストじゃないからできないとか昔どこかで見たような気がするのですが。
rand ... の部分は0個でもマッチする rand . rest1 と書くと1個以上になるから意味が変わってしまう
そうだったんか… キモイなそれ
>>324 つまり書き直すなら
((_ (rator . rand) . cs)
(let ((v (rator . rand)))
(pmatch v . cs)))
という事でしょうか?
そうだけど実際に使って確認するのが一番いいね (define-syntax hoge (syntax-rules () ((_ x ...) (list x ... x ...)))) デフォルトで ,@ がついてるようなイメージ (defmacro hoge (&rest x) `(list ,@x ,@x))
((_ ((symbol value) ...) . body) ((lambda (symbol ...) . body) (+ value 1) ...)) とか、すごい展開をするんだよね、 ... って。
Commom LISPの方はSchemeのそういうコードを移植したい時 どうしてます?defmacroに変換するようなのないかな。
>>309 ParentheCってlambdaすら処理できないみたいだよ。
これでCにポートしろなんて詐欺もいいとこ。
使い方を理解しないで使うからジャマイカ?
トランスレータに使い方も糞もあるか
Scheme処理系は腐るほどある ライブラリも (C/C++なら) たくさんある 後はそれを組み合わせることを考えよう
コイツ
>>334 、なんでこう喧嘩腰なんだろな。氏ね。
糞チョンとシナチク氏ね。
ジャマイカ発言の後は荒れるんだよ。
>>333 あれって使い方でどうにかなるもんなの?
DRAKMAがubuntu 7.10 sbclのasdf-installでこけて止まる
>>341 SBCL 1.0.16
DRAKMA 0.11.5
ubuntu 7.10
で今試したけど大丈夫だった。
どうでもいい
またexe厨か…
schemeでなくてlispでexe作ったら? newlispなんかだと簡単だよ SBClやCormanLispなんてのもあるけど
別に言語まで変える必要もないと思うけど。 処理系のソースがあるんならschemeのソースを埋め込んで スタートアップで呼び出すようにすれば完成でしょ。 VMで動くようなのはコンパイル後のやつ入れとく。 これだからオプソって意味ないんだよな。
>>343 Gaucheのtarball落としたら中にgencompってのがある。
それでVM用コードにして適当なmainだけ書いてgccでコンパイル。
349 :
デフォルトの名無しさん :2008/04/20(日) 22:24:02
「プログラミングGauche」でSchemeデビューしようとしていきなりつまずいてます。 (define 'a #f) (set! a 1) (display a) これは gosh> quote gosh> 1 gosh> 1#<undef> となって動くんですが (define 'line #f) (set! line "foo\n") (display line) と変えるとエラーになります。 gosh> quote gosh> *** ERROR: symbol not defined: #<id 0x80eb100 user::line> Stack Trace: _______________________________________ gosh> *** ERROR: unbound variable: line Stack Trace: _______________________________________ どこが間違ってるんでしょうか?
ワロタ (define 'a (define 'line ここが間違ってる。それぞれ (define a (define line が意図するものだと思う。 (define 'a は (define quote (lambda(a)〜 と解釈される。
>>350 多分 *scheme* バッファの中で一度 (define a なんとか) を
実行してたから、a が定義されていたんですね。
*scheme* バッファを再起動してたら両方とも動かなくなって
気付いたと思うのですが。
ありがとうございました。
こういう記述間違いは処理系作者からは斜め上で予測不可能なんだよな。 quoteを再定義したいなんて思わんし、エラーにすべきか。
353 :
デフォルトの名無しさん :2008/04/20(日) 23:51:39
Gauche scheme interpreter, version 0.8.3 [utf-8,pthreads] という環境で、 #!/usr/bin/gosh (define (main args) (while (not (eof-object? (set! line (read-line)))) (print line)) 0) というスクリプトを書いて euc-jp なテキストファイルを読み込ませたら ~$ gosh test.scm <text.txt *** READ-ERROR: Read error at "(stdin)":line 2: read-line: encountered illegal byte sequence: #*"\xc1\xcf\xc0\xa4\xb5\xad\t1\t1\t" Stack Trace: _______________________________________ 0 (read-line) At line 3 of "./test.scm" 1 (letrec ((do (lambda () (if (not (not (eof-object? (set! line (rea ... [unknown location] というエラーになりました。 euc-jpなままで読んでeuc-jpのまま書き出すにはどうすればいいのでしょうか?
355 :
デフォルトの名無しさん :2008/04/21(月) 00:46:50
こうなりました。with-ports を使おうとしたら、 *** ERROR: unbound variable: with-ports となりました。何故? #!/usr/bin/gosh (use gauche.charconv) (define raw-in (current-input-port)) (define raw-out (current-output-port)) (define in (wrap-with-input-conversion raw-in "eucjp")) (define out (wrap-with-output-conversion raw-out "eucjp")) (define line #f) (define (main args) (while (not (eof-object? (set! line (read-line in)))) (display (string-append line "\n") out)) 0)
何故?とか言う前にフォルダ内検索しろよ
slimeで対応する() に自動で色がつかなくなることがあるのだけど どうすればもどるの? 他に開いてるlispのバッファーを全部kill bufferすれば直るけど buff殺さないで直したい
>>357 どういう環境だとそうなるの?
漏れはそんな現象に遭遇したことない。
show-paren-modeがなんらかのタイミングでoffになったとか?
C-c C-p を何度もしてるといつのまにかなる
360 :
デフォルトの名無しさん :2008/04/21(月) 08:21:48
>>356 のヒントをもとに検索してみた。
/usr/share/gauche/0.8.3/lib$ find . -type f | xargs grep with-ports
/usr/share/gauche/0.8.3/lib$
なにもみつからなかった。
lispの場合、どのぐらいの大きさのprogramになったらファイルを分けるの?
大きさを基準にしては分けない
日本語の正規表現処理はできないと思っていいのでしょうか? sbclなのですがどの日本語コードを使うのがお勧めなのでしょうか?
cp932と言ってみるテスト
Schemeのオブジェクト指向 BOS (Bryan's Object System) MEROON ・・・Christian Queinnecによる。情報があまり無いけど有限要素法とかつかえるらしい。runge-kutta-4にあきたらやってみる。 SCOOPS (Scheme Object Oriented Programming System) Tiny CLOS ・・・なんとたったの850行!"The Art of the Metaobject Protocol"に出てくるsimple CLOSよりコンパクトな学習用。 YASOS (Yet Another Scheme Object System)
>>364 UTF-8で普通に使える処理系が多い(または増える)と思う
処理系によるんじゃね?
>>355 with-portsは組み込み手続きだから見つからないって変だな。
プラットフォームは何? インストールはどうやった?
一方exe厨はバイナリを配った
372 :
355 :2008/04/21(月) 22:53:03
>>370 Debian sarge(3.1)で、aptitudeからインストールしました。
Gaucheのバージョン(0.8.3)が古過ぎるんでしょうか。
~$ aptitude show gauche
パッケージ: gauche
ステータス: インストール済み
自動的にインストールされる: no
バージョン: 0.8.3-3
優先度: 任意
分類: interpreters
保守担当者: Hatta Shuzo <
[email protected] >
展開サイズ: 4096k
依存: libc6 (>= 2.3.2.ds1-4)
提案: slib
推奨: r5rs-doc, gauche-doc
詳細: A Scheme implementation designed for script writing
Gauche is a Scheme implementation developed to be a handy script interpreter, which
allows programmers and system administrators to write small to large scripts for their
daily chores. Quick startup, built-in system interface, native multilingual support are
some of the author's goals.
~$ gosh -V
Gauche scheme interpreter, version 0.8.3 [utf-8,pthreads]
~$ gosh -i
gosh> with-input-from-port
#<subr with-input-from-port>
gosh> with-ports
*** ERROR: unbound variable: with-ports
Stack Trace:
_______________________________________
Gaucheスレ別に立てて関係者がサポート汁。
0.8.13のtypoかと思ってたらほんとに0.8.3か。古すぎるだけだと思う。
>>373 ごもっとも。WiLiKiの初心者の質問箱とかの方がふさわしい。
よくあるまとめwikiサイトみたいなの作れば良いのに。
Schemeのループの構文がわからないので教えてください。 下に書いたコードのbreakがうまく動かないのですがどう書いたら正しいのでしょうか? 大元はRnRSに載っているrunge-kutta-4の計算で、元々は無限ループです。 (letrec ( (n 100) (ls '()) (loop (lambda (s) (if (not (= n 0)) ((set! n (- n 1)) (newline) (write (head s)) (loop (tail s)))) (break the-states)))) (loop the-states))
((set! こんな使い方はない (break breakはどこにも定義されてない
そのbreakはどこを参考にして持ち出してきたの?
379 :
364 :2008/04/22(火) 10:06:06
CL-PPCREで日本語を含むパターンを見つけたかった ( scan [ホゲ(プログラム中に直接書いた日本語)]+ , ホゲ(ファイルから読み込んだ日本語) ) 同じ ホゲ という単語が入ってるのに認識しなかった
380 :
364 :2008/04/22(火) 10:10:58
(print ホゲ(ファイルから読み込んだ日本語)) をslimeでC-C C-P すると動くが C-C C-Cすると動かない(sbcl) sbcl --load nihongo.lisp でも動かない
>>379 sbclはエンコーディング設定が良くわからないけど、
CLispではCL-PPCREで日本語が問題なく使えた。
最近, あちこち SICP だらけなのは SICP の邦訳だ出たせい? こんなん有り難がって読むくらいだったら, ファイン万物理学読めよorz
最近?
両方読めばいいじゃん。
>>380 ファイルのエンコーディングもsbclの設定もどうなっているか分からないけど、
漏れの手元のutf-8に対応している処理系なら軒並みできている。
設定は各処理系のマニュアルを参照するのが一番確実。
386 :
デフォルトの名無しさん :2008/04/22(火) 16:13:01
Expected class definition, found ( which may not be written here ってどういうエラー?
教科書もなくはじめて実行してるのでわからないのです。 どっかのサイトからコピペしたらこういうエラーが
何の処理系とかどういうコードかとかどのサイトからとかを書かないのは何故?
例えばこういうのだったら (define my-abs (lambda (x) (cond ((< x 0) (-x)) ((= x 0) 0) (else x)))) 一番前の(にマーカがついててエラーメッセージがでます どのプログラムはってもこういうメッセージがでるんですけど
>>390 君の場合は、もう少し他人とのコミュニケーションの取り方から
勉強した方が良いよ。
>>389 人の善意を当てにしてるんじゃない?
なんかそういう質問の仕方増えてきたよね。
ここ親切だからなー。
でも、Schemeでbreakなんて使わないよなJK。www
まあ、紛らわしいよなw
>>382 Feynman Lectures on Computationも読んだけどけど何か?
SICPにはrunge-kuttaが載ってるけどFeynmanには載ってない。
Feynman厨ウザ
「Lisp文化にはLisp 1.5 → MacLisp → CommonLisp の『MIT系Lisp文化』・・・」という文書に出会った。 ほかの系統にはどんなのがあるのでしょうか?GNU系とかかな?w
それと対比するならInterlispで代表されるXerox系Lisp文化じゃね? GNUとか出てくるよりずっと前の話だよ
GNUなんてただのパクリ集団じゃん
よくわからないなら書かないほうがいいよ
いや、本質をよくとらえている。
自画自賛乙
GNUを擁護したがるのは都合の良い解釈ばっかり見てる 最近知ったやつだけだろ
どうしてもGNUが叩きたいという奴以外にとってはどうでもいいだろ。
まぁ、GNU知りたての学生さんは 「GNUを叩いてる俺って、なんてわかってる奴なんだろう♪」 ってなもんだわな。
>>408 都合の良い解釈もなにも、GNUのポリシーは単純だし、
嫌ならGNUのソフトは使うべきじゃないってくらい単純な話だと思うんだよね。
スレ違だから、他んとこ行って欲しいんだけどw
なあ、既成の言語の機能をlispやschemeで 実装してしまうスレ立てないか?
>>412 lisp発祥でない機能で、面白いのってどういう機能があるんだろうね。
昔にlispでやってたら駄目なわけだよね?
なんで? 多分スレの目的は既成の言語を馬鹿にして諭す事だから lisp視点で面白いのかは判らないけど
>>412 こういうのか?
(define alias define)
>>414 なんで、って言われても、そうなの? >413
まあ、なんらかの確信があるんだろうなwww
人を見下したかのような人しかいないから、ぴったりだと思って
回りくどいスレタイより「lisperが他の言語を馬鹿にして諭すスレ」 でいいよ。
…春だなあ。
逆に馬鹿にされるのがオチ。
>>413 他言語の構文をread macroでやらかすスレとかならおもしろいかもね
>>417 コンプレックスがひどいと、そう見えるらしいよ。
>>404 元々、プロプラの物をオプンで代替する活動だからね
新規性が売りじゃないから GPL のラベルを付ければ何でもオケ
>>421 そいういうんだったら逆になんでもS式に変換してみてほしい。
S式Rubyなunacceptable acceptable lispとか見てみたい。
>>424 たしかRuby1.8では、ソースから変換した構文木を直接evalしてたはずだから
それを括弧で囲めばS式になるんじゃないか?
今のところRubyは食わず嫌いだが、ソースがS式になるなら使ってやってもいいな
RubyはMatzLispでPythonはGuidoLispなんだよ!とかなんとか
lispuser.netだかどこかで見せてくれた最高にキモイlispコードってのがまさにそれじゃないの?>> read macroでホゲ
春めいた流れになってきたなw
君達、LispとRubyのいいとこ取りの言語があるのを知らないのかい?
ろくなライブラリーも無いうちからLispとRubyのいいとこ取りの言語を名乗るから評判悪いんだよなw むしろGaucheがArcのいいとこ取りすれば解決しそうだ。
思い出せば私のエッセイもいつも最初は不評だったものだ。
世界の料理ショーの人頑張ってライブラリ作れよw
ふーむ、、、何故あなたはそう確信するのですか?
ニヤニヤ
Matz>Graham だな。Lisp厨涙目w
何の話だ
他の言語にいちゃもんつけるお仕事、ご苦労様です Ruby厨の人も大変だな
Ruby厨さえ居なけりゃ、Rubyも良い言語なのにな。w
Lisp On Railsってあるの?
それなんて Kahua
Kent Dybvigの本と迷ったが一番定評があるコッチをやることにした。 Programmation fonctionnelle en scheme by Jean-Michel Hufflen, Masson, Paris, 1996 EUR 26.13 日本語版があればDybvigのを読みたかった。 読み終わったらStruktur und Interpretation von Computerprogrammenを読む予定。 でもLittleが流行ってるから先に読みたいな。でも英語がちょっと orz
仏蘭西語と独逸語が堪能なら英語くらいなんとかなるだろ
独仏国境だから二ヶ国語は馬鹿でも生活の中で自然に覚える。 英語は勉強が必要。でも勉強するならProgrammationの方が楽しい。
このスレに常駐したらLispとSchemeが堪能になるようなもんかw
448 :
デフォルトの名無しさん :2008/04/23(水) 21:42:12
>>441 厨が集まる言語の条件:
・誰でも演習レベルまでは直ぐいける。
・ハイレベルに移行するには何らかのセンスor適切なガイドが必要
・エキスパートによって成果が出ている。
(* 164.042160 26.13) ⇒4286.421640799999 ぐは、結構高い!
>>400-402 Lispには大きく分けて東のMACLISP系と西のInterlisp系の二つの主流が存在。
MACLISP系:Lisp 1.5 → MacLisp → CommonLisp の『MIT系Lisp文化』
Interlisp系 :Interlisp-10→Interlisp-Dの対話型環境の『Xerox PARC系Lisp文化』
GNU EmacsはMacLispから分かれて来てるからMACLISP系に入れる。
schemeはその流れに入ってないの?
>>451 schemeは当初maclispで実装されたし、影響もそれなりにあるからmaclisp系っていえば
そうとも言えるんじゃないかな。
MIT系であるのは確かだよね。
収束の遅い公式を使うからでしょ
わかった方教えてください。あしたまた来ます。お願いします。
最後の行ですね、わかります
write時の問題かな。2進的には同じ数値になってるんじゃないか?
3.14159265358979 までは合ってる。 どう見ても問題ありません ><
やっぱり合ってそうですか。 計算以外のところが原因なのかな? ますます原因不明ですが今日のところは落ちます。 有り難う御座いました。またあした。
11個目から+nan.0なのか。ストリームの意味無いじゃん。ちょっとワロタ。
眠いしよく見てないんで直感だけで書くけど、 euler加速の計算のdenominatorが0になってるんじゃないの?
無限ストリームでスマートに多倍長の演算でもしてるのかと思ったら 違うのかよ
Amazon.co.jpのプログラミングGaucheのカスタマーレビュー書いたバカ誰よ? On Lisp書いたの誰だかわからないようなのが何書いても信憑性ないんだけど。 折角いい本なのに余計なことしやがって(-_メ)
藻前が書けばいいジャマイカ。 まあ、こんなところでちくちく攻撃してるやつの書評なんか読みたくもないがww
Amazonの書評って、分野によらず全然アテにならん。 鋭いこと書ける人は、ブログやら何やらで幾らでも「読者」を獲得できるこの時代、 大企業の威光を借りて「ここならボクちんの鋭いヒヒョウを皆に聞いてもらえるるる〜」と興奮しちゃうのは、 「自分では自分の鋭さを信じているが、どういうわけか(笑)他人にはそう思ってもらえない人」 だけになっちゃったんだ。
アテになるかはともかく、とっかかりぐらいにはなるぞ Amazonに限らずネットの情報なんて大部分はそんなものだろう
アマゾンレビューなぞ大抵は書きっぱなしの自己満だから気にすんな。
GaucheはSchemeの方言(笑) まあ尼のレビューの意義なんて内容よりも書く事自体にあるんじゃないのか。 文句があるならもっと良いレビューを書けばいいだけの話。
自分が思ったことレビュー蘭に書いたくらいでこんだけ叩かれるんだから Gauche本のレビュー書くのも大変だよなwww 一体、誰が書けば納得すんだよw
思ったことを書いたから叩かれるのではなく、その内容がアレだから叩かれるんだよ。 誰が書けば納得するのか、じゃなくて、誰が書いても、内容がまともなら納得するんだよ。 馬鹿じゃないことがその人にとって大変なことなら、レビューを書くのは確かに大変だ。
perl,ruby,pythonのようなLL系やHaskellやOCamlのようなML系も独自のmakefile形式を持ってるけど scheme版のmakeみたいなの無いの? S式で依存関係とか生成規則をガリガリ書けるようなもの
うちの研究室の先輩が作って代々受け継がれているものならある。 結構便利。公開してないけど。
475 :
364 :2008/04/24(木) 13:12:26
>>380 自分のバグでした
正規表現で文字の置き換えしようとして
全角文字の後ろ半分のバイトだけ置き換えてたみたいです
>>450 elispはshallow bindingじゃないから、
MacLisp系というのには難がある。
基本関数名もあまりMacLispMacLispしてない。
>>477 少なくとも、InterlispよりはMaclisp系だよ。とりあえず defun だし。w
479 :
デフォルトの名無しさん :2008/04/24(木) 14:38:07
>>477 emacsのリファレンスにもmaclispに強く影響を受けてるって書いてるじゃん。
rmsがmaclispで育ってるんだから当然っていえば当然だと思うけど…。
>>479 MirandaとかErlangとかLuaとかAliceとかCgとかHyperTalkとか載ってない。 orz´
>>482 p.334からp.337の "3.5.3 Exploiting the Stream Paradigm" !
>>484 日本語版ではp.198からp.200にあった。
Gauche本を読んでcontinuationを理解した春の夕暮れ。 今日は良い日だった。
ここは学坊しかいないのか?
いや、声が大きいだけ
今日の勉強の成果。SICP p.328-334
Ex 3.59
exp-series
cosine-series
sine-series
Ex 3.60
mul-series
Ex 3.61
invert-unit-series
Ex3.62
div-series
tan-series
ttp://codepad.org/Lh7m712l
>>473 ASDFをGaucheに移植すればいいんジャマイカ?
ASDFはCLだす
だから移植なんじゃねーの?
まずGaucheでCommon Lispを書いて、その上で動かせば桶
よしまかせた!
>>494 Gaucheに移植→Schemeに移植
>>500 Excel2003は190項までで打ち切ってる。
>>501 accelerated-sequence euler-transform みたいなの使うんかな?
テーラー展開って geometric-series power-series calc-series mul-stream を組み合わせると作れるのか。 SICPには書いてなかった。ネット上にも geometric-series power-series calc-series なんてなかった。
505 :
ムー子 :2008/04/26(土) 15:12:34
Scheme に let と let* という2種類の構文がありますが、 2種類を用意する必要性ってあるの? let* だけでいいのでは?
>>505 (lamnda (x)
(let ((x (car x) (y (cdr x))))
...
が, 出来なくなるじゃないか.
必要性はありません。 define、set!、if、lambda、quote(とマクロ定義構文)さえあればいいのです。 letもlet*もlambdaに展開されるマクロです。 letrecはlambdaとset!に展開されるマクロです。 ただしlet*はletで記述できますが letはlet*では記述できません。 たぶん。
508 :
ムー子 :2008/04/26(土) 17:04:01
> letはlet*では記述できません。 (let ((name1 value1) (name2 value2)) ...) は (let* ((name1 value1)) (let* ((name2 value2)) ...) のように変換できるのでは。。。
509 :
ムー子 :2008/04/26(土) 17:05:57
510 :
ムー子 :2008/04/26(土) 17:10:10
>>507 > letはlet*では記述できません。
再挑戦。
(let
((name1 value1))
...)
は
(let*
((_name1 value1))
(let*
((name1 _name1))
...
に変換できそう。
ここで _name1 はユニークな識別子とする。
>ムー湖 黙ってろ
束縛する識別子が1つならletもlet*も等価。 2つ以上ならそれぞれが同じ環境に属し かつそれぞれが互いに不可視でなければならない。 let*の入れ子にしても1つのlet*で束縛しても 実現できない。 (と思う。たぶん。)
(let ((name1 value1)(name2 value2))...) =>((lambda (name1 name2) ...) value1 value2) (let* ((tmp1 value1)(tmp2 value2)(name1 tmp1)(name2 tmp2)) ...) =>((lambda (tmp1) ((lambda (tmp2) ((lambda (name1) ((lambda (name2) ...) tmp2)) tmp1)) value2)) value1)
>>513 それは可愛そうだろ、せめて中間式くらい書いてやれよ
(let* (x x) (y x)...) => (let (x x) (let (y x)...
とか
515 :
デフォルトの名無しさん :2008/04/27(日) 01:18:10
>>515 Windows版ならMzScheme.exeを実行するだけです
インストーラはファイルを解凍するだけなので
ショートカットやpathの設定は自分でやってください
517 :
デフォルトの名無しさん :2008/04/27(日) 03:03:56
宿題ならそういうこまごました「実行のしかた」とかそういうのは 授業でやってるはずだと思うが?
519 :
デフォルトの名無しさん :2008/04/27(日) 14:57:56
たぶん言ってたと思います(-_-;) 「あっダウンロードすればいいのね」くらいにしか聞いてなくて 他のことしていて・・・ 自業自得なんですけど、実行できないと何もできないんですよ(>_<) どうか、助けてくださいm(_ _)m
>>520 …乱世で生き抜くには余りに優しすぎる男よ…
DrSchemeを無事にインスコできたら下のプログラムを実行できることを確認せよ。 そうすれば、言語設定とかをいじる練習になる。 (require (lib "turtles.ss" "graphics")) (turtles #t) (define (dr n) (if (< n 0) (display "終了\n") (begin (draw (* n 4)) (turn n) (dr (- n 1))))) (dr 100)
515さんみたいに授業でLispに触れる人は少なくないでしょう。 しかしLisperはその数に比べてあまりに少なく感じる。 なぜだろう。 マッカーシズムの嵐でも吹き荒れていて Lisper狩りが行われているのだろうか。 (マッカーシズムっていうとLispの場合は逆の意味みたいだけど)
>>523 母国語として(無理してでも)使う人が少ないからじゃない?
教養として学んでる人は沢山いるとは思うけど、実際書くのはRubyとか…。
そういうギャップを埋めようとしているGaucheは素晴らしいと思う。
>>524 Arcも書き捨て用スクリプト言語を意識した構文が入ってるCLという感じ。
GaucheもLibraryのSRFIサポートがもう少しCPANみたいに使い易くなればなぁ。
ギャップを埋めたいなら埋め込みScheme SchemeをCのライブラリとして使えば、GUIもシステムコールも使い放題です 「ライブラリをラップするライブラリがない」 この閉塞感を打ち破るにはC言語の力が必要なのです
>526 今日も乙です
春だなぁ。
Arcで作られたスパムフィルターを使うと
>>526 のような香具師が社会から完全にフィルタリングされてしまうようです。
CUDAみたくGPUで汎用コンピューティングを通常の3倍の速度で実行できるLisp系の処理系ってないの?
やってみたいなあ
Lisper同士でも3倍速で実行したらネ申だな。
おどるあほうにみるあほう どうせあほうならみないほうがましさ
NVIDIAの並列コンピューティングプラットフォームか。 CUDAは今のところC言語しかないからLisp/SchemeをC言語にパースするしかないんジャマイカ?
>>525 > GaucheもLibraryのSRFIサポートがもう少しCPANみたいに使い易くなればなぁ。
どういう意味? 標準で同梱されてないSRFIを使う場合ってこと?
Gauche-glはOpenGL 1.0〜2.0のだいたいのAPI と、 GLUとGLUTの一部をサポートしています。 NVidia GLX 1.0-7174で動作します(nVidiaのOpenGLドライバ)。 こういったものが作成されないと使えるようにならないでしょう。 現状ではCgやHLSL、GLSLといった高級シェーディング言語もC言語経由で使用してます。 今までに3つGPGPU専用のプログラミング言語が登場してます。 ・ Sh:ウォータールー大学 ・ Scout:並列コンピュータメーカのThinking Machines社(1999年オラクルが買収) ・ Brook:スタンフォード大学
>>538 ソースをパースし解析木を作った後、 バイトコードをメモリ上に生成、
そしてそのメモリ上のバイトコードを、 GPUドライバが実行します、ってことだろ。
>>537 たしかにSICPやってた頃におれも、SRFIのstreamとか使いにくいと思った。
複数のファイルに分散してるのがわかりにくいと思う。
CPUの性能向上率は18ヵ月で2倍、いわゆるムーアの法則に従うが、GPUにおけるムーア則は12ヶ月といわれている。 PUに比べて単純なアーキテクチャを持ち、伸びしろの上限もまだ見えていないGPUとCPUとの性能格差はますます広がるだろう。 単体の処理性能は理論値で300Gflopsを超え、1システムに4台のボード*1を組み込めるため、 スパコン並みの1Tflopsの処理性能が100万円以下のシステムでも実現可能である。 こんな安価で高性能のプロセッサを使わない理由はない。 Lisp系言語でもサポートするべきだと思う。
SRFIはRFCみたく番号付けるのはいいんだけど、別名が欲しい 毎回無駄にfindが大活躍だぜ
GeForce8800では128個あるプロセッサに同時に数千のスレッドを流すことができ、相互に通信可能。 処理能力は、500Gflops程度で、新しいアーキテクチャの出現でテラフロップスを突き抜ける日は目前に迫っている。
>>542 サポートがなくても2割をCで書いて8割をLispで書くとか
できるんじゃないの
>>542 条件分岐のペナルティが無茶苦茶でかくて、lispらしい
プログラムはまず書けないだろうけどそれでもいいの?
lispらしいプログラムを書かないのなら言語ブリッジがあれば
十分じゃないかと思うんだけど。
>>546 BrookあたりもStream Computingにあわせるようにコードを吐くから、Lispでも最適なコードへ変換してコードを吐き出す必要はある。
最初はベクターとかストリームだけでも早くなればありがたいと思う。
>>546 コンパイラが賢くなりゃいいんじゃね
もしくは *Lisp とか CM Lisp とかの方向だってある
Connection Machine
今すぐに出来ることはないの?
GPU Gems 2 でも読んでみるか。内容がピンと来ない。 デスクトップも1Tflopsの時代なのか・・・
GPUには得意、不得意がある。大規模な並列演算は高速に処理できるが、複雑な分岐や判断が必要といった処理は効率が悪くなる。 nVidiaのTesla向けプログラムでも、NVIDIAが用意しているツールとライブラリ「CUDA」を使って、並列処理を意識した実装が必要。 Lisp系でも同様の配慮は必要。何にでも使えるという幻想は棄てた方が良い。
>>553 汎用で出る速度な訳じゃないところがミソなので普通の生活してると役に立たない。
理論値ではそうだが・・・・実効性能でどこまで出るやら ムーアで伸びた分も、ちょっと油断するとアムダールで潰されそう 分野によってはまず計算機屋さんに超並列向きのアルゴリズムを考案してもらわないと
NVIDIA社のHPC分野向けブランド Tesla GPUの浮動小数点演算能力は、518 G FLOPS。 GeForce 8800 GT は336 GFLOPS。デスクトップの1Tflops時代は2年後ぐらいと予想されている。
Nvidia GeForce9600GTは208 GFlops。でもミドルレンジで安い。
>>547 GPUに計算させてその結果を受け取るには、最低でも一回、GPU側とデータを往復する必要がある。
このコストが洒落にならない程でかいので、
ベクターを高速化するためには最低でも10Mとか100Mを一度に扱わない限り高速化は難しいよ。
>このコストが洒落にならない程でかいので、 具体的に
>>559 シミュレーションとかで有限要素法を使うとそれぐらいはザラ。
>>560 GPUのドライバを動かすコストもあるだろうけど、主にレイテンシのことじゃないか。
>>560 システムメモリ(普段使っているメモリ) - GPU上のビデオメモリ 間の転送速度は
システムメモリ間同士のそれより圧倒的に遅い。
多分、数倍から数十倍は違う。
多分、
>>564 バスを介す関係で確実に遅くはなるよ。
少なくとも数年前まではそうだった。最近は変わったかもしれないが。
あと、フージョンチップを目論むAMDがメモリ業者を買収してるし、
この辺りに改善の可能性があることはたしか。
>>565 GPUが直接主記憶からフェッチしないのか?
どっちにしてもバスは通るべ。
>>566 それは無いだろう。
それじゃあ、「ビデオメモリ○○M搭載」には主記憶のサポート程度の意味しか無くなる。
少なくともハードウェア的にはフェッチできるよ。CUDAがどうだかは知らん。
>>568 だから主記憶のサポート程度の意味しか無いんだよ。(極論だけど)
>>569 フェッチできるかもしれんが、そうしたら、
GPU内で処理を完結するよりも圧倒的に処理速度が落ちないか?
>>570 そんな話をされたら、nVidiaとATIの中の人がやさぐれてしまいますよ。
なら、UMAにすればいいじゃん。
>>571 そりゃ落ちるでしょう。だから容量とのトレード。下手に使えば遅くなるが、参照頻度の
低いものだったら全体への性能へのインパクトは少ないだろうね。
そもそもビデオメモリ載せてないGPUだってあるわけだし。
素人ばっかりで笑える
フムフム本が出てから意味不明の会話が増えてきた。 俺もフムフムヌプヌプ本買ってくるか・・・・ λ.......
GPUもいいけどそれ以前にSSEの命令が吐ける処理系ってあるの?
それ以前にちゃんとした型推論が・・・
つまり、Lispは使えない言語だってこと。
そりゃ初耳だな
>>577 世界のどこかには、そんなものがあるような気がする
>>579 つまり、君はLispが使えない、って事だよね。
583 :
582 :2008/04/28(月) 01:01:19
さらに言うとだな、、、、
俺と同じだお!( ^ω^)人(^ω^ )
>>579
CISCからRISCに移行したときのような劇的なスピードアップが汎用GPUの標準搭載でも起こるのかね。 そうだとしたらそのうちCPU内部に組み込まれるのかな。
>CISCからRISCに移行したときのような劇的なスピードアップ 具体的に
>>584 GPUは用途が限られるからどうかな。
分野によっては革命的なことになるかもしれんけど。
> そうだとしたらそのうちCPU内部に組み込まれるのかな。
多分そうなる。
IntelとAMDはこれを前提にロードマップを作成しているはず
>>577 sb-simd なんつうものがあるようだが...
>>404 「有限の資源をやりくりするにはどうしたらいいか」という設問には、Lispはかなり不向きなのではないか。
>>588 そうでもない。ただ、そういうタイトなコードをLispで書くと見かけは
Cと大差なくなる。副作用使いまくり、型宣言ありまくりなので。
マクロを使えるのは楽なんだが。
>>594 でもまあ、下をみてもきりがないからなあ。
とりあえず、前進してるんだからそのうちどうにかなるかもよ。
yasuyukiさん乙。
>>590 板垣死すとも自由は死せず!
言論の弾圧は許さん!
チベットに自由を!
共産主義者の犬め!
わかったからとりあえずおまいは氏んどけ
>>594 ホントの初心者はフムフム本なんか読まないから問題ない
GaucheBox入れてみようかな。と思ったんだけど、 Meadowはこの前入れたばっかりなんだけど、アンインスコした方がいい? 「プログラムの追加と削除」の一覧に出てこないんだけど、 ひょっとしてファイル置いてあるだけなのかな?
くっそ、インスコしたのに立ちあがらねえし。
>>602 Gacheboxは既存のGaucheやMeadowには影響しないのでどんどんインスコしてください
とゆーかテストしてください。
>>603 こちらでも確認しました。
Meadow\install.exeが動いていなかった。直しますので、
とりあえず手動でMeadow\install.exeを動かしてみてください。
どうも、とりあえずMeadowは動きました。 -S\\ *scratch* Lisp Interaction になってるのですが、これがSchemeモードなの?
いや、死ねとは思わないけど、インスコさせてテストさせておいて モードが使えないとか・・・・ ふざけんなよ?って感じかな。
インスコするからだろ。 インストールしないとダメなんだよ
じゃあ、インスコじゃなくてインストロールした。 で、どうやったらGaucheのモードになるのか教えて(・-・)
*.scmってファイル名のファイル開いてもschemeモードにならない?
あと$HOME/.emacsに
(setq scheme-program-name "gosh -i")
ってかいておくか lisp-interactionモードで↑を入力して最後の")"の後ろでCtrl-Jを入れてから
ALT+X を押して run-scheme<Enter>と入力すると結構幸せかもよ?
それ以上は
>>607 に従ってくれよ。
なったなった!Schemeモードになったー!わーい!ありがとうカッコいいお兄ちゃん!
でも、どうやって使うのかわからないや。 やっぱ難しいね。
>>608 Emacs入門みたいな本を買ってこい
Emacs入門みたいな本を買ってこい
Emacs入門みたいな本を買ってこい
Emacs入門みたいな本を買ってこい
Emacs入門みたいな本を買ってこい
Emacs入門みたいな本を買ってこい
Emacs入門みたいな本を買ってこい
Emacs入門みたいな本を買ってこい
Emacs入門みたいな本を買ってこい
Emacs入門みたいな本を買ってこい
俺はterapadやxyzzyからgoshを呼び出すようにして使ってるけど
>>614 もそれで我慢したら?たいして難しくもないし
>>614 「プログラミングGauche」のサンプルコードをWindowsで試せるようにする目的で開発しています。
>>618 でもさ、Kahuaとか動かないし、Windowsで全部は動かないポイ
>>619 UNIXドメインソケットを使うKahuaは無理としても、
26章の継続サーバはMinGW版Gaucheで動いた報告あり。
「Emacs入門」って本はなかった。「 入門 GNU Emacs 第3版」か「 入門Meadow/Emacs」があった。 Amazonでは「 入門 GNU Emacs 第3版」の方が評価が高かった。でも\4,000もするので買わないw
なんというか・・本物の馬鹿だな いい本は少々無理しても買っといた方がいいのに 真面目にやる気がないならメモ帳でも使ってれ
ん?それ別人ですよ(^^;)
とりあえずBox作者さん乙です。 なんか尻馬に乗って偉そうに言ってる奴等がいるが、 お前らもどうせ大学で配布された手引書かなんかで覚えたんだろ? エディタの手引書で4000円なんか高すぎだろ。 んなことだからEmacsはエディタ界の老害とか言われるんだよね。 そのイメージでSchemeが語られる日も近いかもしれないな。
ここには本を出版してる関係者もいるからなw 糞高い本を買わない奴は馬鹿扱いされるYO!
値段で本選ぶ奴は本物の馬鹿だろ
マグロウヒル版SICPの訳本上下買った時はホントに辛かったです! ><
価格に内容が伴わない書籍は買わない
>>624 あれだけ高機能なソフトをダタで使えるんだから
マニュアルに4000円くらいかけたところで
全体としてはかなり安価だと思うんだが。
「 入門 GNU Emacs 第3版」には設定の話があまり書いてない。\4,000の価値はない常考。
「 入門 GNU Emacs 第3版」「Emacs Lisp入門」「「Emacs Lisp リファレンスマニュアル」と3冊で1セットだから初期投資は結構かかるよな。
糞Emacs擁護は糞Emacsスレでやれ
>>624 年間50万近く書籍に消費する俺に喧嘩を買えと言うことですか?
んー。手引き書なんか必要かなー。 Emacsは全部infoとネットの解説で覚えたし、 あれだけドキュメントが充実してるエディタって、 そうそうないと思うんだが。
>年間50万近く \41,666/month \9,615/week \1,370/day
>>631 初期投資って・・・・・格差社会なんだなあ・・・
金が無いならぐぐればいいじゃない
>>636 話がズレてるけどw
地方と都市部の格差や業種の格差など色々ある。この10年ぐらいでかなり構造変化が進んだと思う。
仕事してると相手先の話から実感する部分はある。
そこで図書館ですよ
>>635 ほとんど毎日の様に買っている上に専門書も買ったらそのくらい行くんですが。
まぁ活字中毒なんでしょうがないんだけどな。
図書館の利用をまじめに考慮する今日この頃
その前に床が抜けそうだけどな。
>>641 一冊の本をきちんと理解するほうがいいんじゃないか?
そんなに毎日買って、結局買うだけで満足してないか?
毎日本買って消化できるのがすげー
教科書じゃあるまいし、買った本全部理解する必要なんて無いだろ。 結果的に、たった1ページの記述が役に立つことだってある。
>>624 てかさ、Emacsなんてめちゃめちゃ充実しているマニュアルが
本体についてきているのだが、なぜ
> エディタの手引書で4000円なんか高すぎだろ。
> んなことだからEmacsはエディタ界の老害とか言われるんだよね。
などといわれなければならないのかわからん。
ほんとの初心者向けにはチュートリアルもついてるぞ。
いい加減、他所でやってくれんか
>>645 Emacsアンチがそういうことにしたいから。
アンチなら使わなきゃいいのになw
プログラミングと関係ない話だとファビョる奴多いなw
つーか、プログラミングと関係ない話にしか入ってこれないんだろw
lispとemacsは切り離せないんじゃないの? 対応する括弧に自動で色つかないと見にくい 括弧の色が中にいくほどグラデーションで 少しずつ色がついていくようなのないの?
ポールグレアムの中の人はvi使ってるんだっけか
Emacsが嫌ならxyzzy使えばいいのにw
パンが無いなら性器を舐めればいいじゃない
___________________________ /| /| | | ||__|| | Please don't | / O O\__ feed | / \ the trolls | / \ \ | / _ \ \ ---------------------- / |\____\ \ || / | | | |\____/ || / \|_|_|/ | __|| / / \ |____| || / | | /| | --| | | |// |____ --| * _ | |_|_|_| | \-/ *-- _--\ _ \ // | / _ \\ _ // | / * / \_ /- | - | | * ___ c_c_c_C/ \C_c_c_c____________
>>653 ポール・グレアムが使ってるっていってもなあ…。
初心者にはどっちもどっちかもしれないが、
viのほうがEmacsより敷居高くないか? モードあり+S式操作は。
ちなみに、viのほうがS式操作が便利なら、速攻乗り換える。
vimならS式得意。 得手不得手があるからどっちが便利って事はない。
>>651 UnixとCが切り離せるように、lispとemacsだって切り離せる。
662 :
デフォルトの名無しさん :2008/04/30(水) 21:48:38
>>661 頭から胴体が切り離せるように、lispとemacsだって切り離せる、ってこと?
>>661 CがUNIXから離れて普及したように、(
>>661 の前半)
elispがEmacsから離れて広まることはありうる。
しかし、UNIXをC以外で書き直したり、
EmacsをelispあるいはLisp族以外で書き直す(
>>661 の後半)のはほとんど無理。
>>663 emacs が elisp で書かれている必要はないし, emacs の拡張言語が
elisp である必要もない
teco.el ってのがあってだな, teco.el を使って GNU emacs 18 の
emacslisp-mode 再実装した大馬鹿ものを俺は知っている
lispworksのエディタもemacsライクなんだよな。
休みが終わるまでこの調子かね?
GW進行ですから。
EmacsはLisp知ってたほうが使いやすい(必須じゃないけど、設定すらLispで書くわけだから)けど、 Lispを使うのにEmacsを無理に使う必要は無いだろうな。まあ便利だと思えば使えばいいだけ。
男ならEdwin
TIのPC-Schemeに付属してたエディタ(edwin)ってソース公開 されてないかな? Gaucheに移植できないだろうか。
Sexp
NULNUL
sxhashってsexhashという表記を避けるためにつけられた名前なんだろうか。
>676 自分はwin使わないけど、乙です
ありがとうございます 一気に楽になりました
>>672 情報ありがとう。
PC98で動かしたPC-Schemeが最初に動かしたSchemeだったので
ターミナルで動くEdwinが好きだ。GaucheやMZ-Schemeで動く
CUIのシンプルなのがあったら使いたいね。
load-pathに自分が使うフォルダを追加するにはどうすれば良いですか? よろしくお願いします
これは流石にネタだろ
>>686 d。やっぱ、Numerical Recipes in Scheme が無いせいで名前が統一されてない感じ。
gaucheで毎回お気に入りのディレクトリを add-load-pathするのが面倒なのでload-pathに一度登録して消えないように できないでしょうか? よろしくお願いします
690 :
デフォルトの名無しさん :2008/05/03(土) 13:05:13
Windows XPでDrScheme version 372を使っています (:= (x y z) (1 2 3)) とすると (define x 1) (define y 2) (define z 3) としてくれるようなマクロを書こうと思ったのですが (define-syntax := (syntax-rules () ((_ (x) (a)) (define x a) ) ((_ (x y ...) (a b ...)) (define x a) (_ (x ...) (a ...) )) ((_ var val) (define var val) ) )) という形ではだめです どうしたらよいのでしょうか
>>690 (define-syntax defs
(syntax-rules ()
((_ (var ...) (obj ...))
(begin (define var obj) ...))))
(defs (x y z) (1 2 3))
Little Schemerを読み終わってから英語の小説を読んでいるときにcarが出てくるとつい反応してしまう。 あぁ、車なんだよなw
>>693 今までそういう脳内bindなかったけど今マップされちまったじゃねぇかw
>>695 だってcar,cdrはCAR,CDRと略語の意味で覚えた人とか居るはずなのにそこに突っ込みますかw(data register,address register)
2chにはcar板もcdr板もあるんだぜ
(゚Д゚)cdr-
(car)
(setq a '(c a r)) (append (cdr a) (list (car a)))
ちゃんと講演依頼をエージェント通せば呼べると思いますよ?
俺が死ぬまでに一度くらいは肉眼でご尊顔を拝見したいな
前にググってたらGLSが日本に来たときに 下北沢の飲み屋でみんなで一緒に飲んだとか 書いてあってうらやましかったんだけど。
したがって、我々は、将来のLispプログラマの世代が何度も何度も Lispに対するAlgolスタイルのシンタックスを再発明し続けることを 予期し、彼らは、最初の夢中になる期間の後、それを拒絶し続ける だろうということを同じく確信している(おそらく、このプロセスは、 Lispハッカーのための通過儀礼だと考えられるだろう)。 /\___/ヽ ヽ / ::::::::::::::::\ つ . | ,,-‐‐ ‐‐-、 .:::| わ | 、_(o)_,: _(o)_, :::|ぁぁ . | ::< .::|あぁ \ /( [三] )ヽ ::/ああ /`ー‐--‐‐―´\ぁあ
彼らは、最初の夢中になる期間の後 一度は夢中になれw でも、「最初の」ってことは2度目もあるのか?
WirthはPascal, Modula-2, Oberonと作りつづけているし K&RもCの後でLimboを作っているし Javaを作ったメンバーにLisperがいないとは言わせないw
全然話が違うだろ。
>>710 の文はREDUCEのRLISPみたいな奴のことだろ。
716 :
712 :2008/05/04(日) 17:14:13
ごめん、俺が起きがけではやとちりして書いてたw
そういや、一番普及したRLISPが書いてないね。
>>712 Gosling Emacs (Mock Lisp) => Java
Rubyで書いたLISP
(define person (lambda args (let-keywords args ((name "Anonymous") (age "unknown")) (print name " is " age " years old.")))) (person :name "hogehoge" :age 99) これが動かないのですが、どこが間違ってるんですかね・・・
なぜ処理系名とかを書かないの?
((name :name "Anonymous") (age :age "unknown")) なんじゃね。知らんけど。
>>722 EmacsLispではdefineじゃなくdefunでおk
>>719 1960年代終わりごろに開発が進められたREDUCEっていう数式処理システムがあって、
これを書くためにLISP 1.5をもとにしたStandard LISPというLISP方言がつくられた。
で、このStandard LISPにはRLISPと呼ばれるAlgol風のシンタクスが定義されてて、
REDUCEユーザーは基本的にS式じゃなくて、このAlgol風の言語でプログラミングする
ようになってる。
R is for REDUCE だったか
80年代半ばまでは、 REDUCEは最も有名な数式処理システムだったし、 STANDARD LISPは最小公約数的なLisp仕様だったから、 ベンチマークにも良く使われた。
>最小公約数
731 :
722 :2008/05/04(日) 18:51:02
すみません。処理系はGaucheです。
>>722 let-keywords =>get-keywords
× let-keywords =>get-keywords ○ let-keywords =>get-keyword
735 :
722 :2008/05/04(日) 19:04:32
get-keywordを使用した構文だとうまく動きました。 ありがとうございます。 でも何故let-keywordsを使用すると動かないんだろ・・・
>>735 どんなエラーが出るのか書いてもらわないと。
ちなみに手元のGauche 0.8.13では
>>722 が問題なく動作した。
>>736 こんなエラーです。
環境はubuntuのemacs23上で走らせてます。
(define person (lambda args
(let-keywords args ((name "Anonymous")
(age "unknown"))
(print name " is " age " years old."))))
(person :name "hogehoge" :age 99)
gosh> *** ERROR: unbound variable: age
Stack Trace:
_______________________________________
0 (age "unknown")
At line 106 of "(stdin)"
1 (name "Anonymous")
At line 105 of "(stdin)"
Gaucheのバージョン?
質問する人は常に舌足らずだな。的確な質問を出来るような人は自分で解決できるということか。w
ubuntuのgaucheは古いな。
つまりlet-keywordsが定義されてないだけじゃないか?知らんけど。
get-keyword はPlt Schemeとかにもあるが、let-keywordsは最近Gaucheがサポートした一般的ではない関数だ。 Gaucheのどのバージョンか判らないと質問にも答えられない。
バージョンの調べ方がわからない・・・orz
gosh -V
>>739 回答者のエスパー能力を試してるんだよ。
的確な答えをすると組織へ入れる(入れられる)らしい。
Gaucheのバージョンは"0.8.8"でした。
>>746 団員バッジがかっこよければ俺も入るよ!
>>749 スコープ鶴崎とかいるかもしれんのにか?
組織名はゲロショッカー。基本吐くまで飲む。
>>739 そうなんだよ。
だから俺は何時までたっても自分で解決できないままなんだな。
質問するためのキーワード探索のために見当外れな質問が1回ぐらい必要
Emacsの中のドクターは的確だよな。
gauche-rfbの使い方を学べるサイトはないですか? exampleのブラウザでの実行方法すらわかりません。 よろしくお願いします
>>755 わかりにくくて申し訳ない。
exampleの下のプログラムの解説は以下の通りです。実行する前にカレントディレクトリを
exampleディレクトリに移しておいてください。
あと、プログラム実行後、
ttp://localhost:8080/ にアクセスするとブラウザ上に画面が
表示されます。
grad.scm - グラデーションパターンを描くプログラム
% gosh grad.scm
raytrace.scm - レイトレースで球体を描くプログラム
% gosh raytrace.scm
Paul GrahamのANSI Common Lispにある例題をGaucheに移植したものです
(ついでに色もつけている)
lifegame.scm - ライフゲームを実行するプログラム
% gosh lifegame.scm
bb-eval.scm - 黒板に書いたS式を実行するプログラム
% gosh -I. bb-eval.scm
黒板上でマウスの左ボタンを押しながらドラッグすると線が引けるので、それで文字を書いていってください。終わったら下の"Eval"ボタンを押すと結果が画面に表示されます。ただし、認識できる文字は数字と括弧()と一部の演算子(+と*)だけです。
ドキュメントはmakeすると、docディレクトリの下にinfo形式のドキュメントが生成
されます。
texi2htmlをもっているなら、make htmlで HTML形式のドキュメントが生成できます。
ただし、内容がないのであんまり参考にならないかも。
中の人乙
このfooは連番処理用に作ってみたもので、 (foo m n)は[m, n]の区間の整数のリストを返します なんか改善するべきところあったら教えてください (define (foo from to) (let ((f (if (< from to) - +))) (define (foo2 n r) (if (= n from) (cons from r) (foo2 (f n 1) (cons n r)))) (foo2 to ())))
好みの問題だけどnamed letの方が見やすい気がする
見易さと処理速度で改善ポイントは違うし、速度の場合は処理系依存な方法もあるかな。 もうすこし改善の優先順位を決めるとレスし易いかも。全く条件がないと好みの問題で済んでしまう希ガス。
>>754 ありがとうございます
すばらしい拡張ライブラリですね
>>759 なるほど、named letってのがあるんですか
しかし素直にfもこのform内で束縛してしまおうとすれば余分な引数(fはfoo内で変化しない)が増えて
foo2の呼び出しが3引数になってしまうのが嫌ですね
かといって以下のコードのようにletを入れ子にするのもダサいですし
(define (foo from to)
(let ((f (if (< from to)
- +)))
(let foo2 ((n to)
(r ()))
(if (= n from)
(cons from r)
(foo2 (f n 1) (cons n r))))))
>>760 処理系はgaucheで、見易さ優先でおながいします
この例だと末尾再帰の最適化さえあれば速度に大差はでない気がするので
>>763 (use srfi-1)
(define (foo from to)(iota(+(abs(- to from))1)from))
煽りじゃないけど、scheme って、CLのloopマクロないの? (loop for n from 0 to 10 collect n)
766 :
764 :2008/05/05(月) 23:41:34
>>763 この方が簡単かな。
(use srfi-1)
(define (foo from to)
(unfold (pa$ < to) values (pa$ + 1) from))
>>764 のDrSchemeバージョン
(require (lib "1.ss" "srfi"))
(define (foo from to)(iota(+(abs(- to from))1)from))
(define display-line
(lambda (x)
(display x) (newline)))
(display-line (foo 1 10))
⇒ (1 2 3 4 5 6 7 8 9 10)
>>766 そのps$はDrSchemeでは駄目。Gauche依存。
770 :
766 :2008/05/05(月) 23:52:53
>>769 いや、
>>763 で「gaucheで見易さ優先」って書いてあるからあえてgaucheの簡便な記法を使ってみた。
見易いよね?cutでも大差ないかな。
>>770 Gauche使いには見易いけど、初学者ポイから処理系依存の説明よりは素直にcut使った方がいいかも。
まあ、ゴチャゴチャするけど、処理系を気にせずどこででも勉強できるように誘導する方が教育的かと。
ちなみに((pa$ + 1) 2) も ((cut + 1 <>) 2) も 3 を返す。
>>771 じゃあどこでも勉強できるようにpa$の定義を書いておきま。
(define-syntax pa$ (syntax-rules () ((_ f arg ...)(cut f arg ... <>))))
>>771 from < to の場合の挙動が違う気がする。
775 :
763 :2008/05/06(火) 00:19:36
なるほど色々やりかたがあるんですね とりあえず(foo 3 1) ; => (3 2 1) のような事もシンプルにできる、かつ処理系依存が少ないのを考えるとiotaを使って (define (foo from to) (iota (+ (abs (- to from)) 1) from (if (< from to) 1 -1))) こんな感じになりました emacs lispなら使えるんでloopマクロに近いsrfi-42のrange qualifierとか試してみましたが余計ややこしくなりそうでした foldとか部分適用は一瞬脳がパンクしそうになりました
>>766 と
>>773 を併せたDrSchemeバージョン
;
>>774 の件は考慮してない
(require (lib "1.ss" "srfi"))
(require (lib "26.ss" "srfi"))
(define-syntax pa$
(syntax-rules ()
((_ f arg ...) (cut f arg ... <>))))
(define (foo from to)
(unfold (pa$ < to) values (pa$ + 1) from))
(define display-line
(lambda (x)
(display x) (newline)))
(display-line (foo 1 10))
⇒ (1 2 3 4 5 6 7 8 9 10)
Unfold-rightとcutとlambdaを使ったDrSchemeバージョン ; from toの順番になってて覚え易いかも (require (lib "1.ss" "srfi")) (require (lib "26.ss" "srfi")) (define (foo from to) (unfold-right (cut > from <>) values (lambda (x) (- x 1)) to)) (define display-line (lambda (x) (display x) (newline))) (display-line (foo 1 10))
>>777 を逆順にした
>>776 と同じ順番のDrSchemeバージョン
(require (lib "1.ss" "srfi"))
(require (lib "26.ss" "srfi"))
(define (foo from to)
(unfold (cut < to <>) values (lambda (x) (+ x 1)) from))
(define display-line
(lambda (x)
(display x) (newline)))
(display-line (foo 1 10))
>>776 と全く同じでcutを使ったDrSchemeバージョン
(require (lib "1.ss" "srfi"))
(require (lib "26.ss" "srfi"))
(define (foo from to)
(unfold (cut < to <>) values (cut + 1 <>) from))
(define display-line
(lambda (x)
(display x) (newline)))
(display-line (foo 1 10))
色々な書き方出来るんだね。
まあ、ほとんど同じ内容のものを特に意味も無くダラダラ書かれても… って気はするな。
lambdaだけでも書ける。 cut用のsrfi-26もいらない。unfold-rightを使った逆順も書ける。 (require (lib "1.ss" "srfi")) (define (foo from to) (unfold (lambda (x) (< to x)) values (lambda (x) (+ x 1)) from)) (define display-line (lambda (x) (display x) (newline))) (display-line (foo 1 10))
そかな?勉強になるからうれしい。
大きく分けるとiotaかunfold/unfold-rightの2通りが簡潔で良さげ
pa$かcutかlambdaのどれが良いのかって、あまり関係ないのかな。 ライブラリ要らずと言う点ではlambda最強?
>>787 iotaもunfoldもsfri-1が必要だろ。
速度はどれが一番?
こんなループの速度なんて処理系次第だから実測しかないんじゃね
(処理系がインタプリタの場合の指標) 繰り返し処理が… a)組み込み関数を使う => おそらく最速 b)ループで実装 => 結構速い c)named-letなど末尾再帰呼び出しで実装 => まあまあ速い d)再帰呼び出しで実装 => 使わない方が良い
>>791 繰り返し(iteration)を再帰(recursion)で実装とか、
なんか用語的におかしくね?
再帰は手段 目的は繰り返し
繰り返しも手段 目的は反復処理
ubuntu user多いな 8.04にしたのかな
>>795 プログラム技術板なんだしテクニカルタームは正しく使おうぜ
再帰が繰り返し処理にしか使えないと思ってない?
ubuntu 8.04 の gauche は 0.8.12 になってるなぁ
(define (foo m n) (map (lambda (x) ((if (> m n) - +) m x)) (let loop ((n (abs (- n m))) (r '())) (if (zero? n) (cons 0 r) (loop (- n 1) (cons n r))))))
EoPL第三版到着!
アスペクト指向って時おり聞くんですが 汎関数と何が違うんでせうか なんだか名前空間の管理ポリシーの違いで オブジェクト指向とかアスペクト指向とか いってるだけな気がするんですが…
バレたか!
Actor指向じゃ駄目ですか
>>800 もし差し支えなかったらBoehm-GCをpthreadに対応させた方法を教えて頂けませんか?
OS依存部のLinux以外へのポートの戦略あたりをできれば
>>808 configure.ac の160行目付近に
*-*-mingw*)
AC_DEFINE(GC_WIN32_THREADS)
AC_DEFINE(THREAD_LOCAL_ALLOC)
win32_threads=true
;;
要するに基本的に cygwin と同じになるように。
それから
configure --enable-threads=pthreads
make
あと細かいところは引っかかる都度に手直ししただけ。
本当に大丈夫なのかどうか全然わからん。
それからwindows版の pthread において pthread_t は構造体なので
gauche の vm.c の中で比較してる部分を THREAD_EQUAL マクロにおきかえ。
make とかはいろいろいじったけど。
以上は細かい手直しだけでいけると思うんだけど、重要な違いがひとつ。
Windows版の pthread は pthread_sigmask が実装されてない。
で、どうしたかというと… コメントアウトしますた (´・ω・`)
実装されてないものは本格的になんとかしようとするとちょっとした手直しでは済まないと思う。
windowsのAPIを直接使うよりは簡単に移植できるんじゃないかと期待するけど、
さっぱわからんので、「大まかにはWindowsでもpthreadが使えるかも」という実験的意味合いと思ってちょ。
>>801 (define foo
(lambda (m n)
(letrec
((r '())
(loop (lambda(x)
(if (>= x m)
(begin (set! r (cons x r))
(loop (- x 1)))))))
(loop n)
r)
))
>>801 のはR5RSだと(0 1 ... 9)だけどちょっとゆるいと(1 2 ... 10)になるw
てかちゃんと書け
>>804 古いOOPではクラス定義にコードが分散してしまうようなプログラミング対象、
例えば、スレッド処理、例外処理、ロギング、トランザクション管理、を、"aspect"と呼んで、
オブジェクトと"weaving"することでプログラムを構成しようという方法論がAOP。
"Aspect"を、OOモデリングと直行させて整理しようという考え。
CLOSな人達にとっては、特に新しいことではないけれど、
概念を整理し直し、設計の指針を示すのは良いことだと思う。
それに従おうと従うまいと、一つのパースペクティブが持てるので。
813 :
804 :2008/05/08(木) 14:12:33
>805 やっぱそうなんすか… >806 wikipediaでアクターモデル斜め読みしてみたんですが CSPをもうちょい具体的にしたようなもんですか?
814 :
804 :2008/05/08(木) 14:13:50
>812 丁寧な解説ありがとうございます なんとなくわかったような気がします
AspectとActorとOOPの関係がよくわからないです。 ActorってOOPのもとになったモデルと思ってましたが、Aspectってのもあるんですか。
>ActorってOOPのもとになったモデルと思ってましたが 違います
The Actor model is a mathematical model of concurrent computation that treats "actors" as the universal primitives of concurrent digital computation. アクターモデルとは、並行計算の数学的モデルの一種で、並行デジタル計算の汎用的基本要素として「アクター」を扱っている。
アクターモデルの基本は「全てのものはアクターである」という哲学で、オブジェクト指向プログラミングにおける「全てのものはオブジェクトである」という考え方と似ている。 しかし、オブジェクト指向ソフトウェアでは基本的に逐次的に実行するのに対して、アクターモデルでは本質的に並行性を備えている点が異なる。
そだね。
じゃ、アクターとアスペクトの流れは平行計算の流れで合流して新時代到来?
エージェント指向?
823 :
デフォルトの名無しさん :2008/05/08(木) 21:02:53
>>820 同じく。 Hewittのペーパーを少し読めば。
Lisp/Scheme:John McCarthy ←対立→ Planner/Prolog:Carl Hewitt、Marvin Minsky、Seymour Papert、Mike Peterson ↓ Smalltalk-71:Alan Kay ↓ Actor Model:ヒューイットの1973年の論文
Planner/Prolog:Carl Hewitt⇒Smalltalk-71:Alan Kay ⇒Actor Model:ヒューイットの1973年の論文⇒ ⇒⇒leanTAP⇒KANREN⇒miniKANREN⇒alphaKANREN ⇒ ⇒⇒concurentKANREN (on concurrent Scheme/Arc)
Little Actor 嫁
Actor を並べ替えると To Arc になる不思議w
Carl Hewitt, "A Universal Modular Actor Formalism for Artificial Intelligence". IJCAI.(1973)
_,,.-‐-..,,_ _,,..--v--..,_ / `''.v'ν Σ´ `、_,.-'""`´""ヽ i' / ̄""''--i 7 | ,.イi,i,i,、 、,、 Σ ヽ . !ヘ /‐- 、u. |' |ノ-、 ' ` `,_` | /i'i^iヘ、 ,、、 | |'' !゙ i.oニ'ー'〈ュニ! iiヽ~oj.`'<_o.7 !'.__ ' ' ``_,,....、 .| . ,`| u ..ゝ! ‖ .j (} 'o〉 `''o'ヽ |',`i _,,..-<:::::\ (二> / ! _`-っ / | 7  ̄ u |i'/ . |、 \:::::\ '' / \ '' /〃.ヽ `''⊃ , 'v>、 !、\ \. , ̄ γ/| ̄ 〃 \二-‐' // ゴクリ…
Smalltalk-71 は Smalltalk という名前は付いていますが、ケイがメッセージングによる プログラミング(彼はこれをOOと呼んだ)を思いつく前のものなのでOOとは無関係です。 メッセージングを意識して作られたのは Smalltalk-72 からです。これを見てインスパイア されたヒューイットがあみ出したのがアクター理論で、PLANNER 上で実践されました。 以上は 1972-3 年の出来事ですが、アスペクト指向はもっとずっと後で生じた考え方です。
73年の論文はアクターモデル。 77年の論文はデイナ・スコットの連続関数に表示的意味論の基盤を与えたので、ここから理論と呼べるだろうということでアクター理論と呼ぶ。 でも77年の論文には間違いがあったので、81年にWill Clingerによって修正され、アクター理論が完成した。 アスペクト指向(aspect-oriented programming:AOP)は Xerox PARC の Gregor Kiczales のチームが Kiczales, Gregor; John Lamping, Anurag Mendhekar, Chris Maeda, Cristina Lopes, Jean-Marc Loingtier, and John Irwin (1997). "Aspect-Oriented Programming", Proceedings of the European Conference on Object-Oriented Programming, vol.1241, pp.220--242. で発表してからだから20年程たってから出てきた理論。
>Smalltalk-71 は Smalltalk という名前は付いていますが、ケイがメッセージングによる
>プログラミング(彼はこれをOOと呼んだ)を思いつく前のものなのでOOとは無関係です。
>
>メッセージングを意識して作られたのは Smalltalk-72 からです。これを見てインスパイア
>されたヒューイットがあみ出したのがアクター理論で、PLANNER 上で実践されました。
http://en.wikipedia.org/wiki/Actor_model Alan Kay was influenced by message passing in the pattern-directed invocation of Planner in developing Smalltalk-71.
Hewitt was intrigued by Smalltalk-71 but was put off by the complexity of communication that included invocations with
many fields including global, sender, receiver, reply-style, status, reply, operator selector, etc.
ヒューイットはSmalltalk-72 を見てインスパイアされたとは73年の論文(p.244の前後)にも書いてないですね。よろしかったら原典教えてください。
http://dli.iiit.ac.in/ijcai/IJCAI-73/PDF/027B.pdf
名前が芥川龍之介の芥から来ているのは意外と知られてないな。
知られてないよね
SRFI-1の (iota count start step)の countが0だったり countがマイナス値だったり stepが0だったり した場合どうなるの?
>>835 仕様を見る限り、未定義ってことじゃないかなあ。
(iota 0)は () になるのが自然だと思うけど。
>>831 AOPは理論じゃないです。
一応レスしときます。
>>819 > しかし、オブジェクト指向ソフトウェアでは基本的に逐次的に実行するのに対して、
それはおかしい。
何が?
オブジェクト指向かどうかと言語が手続き型かどうかは直交してるということでは。
OOは実行モデルじゃないからね。
ニヤニヤ
発話者毎に用語の定義がマチマチな件
>>839 理論じゃないなら手法とでもしときますか?
847 :
デフォルトの名無しさん :2008/05/09(金) 21:30:13
>>824 で思い出したけれど、μPlannerやConniverって、処理系が
何処かにある?
848 :
808 :2008/05/09(金) 21:57:10
>>809 ありがとうございます。
レス遅くなって申し訳ありません。
Boehm-GCはcygwinに対応してるのですね。
cygwinはBoehm-GCの守備範囲外だとおもってました。
OpenBSDにポートする時の参考にしようと思ったのですが
あまりなりそうにないですね。
せっかく答えていただいたのにすみません。
Gerald Jay Sussman と Terry Winograd によるPlanner のサブセット Micro-Planner は、当時主流であった論理的アプローチとは異なる手法を提案した。 論理的アプローチ派の Robert Kowalski は Alain Colmerauer と共同で Micro-Planner によく似た Prolog を開発した。 不幸なことにMicro-Plannerはバックトラッキングの扱いにくさを証明するが、制御構造に関する議論を活性化した。 このころ、Peter Landin は J (Jump) 演算子を使って非常に強力な制御構造を導入した。 Drew McDermott と Gerald Sussman は、Landin のコンセプトを 「Hairy Control Structure」と呼びさらに発展させ、Conniver 言語に実装した。
MITのAI LAB.で作る言語は CONNIVER とか PLANNER とか 「考えるもの」系の名前をつける伝統だったので Schemeの名前は、Conniverよりもっとスニーキー(卑劣)なPlannerという意味のSchemerとなるはずだった。 ところが、ファイル名の制限 (6文字+3文字)でSCHEMEになってしまった。 Planner -> Conniver -> Schemer。 これを知っているとLittle SchemerシリーズがSchemeと呼んでいない理由もうなずける。
さすがにLittle Sneakerとは呼ばなかったのかw
>>855 Schemeの場合、p.41にも書いてあるけどHewittのPLASMA(1975)の影響が大きい。
859 :
デフォルトの名無しさん :2008/05/10(土) 00:47:11
関数の引数が変数にリストの形で入っていた場合、 普通はapplyを使うわけですが、 ドットリストを使えば普通に使えるじゃんと 思ってしまってGaucheで試してみたんですが… (+ . (1 2 3)) ; => 6 (define lst '(1 2 3)) ; => #t (+ . lst) => *** ERROR: improper list can't be evaluated: (+ . lst) 以下のような簡約過程をイメージしていたのですが思うようにはいきませんでした。 (+ . lst) -> (+ . (1 . (2 . (3 . ())))) -> (+ 1 2 3) -> 6 なぜこのようなケースがエラーになるのでしょうか?
>>859 リストの cdr は評価される場所じゃないから
>>859 A. (define lst '(1 2 3)) ; => #t -> 変数のlst
B. (+ . lst) -> 値のlst
両方のlstは同じではないよ。
gosh> (eval (cons '+ lst) (scheme-report-environment 5))
=> 6
(cons '+ lst) -> '(+ . (1 2 3)) -> '(+ 1 2 3)
さいごのえばってるの。
えいじろうをみてると嫌な表現があるね。 lisping 【名】サ行発音不全(症) gosh 【間投】おやっ!、えっ! God の遠回しな言い方。驚き・不快感などを表す。 ・Oh, my gosh. まあ、大変。/参ったなあ。
>>859 そのアイディア、つまり (op arg1 arg2 . args) という形式を
(apply op arg1 arg2 args) と解釈したらどうか、という話は
繰り返し浮上するのだが、argsが単なる変数でない式だった場合に
破綻する。S式の定義から、(op arg1 arg2 . (op2 argx)) は
(op arg1 arg2 op2 argx) と区別できない。
argsが変数の場合だけ特別扱いするというのは何か気持ち悪い。
>>859 じゃないけど
変数の時だけではなく評価前のS式が dotted list のときだけ apply と看做す
のはだめなのかな。 scheme だと (define (a b . c) ...) とか書けるし。
>>864 だからその「ときだけ」ってのが気色悪いって言ってんの。
お前ら暇そうだな
質問なんですけど、皆さんはSchemeで内部関数を書く時 ・letrecとinternal defineのどちらを使いますか? ・定義部のみbeginで囲みますか?本体部のみbeginで囲みますか?beginを書きませんか? ・beginをそのまま使いますか?マクロでラップしていますか? 自分は内部関数定義部と本体部でインデントが違って欲しいので internal defineをbeginに展開されるマクロwhereで囲って書いています。 でも逐次式としてのbeginはまだ意味が分かるんですけど 定義部のbeginは意味が分からない… 内部定義は未規定の順番で行われる訳ですし。 なぜ定義にもbeginが使えるのでしょうか? なぜsyntax-rulesでもCLマクロでも記述できないのに派生式扱いなのでしょうか? どんな歴史的経緯からSchemeに導入されたのでしょうか?
letrec とか let* とか、似たような構文が色々あってわかんねーんだよなぁ。 俺は SICP をちょこちょこやってるレベルなんだけど。let 以外のことをやり たいときは大体 define 使う。
>>871 ・internal defineを使います。
・beginを書きません。
・beginがどうしても必要ならそのまま使います。
>なぜ定義にもbeginが使えるのでしょうか?
beginが使えないと、複数の定義の集まりに展開されるマクロが書けないのでは?
>なぜsyntax-rulesでもCLマクロでも記述できないのに派生式扱いなのでしょうか?
定義として使われるbeginとマクロのbeginは別物だと思います。
前者はelseやunquoteに近いものではないかと。
なぜ定義をまとめる式と逐次式が同じbeginなのか?というのが謎ですね。 単なる逐次式のbeginならsyntax-rulesでもCLマクロでも派生式として書けますから 定義をまとめる式を原始式としてwhereなりdeclareなり別に用意したほうが良さそうなのに あえて同じ構文キーワードになっているのには 何か歴史的な経緯があるのではないか?と思ったのです。
それだけのために「別に用意する」のが嫌だったのでは。
FACOM α を使ってた人はいますか? 現在のパソコン上のLispは当時のLispマシンと比較して どのくらいの性能なのでしょう?
877 :
デフォルトの名無しさん :2008/05/11(日) 11:29:47
>>876 使った事はありますという程度ですが。
フロントに汎用機やミニコン(死語?)をおいたマシンでしたね。
『どのくらいの性能』って、何の値が希望?
878 :
876 :2008/05/11(日) 11:58:49
>>877 おお、使ってらっしゃったのですね。
consできるセルの数は?
竹内関数の実行スピードは?
といったことです。
listやmapが機械語で操れるマシンに憧れます。
富士通はまた作らないのかなぁ。
>>876 αは使ったことないけど、
> 現在のパソコン上のLispは当時のLispマシンと比較して
> どのくらいの性能なのでしょう?
どの面から見ても桁違いに高い性能なのは間違いない。
その割にたいしたことが出来てないのでがっかりしている。(自分に対して)
lispのリスト操作関数そのままの機械語命令がある、ということだと思うが... (リンク先のはそういうのだよね)
>>880 そなの? アルファって map までバイトコード定義だったの?
# map やってる間に割り込めるんだったら CPU 作った奴の英断に敬意を表するぞ!
>>880 そういえば大先生が作ったTAOのcpuはELISって言うんだなぁ。
ELISと言えば中尉か6800のイメージしか無いなぁ。
Lispmachineの方はどんなんだったんだろ?
(なんかの展示会で実マシン見たこと一回だけある程度、その後MAC用にNUBUSのカードが出てたけど買えなかった)
>>882 > # map やってる間に割り込めるんだったら CPU 作った奴の英断に敬意を表するぞ!
mapの途中で割り込みはさすがに豪快だが、CISCでストリング命令とか、
中間状態をレジスタの値として保存して再開可能な作りにしてある石は
あったように思う。使ったという記憶じゃないのでうろおぼえだが。
((call/cc (lambda (goto) (letrec ((start (lambda () (print "start") (goto next))) (froz (lambda () (print "froz") (goto last))) (next (lambda () (print "next") (goto froz))) (last (lambda () (print "last") (+ 3 4)))) start))))
((call/cc call/cc) (call/cc call/cc))
>>859 Common Lispだと、
> (setq x '(1 2 3))
> (eval `(+ ,@x))
ということをしたいってことになりますが。
>>879 >その割にたいしたことが出来てないのでがっかりしている。(自分に対して)
同じく。憧れだったスーパーマシン以上のものが今では
パソコン上で実現されてるんだけど、自分は使いこなせていない。
竹内先生の本で本物のLispに憧れていた頃の方が燃えていたかも
しれない。
lispのマクロ=手続きを抽象化していろいろ変形する機能 ならば、リファクタリングツールの充実してる言語でも同じようなことできそう
>>859 は.を見てconsしているのがreadだということをちゃんと理解できてないのでは?
そして何故かread時にcdr部がevalれることを期待している。
>>859 がやろうとしているのはこんな事?
こういうを式を
(eval '(+ . (1 2 3)))
こうする
(+ . '(1 2 3))
ドットをシンボルとして評価することになるのでダメ。
ドットはシンボルではない?
ドットをドットのまま評価させようとして
(+ '. '(1 2 3))
ドットに、直接 '. してもドットリストは作れない
'|.| ……じゃないよな
鯨が魚でないのと同様に、ドットはシンボルではありません。
そういえば、ドットって型の一つなの?
>>895 そもそもデータではない。'(' と同じようなもの。
ドトリストの印字表現です
> '(1 . (2 . (3 ))) (1 2 3) > へ〜、そうなんだ。
何故に、car と cdr なのかはっきりわかる。
902 :
デフォルトの名無しさん :2008/05/14(水) 21:17:14
REPLはまだできないけど、きっと覚えます!
Contents of the Address part of Register number Contents of the Decrement part of Register number
>904 略語のフルスペルを示されてもなぜCARとCDRなのかは分からんだろ? 元となるコンピュータのレジスタ構成を知らないと何のこっちゃ?になる。
車は左を走るから、で十分だ。俺には。
moshのmakeにはgaucheが必要です ってなんじゃそら
ghcのmakeにghcが要るようなものだろう
moshの読み方はやっぱ喪主
>>908 version 0.0.2だもの、セルフはまだ無理だろ。
Arcの実行にはMzSchemeが(ry
pgのお墨付きですねわかります
モシュじゃなくてモッシュと読みたい。モシュでは縁起悪いから。
なんでムッシュじゃないんだ?
かまやつと間違えるから
つか、monaOS の shell じゃねぇのか? exec()する機能がないんだが…
>>917 OS作者から処理系作者にシフトしつつある。
Matzみたいなポジを狙ってる模様。
OSに組み込んでSchemeOSにしてしまうの? そういや昔SOSってOSあったなあ。
Sophisticated Operating System?
>>919 S-OS SWORDとかってやつかな?
俺はS-OS上のLispで遊んでたりしたなw
年代が分かる< sos ぺけろっぱーはおおそうだな。藁
俺はMZユーザーだったりするw Lisp-85にPOKEやPEEK付け加えたりしてたなw
俺はFM-77ユーザーだったりする。 FLEX上のLisp09をアセンブラから入力してた。 後で商品版のLisp09を買ったんだけど当時6万円はしたなぁ。 OS-9にしておきゃよかった。日立のS1で動くLisp09のことを 知って後悔したよ。
俺はENIACユーザだった。 入力ってか配線だったから大変だったなぁ。 場所も取るし。
俺なんてColossusのプログラマだったけど戦争が終わったとき一緒に破壊されちゃったよ
・・・このままパスカルの手巻き式計算機までいくのか?
なんとなく流れに乗ってチョイ昔のLispMe on Palmを動かしてみた。ちゃんと動いたついでにバージョンを最新のにしたw
エラく年齢層が高いね。まさか、HHKの作者までいるのか?
パラメトロンの発明者もいそうだな
もうわかんないんです(><)
50〜60代ってところか?
Happy Hacking Keyboard (aka HHK)
さすがにジョン・マッカーシーは居ないだろうな?
>>933 東京大学名誉教授、和田英一とPFU研究所との共同開発
パラメトロンはパラメータ励振現象を使用する論理回路素子. LC共振回路のLあるいはCを,共振周波数のほぼ2倍の周波数2fで変動させると,パラメータ励振により周波数fの振動を励起することができる. 東京大学ではパラメトロンを用いた電子計算機PC-1を1958年に試作した.パラメトロンは東京大学理学部高橋秀俊研究室の後藤英一により発明された. PC-1は,命令語は18ビットの短語,数値は短語18ビット,長語36ビットの固定小数点2進法計算機であった.
PLANNER on IBM 704 がイイ。IBM 704エミュとか無いのかね?
>>930 このスレはあの世から書き込めるのかよw
Lispは魔術だからな!(・∀・)
>>940 つまり高度に発展した科学と言うことですね。
HAL/Sを実装したくなってきた!
――パラメトロン計算機の反響はいかがでしたか? 後藤「それほど大騒ぎにはならなかったよ。海外では、10年前にすでにENIACやEDSAC なんかがあったし。それにパラメトロンはトランジスタコンピュータに比べて処理速度が遅い からさ。トランジスタコンピュータのクロックが1メガヘルツなのに対して、パラメトロンコンピュータ はせいぜい10〜30キロヘルツ程度だったんだから。 ずっとあとになって、MITのマッカーシーと親しくなったんだが、彼にいわれたよ。『パラメトロン とはおもしろいことを考えたもんだが、何でそんな遅い素子を作ったんだい?』ってね。 そんなこといわれたって、予算はMITの1000分の1ぐらいしかなかったんだから。」
エンドーさんのインタビュー本から引用せんでええ 良い本だよね。
CLOSでCommon Lispを構成し直したの、 例えばsequenceを再設計、とかいう研究はありますか?
HLISPとか、HyperLispとかってどうなんだろ
面白いよ
boost.common_lisp が激しくほしい
作ろうぜ
最近、Gaucheのand-let*が便利だと思うようになったので それのif版が欲しくなって書いてみたんですけど (define-macro (if-let* binding-list consequent alternative) (cond ((null? binding-list) consequent) ((and (pair? binding-list) (symbol? (caar binding-list))) (let ((tmp (gensym))) `(let ((,tmp ,(cadar binding-list))) (if ,tmp (let ((,(caar binding-list) ,tmp)) (if-let* ,(cdr binding-list) ,consequent ,alternative)) ,alternative)))))) こんな感じでいいんでしょうか? 最後にalternativeが連続で出現してるのが美しくない気がするのですが。
( (lambda (x) (if x (x) alternative)) (and-let* ((a b) (c d) ...) (lambda () consequent)))
consequentが#fを返した時にalternativeが評価されませんか?
勘違いでした
Gerry Sussman and I wanted to understand Carl Hewitt’s ideas, which seemed to have intellectual power, but we couldn’t get past the complexity and the notation to see “what was really going on.” So we decided to implement a “toy” actors language. We hoped that it could capture the essence of the ideas while remaining simple enough to understand. It might even turn into something useful. from "The History of Scheme" by Guy L. Steele Jr. (2006)
Lisp/Schemeの場合エラーを投げるのは プリミティヴ手続きに任せるのと 自分でチェックするのとどっちが主流ですか? 例えばあるオブジェクトをcarやcdrに渡す前に pair?でチェックを掛けて pairじゃなかったらエラーを投げるというコードを書くのか それともそのままcarやcdrに渡して carやcdrにエラーを投げさせるのか どちらが一般的でしょうか?
いあ、普通、エラー投げねぇし
>>957 コンディション/エラーを投げる前に何のための多値か考えたことある?
>>957 ケースバイケース。それを考えるのがプログラマの仕事だ。w
例えば、ユーザの手入力を直接渡す場所ならチェックするだろう。
性能を重視するライブラリの中ではチェックしないだろう。
こんなことに主流とかw
R5RSの範囲だとエラー投げたらそれっきりなんで主流もなにもない。
書かなくていいかもしれないコードを書いてはいけない。
リストを処理する関数を書いたとして、 (lambda (x) (if (null? x) empty ;ここは当然空リスト用コードですが non-empty ;ここに空でないリスト用のコードを書くのか、)) (lambda (x) (cond ((null? x) empty) ((pair? x) non-empty) (else error-code))) ;のように書くのか どうするのが一般的か知りたかったんです。 引数の型チェックを自分で行うか 総称関数を使うか パターンマッチングするか。 プリミティブ関数にエラーを投げさせるか 多値で呼び出し元に知らせるか 自分でエラーを投げるか。
>>964 一般的な用法などない lisp 系に限らず…
意図した処理が、意図した通りに動けば OK
そのうち、自分なりの方法論が確立される
# コーディング規約とかを押し付けられた場合はこの限りではないが…
# お金もらえないと飯食えないからねw
Lisp/Schemeに限らず動的型付け言語は 意図した処理を意図した通りに動くようには、美しく簡潔に書けますが 間違った処理を行わせないように書くのは、冗長になったり、完全性に欠けたりしがちな気がします。 今のところは、関数を識別子に束縛する場合は マクロで覆って引数チェックを行い、 意図しない引数の場合に関数名を表示してエラーを投げるようにしてます。
>>967 >間違った処理を行わせないように書くのは、冗長になったり、完全性に欠けたりしがちな気がします。
以前、SML/NJがお気に入りでした。コンパイルが通ればエラーはほとんど無い
んですが、なんだか堅苦しくて。動的型付けのSchemeに戻ってきました。
気楽な分、エラー処理はちゃんと考えておかないといけないですね。
アマチュアだから気楽なもんですが。
>>964 教科書的には
>(lambda (x)
> (cond ((null? x) empty)
> ((pair? x) non-empty)
> (else error-code)))
これが多いと思う。もしあなたが学生ならこれを勧める。
でも、仕事のやり方は常に改良されていく。主流とか一般なんて意味がない。
(require (lib "turtles.ss" "graphics")) (turtles #t) (define (dr n) (if (< n 0) (display "終了\n") (begin (draw (* n 4)) (turn n) (dr (- n 1))))) (move -150) (turn -90) (move -200) (dr 100)
例外が便利なのはこんなのかな、俺的には。 get-charのやるチェックを全部書いてらんないから。 (guard (c (hoge)) (let loop ((s '())) (if (= (length s) 4) s (loop (cons (get-char (current-input-port)) s))))) シンタックスチェックとか全部書いてらんないから。 (guard (c (hoge)) (eval user-input-expr (interaction-environment))) 基本的なリスト操作とかの引数のチェックはしない。引数がヤバそうなら上位でguard。
やべ、忙しくてLittle Schemer中断してたらわからなくなった^^; 10章であと少しで読み終わるのに。
SMLやOCamlのような静的型付の言語ってギブソンのレスポール みたいなもんじゃない。誰が弾いてもそこそこ良い音がする。 Scheme、Lispはフェンダーのストラトだろう。名手が弾けば素晴らしい サウンドがでるけど、それは弾く者の力量しだいみたいな。 どうチェックするのか、しないのか、サボるのか。プログラマの力量しだい。
誰が弾いてもフェンダーの音は嫌いだ
>>978 そこらの小僧に old もんのレスポール弾かして出てくる音と
本職の連中が出す音とは歴然たる差がある様に聞こえるのは
俺一人?
マーシャル3段積ディストーションかけまくりでも、だ…
本職の連中による全編が極端に個性的なコードもどうかねぇw ギターもプログラミングも個性はここぞ使うと生きるように思う。
>>981 個性的なコードでなくて済む場所なんて、コード自動生成プログラムで作ればいいじゃん。
人間がわざわざ作るんだから、個性的なコード以外不要なんですよ。w
>>982 そんなこというと蛇が化けてでるぞ〜(w
>>982 他人が作ったコードを改造するのにはいいよ
>コード自動生成プログラムで作ればいいじゃん。 馬鹿w
>>985 ,
>>987 length使ってるか観てみたら使ってないね。
lengthが遅いのは知ってる人達か。
>>953 -
返答ありがとうございます。
いろいろ試行錯誤してみます。
if-let*の改良版
(define-macro (if-let* binding-list consequent alternative)
(define (block sym lst)
(if (and (pair? lst)
(eq? (car lst) sym))
`(begin ,@(cdr lst))
lst))
(let loop ((lst binding-list))
(if (null? lst)
(block 'then consequent)
(let ((temp (gensym)))
`(let ((,temp ,@(cdar lst)))
(if ,temp
(let ((,(caar lst) ,temp))
,(loop (cdr lst)))
,(block 'else alternative))))))))
再帰マクロじゃなくて局所再帰関数にしたほうが無駄がないですね。
ブラックボックスの中で個性を発揮するのはどうかと思う。
いいことじゃないか?
995 :
デフォルトの名無しさん :2008/05/22(木) 12:11:19
There is more than one way to do it. ということは、 オンリーワンじゃなくてもいいのさ。
結果さえ出せれば手段は問わないという住人の常駐スレw
ume
ume
ume
ume
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。