Io Language
■ このスレッドは過去ログ倉庫に格納されています
なんでそんな伸びそうも無いものを。 >1 にネタ振りが出来ないようなら早晩落ちるぞ。 言語そのものは知らんが実装はガベコレだけ読んだな。 ioの構文、メッセージ機構はすごく興味あるんだけど バインディング機構がヘボいから萌えない… 特殊形式に見えるものが普通のメソッドだったりするからメタプログラミングとかは結構できそうだな 文法もわりとわかりやすいな このインターネッツ時代にわざわざ検索しにくい名前をつけんなと >>5 それは良いけど、これはいただけない気が… Range v := "before" f := method(arg, arg) v println #=> before 0 to(10) foreach(v, v println) #=> 012345678910 v println #=> 10 >>6 io-language iolanguage で検索するよろし v := "before" が無くても同じ、これは嫌だな Rubyのは1.9で直ってるんだよね LLパトルロワイヤルスレから来ました io-languageの話題はここでいいのかな・・・ まあいいや io-languageでメッセージ?オブジェクトそのものを取り出すにはどうしたらいいんでしょ Io> unko := Object clone do(puripuri := method("&&&" println)) ==> Object_0x581898: puripuri = method(...) Io> unko puripuri &&& ==> &&& Io> unko puripuri slotSummary &&& ←puripuriが実行されてしまう ==> "&&&": ←文字列にslotSummaryしてしまう 上記で、puripuriを取り出したいのですが・・・ > io-languageの話題はここでいいのかな・・・ > > まあいいや コピペ失敗 orz ここは読み飛ばしてください unko getSlot("puripuri") ってこと? >>14 それだ!!!!1 ありがとうございました。 文字列で渡すのがなんか新鮮に感じた >>7 v := "before" f := method(arg, arg) v println #=> before Sandbox doSandboxString("Range; 0 to(10) foreach(v, v println)") v println スマートとは言い難いけど、Sandboxを使ってとりあえず回避。 >>17 Sandboxなんてあったのか… あれから考えて、こんな風にやってみた。 うまくいっているようには見える。 scope := method( expr := call message arguments first context := Object clone msg := message(do) msg setNext(expr) context prependProto(call sender) context forward := method( self proto doMessage(call message clone do( setNext(nil) )) ) context doMessage(msg) ) obj := Object clone obj l := list(1, 2, 3) obj f := method( scope( l foreach(v, v println) )) chk := method( "[obj] " print ; obj slotNames print ; " [v] " print ; Lobby slotNames println ) obj f ; chk scope( obj l foreach(v, v println) ) ; chk obj l foreach(v, v println) ; chk scopeブロック(?)内で self がいる(self l とする)ような仕様で良ければ forward メソッドの設定は省ける。 ↓のみてて思ったんだけど、++とか--みたいな演算子って直接呼べないの? ttp://blog.xole.net/article.php?id=658 value := 0 value ++ := method(self = self + 1) value -- := method(self = self - 1) value ++ println value -- println 結果はファイルから読み込むと何もでないんだけど、コンソール(?)からやるとなんか出力されるんだよね > io Io> value := 0 ==> 0 Io> value ++ := method(self = self + 1) ==> method(...) Io> value ++ println ==> 1 Io> value ++ println ==> 1 Io> value println ==> 0 なんでだろ? あと、↓のにすると上手く動く。この違いがわからない...orz value getSlot("++") setScope(value) call println value getSlot("--") call println >>19 selfに代入しても、元のが変わらんっぽい Io> value := 0 ==> 0 Io> value test := method(self = "banzai!") ==> method( self = "banzai!" ) Io> value test ==> banzai! Io> value ==> 1 >>19 > value ++ println これは、value ++(println) となって println は引数として扱われる。 んで、メソッドの側で仮引数を指定していないのでなにも起こらない。 コンソールで 1 が返ってくるのは、コンソールがメソッドの返値を表示するようになっているだけで、 println が表示しているわけではない。 > value ++ := method(v, self = self + 1) とすれば何が起こっているかわかりやすいかも。 >>20 self はローカル領域オブジェクトのスロットなんじゃない? 変わる方がおかしいと思います。 Io> value := Sequence clone setItemType("float32") setEncoding("number") setSize(1) ==> 0.000000 Io> value ++ := method(self += 1) ==> method( self += 1 ) Io> value ++ ==> 1.000000 Io> value ==> 1.000000 やったー ++ できたよー orz >>21 そっか、selfも単なるread onlyなスロットだからか・・・ Io> value := 0 ==> 0 Io> value ++ := method(call sender setSlot("value", self + 1)) ==> method( call sender value := self + 1 ) Io> value ++ ==> 1 Io> value ==> 1 先生!receiverの名前を得る方法はないんでしょうか! どうでもいいけど、referenceがページ分けされてないので検索しずらいです('A`) http://www.iolanguage.com/scm/git/checkout/Io/docs/IoReference.html >>23 リファレンス読むと、 call message previous name で、出来そうだけど実際には previous が無い模様。 ソース読むと、それっぽい実装はあありました。 使えるようになれば、value ++ とか出来そうですね。 ただ、>>21 の問題もあるので細工がいりそうですけど。 >検索しずらいです('A`) 以前のJavaScript使った妙なやつよりはマシな気がする。 絶対にスマートにできる方法があるはず!と思ってソース見たら Number.c の Number のデータ部分に代入しているのが(DATA(self) = しているところ)、 IoNumber_rawClone、IoNumber_newWithDouble_、IoNumber_copyFrom_ くらいしかなくて、 IoNumber_rawClone は、Clone用、 IoNumber_newWithDouble_は、内部のIoState用、 IoNumber_copyFrom_は、組み込まれてないww(たぶん内部用) オワタ\(^o^)/ Number copyFrom メソッド実装汁!って本家に言っとくか、パッチなげるかだなw ああ、言い忘れた。一応、IoNumber_readFromStream にもあったから、Stream使ったらいけるかも 連投スマソ。 >>26 のStream関連はまだ使われてないようでした orz >>24 確かに call message previous で行ける!と思いましたが、 IoMessage_previous の中の実装が ifdef で外されている上に、 Ioのメソッドとして組み込まれてないですね。 チラシの裏です。 Windows版でコンパイルしたくなって四苦八苦してたんですが、 downloadページで配布されている Io-2008-01-20.tar.gz が、 ShellExecuteのための shell32.lib がリンクされてねえとか、setenvがねえとか、 OS依存なエラーでwin32環境でコンパイルできなくて、どうなっとるねん!!1 エラーつぶしているうちに、Changelog 見たらWindows関連部分が Fix されてるっぽくて、 http://www.iolanguage.com/scm/git/checkout/Io/ ↑見たら直ってて、俺の時間返せー!!! って感じです・・・ orz とりあえず、git落として最新版ダウンロードしたお 最近のバージョンって do( とかで改行すると、エラーで続きが入力できない。 なるほど、selfはローカルのslotかあ。 というか、前回の>>19 で書いた++は1の評価を返してるだけ? value := 3 value setSlot("++", method((self + 2) println)) value ++ // 5 やたー ということは...ここは>>19 のクロージャか!!w value := 6 value ++ := block( block( value = value + 1 call activated ) ) call (value ++) call call call call value println 全然答えじゃねえorz 無理矢理解決してみた。 v := 0 inc := method( res := nil recv := call target cntxt := call sender cntxt foreachSlot(name, value, if (recv == cntxt getSlot(name), res = cntxt setSlot(name, cntxt getSlot(name) + 1) ) ) msg := call message right := msg argAt(0) msg setArguments(list()) msg setNext(right) res ++ := Lobby getSlot("inc") res ) v ++ := getSlot("inc") v println (v ++ ++ ++ println) v println >>32 書いてて気づいたんだけれど 1 + ; 2 は、 1 + 2 と解釈されるのね。 改行も同様につながってしまう。 そのせいで右辺のメッセージのごまかしが完全じゃない。 俺も...と思ったけど、ダメだったorz value := 0 value ++ := method( call message setName("call") call sender setSlot("self", self + 1) ) (value ++) println //1 value println // 0 ++の話題、Smalltalkスレで聞いたら、同じような力技でしたw アラン・ケイも認めた!Ruby>>>>>Smalltalk http://pc11.2ch.net/test/read.cgi/tech/1150106090/169 > >>165 > やっつけですが、Squeak Smalltalk で。 > > Object >> inc > | sender index | > sender := thisContext sender. > index := (sender method at: sender pc - 2) \\ 16 + 1. > ^sender tempAt: index put: (sender tempAt: index) + 1 > > | a b before after | > a:= 1. b := 2. > before := {a. b}. > a inc. b inc. > after := {a. b}. > ^{before. after} "=> #(#(1 2) #(2 3)) " >>35 Io もレシーバが代入されているスロット名を知る手段があればできるんだけどね。 つーか何が特徴なの?って物ばっかりだなこの手のは ++にしてもただの欠陥だし 無理矢理処理系の裏技使って解決しました! ってまるっきりバカに見える > つーか何が特徴なの?って物ばっかりだなこの手のは それは、あなたがバカなだけ > ++にしてもただの欠陥だし それは正しい > 無理矢理処理系の裏技使って解決しました! > ってまるっきりバカに見える スマートではないのには同意。 しかし、どの言語にもスマートにできないものはある。 >>37 の使っている言語にも苦手な処理はあるだろう? >>37 はスマートにディップスイッチでバイナリを直打ちしている >>38 これはこれは 別に>>38 を名指しでバカって言ったわけじゃないよ リトマス試験紙にするつもりは無かったのだが それと、欠陥なら直せば? 欠陥ではなくセマンティックスの違いでしょう。 変数を箱のようなものと捉えるか、ラベルのようなものと捉えるか、という。 マクロを導入すればいいのに。それで解決する問題だ。 まー、Ioはマクロがなくてもこれだけできる!みたいなところはある というかマクロも実装できそうだがどうか っていうか、 >>41 >それと、欠陥なら直せば? あなたの使ってる言語はすぐ直せるの欠陥? だいたいの場合、欠陥があったら言語のコアな部分を弄らないといけないと思うんだけど、そうじゃないのが現実なんだろうか...? small talkの例がでたけど、ioとかこの辺の言語は、その欠陥をなんとかできそうな感じなんだよな。 だからみんな魅力を感じてるんじゃないかと。 ++関連見てきた。 http://pc11.2ch.net/test/read.cgi/tech/1188997302/559 なんかすげー理解が広がリングwww これ見ると言語実装論みたいのが分かって面白いわ あと、smalltalkの実装も面白い IoでObjective-Cの文法を導入する試み。 こういう「クレージー」なことができる言語は素晴らしい。 が、日常的に使いたいかどうかはまた別問題である。 http://www.rubyist.net/ ~matz/20080216.html#p01 Rangeってどうすれば使えるのでしょうか? 何か準備がいるのかな。 Io 20070410 Io> Range Exception: Object does not respond to 'Range' --------- Object Range Command Line 2 windowsなら、C:\usr\local に置かなきゃ駄目 ってやつ? たしかにwindowsバイナリで、別の場所に入れてました。 c:\usr\local\bin にコピーしてやってみたら使えるようになりました。 どうもありがとう。 Io> 1 to(8) map(v,v**2) ==> list(1, 4, 9, 16, 25, 36, 49, 64) Io> 1 to(8) map(**2) ==> list(1, 1, 1, 1, 1, 1, 1, 1) Io> "" asMutable do(65 to(65+25) map(v,append(v))) ==> ABCDEFGHIJKLMNOPQRSTUVWXYZ 数値と数値を連結すると文字列じゃなくて数値になるんですね。 Io> 123 .. 456 ==> 123456 Io> 123 .. 456 +1 ==> 123457 Io> 123 .. 456 /3 ==> 123152 Io> 123+456/3 ==> 275 >>53 type で見てみると Sequence だし 123 .. (456 / 3) こういうことじゃない? 下のようにするとエラーも出るし。 Io> Number ++ := method(v, self .. v) ==> method(v, self .. v ) Io> 123 ++ 456 / 3 Exception: Io Assertion 'operation not valid on non-number encodings' --------- message '/' in 'Command Line' on line 1 対話モードの結果にダブルクオートが出ないから勘違いしたのかな 何でもかんでもオブジェクトをasStringしてつなぐ模様 どうも失礼しました。計算したものが連結されてるだけなんですね。 DarwinportsでIoを入れたのですが >>49 と同じ状態で詰まっています どのようにすればいいのでしょうか? Io> exit Exception: while saving history file '$HOME/.io_history', reason: Device not configured --------- saveHistory Z_CLI..io 42 ReadLine ? Z_CLI..io 42 Call relayStopStatus A2_Object.io 295 CLI saveHistory Z_CLI..io 55 Object exit Command Line 1 こんなのが出て正常に終了できない できてます また起動時に.io_historyがあるとすぐ落ちます インクリメント演算子実装してるが ++numなら簡単だが num++はむずいな 前置だとmessage call argAt(0)でnumそのものを取得出来て そっからメッセージの書き換えでnum = num + 1;っていうメッセージを作れるけど 後置だとすでにnumが評価されていてnumのメッセージそのものを取得できない。 Ioではオブジェクトリテラル({a:1,b:2}みたいなやつ)って書けないの? 着想を得たってあがってるNewtonScript、Luaにはあったのに。 >>68 演算子や中括弧にもメソッド割り当てられるから簡単にできるよ >>69 中括弧に割り当てるのやめて、まじやめて 昔","演算子で泣かされたの重いだして涙目 >>70 いや引数の数チェックしてやればいいだけの話だし >>69 すげえ、本当に簡単に出来るね。 List,Mapでの[]といい、なんで標準で定義してないんだろう。 {} := method( obj := Object clone call message arguments foreach(i,obj doMessage(i setName("setSlot"))) obj ) {a=1,b=1+1} println 多分、>>68-73 みたいなFAQな流れを期待して、 Io sugeeeeとなるというのを想定しているのだろう 対話型インタプリタとエディタを同時に使いたい イメージ的には、 prolog系でのedit. haskellの処理系の:editみたいなことがしたい 以下のコードで、最後が false になってしまうのはなぜなんでしょうか? その前の出力を見る限りでは同じオブジェクトに見えるんですが… Foo := Object clone Foo priv := method( list(call sender, self) ) Foo bar := method( self priv ) l := Foo bar l println l at(0) println #=> Foo_0x80a87f0 ... l at(1) println #=> Foo_0x80a87f0 ... ((l at(0)) == (l at(1))) println #=> false !! >>81 レスありがとうございます。 l at(0) type println #=> "Object" l at(1) type println #=> "Foo" と、すると確かに違っていますね。 両方 Foo になっているべきに思えるんですが…うーん。 そうですね。バグですよね…。 レポートしておきます。 バグではないそうです。 call sender は呼び出し元のセルフではなく、ローカル環境(?)を返すとのこと。 (なので、call sender self とすれば良かった) それで思いついて試したんですが、呼び出し元の変数を書き換えたりもできるんですね。 Foo := Object clone Foo bar := method( call sender v println call sender v = "new value" ) Object clone do( v := "local value" Foo bar #=> local value v println #=> new value ) Mac Portsにあったんでインストールしてみたものの「io」て打ちこんでも コマンド見つからねーとか言うからport contentsしてみたらバイナリ名が「osxvm」だった。 皆Windowsでioやる時って、公式のWindows版バイナリ使ってます? それとも自分でビルドしたの使ってます? 最新tarをMingwでビルドしようと思ったら、 IoFile.cでsys/wait.h使ってるらしくビルド通らないんですよね・・・。 回避案・代案知ってる人教えてください。 ヘッダファイルの削除というのは、私には少々難しそうなので まずCygwin使って再度挑戦してみたいと思います。 ありがとうございました。 ↓Scalaスレで気になったことがあったんですが、IOだとこの辺の 優先順位の実装ってどんな風になってるんでしょうか? プログラミング言語 Scala http://pc11.2ch.net/test/read.cgi/tech/1205156417/739-743 739 デフォルトの名無しさん [] 2009/02/12(木) 02:57:16 + や * はメソッドだって聞いたけど、 2 + 3 * 4 は 14ってちゃんと評価してくれるんだね メソッドチェーンになるから、20が戻ってくると思った これって遅延評価のおかげ? Scalaのソースをちゃんと読まないといけないんだろうけど 740 デフォルトの名無しさん [sage] 2009/02/12(木) 03:21:54 +や*がメソッドだというのは間違ってないけど、中置式のメソッド呼び出しに 関しては、演算子の最初の1文字で優先順位が決まるというルールになってる。 このルールのおかげで、算術式に関しては直感的な動作をしてくれる。 Scala言語仕様6.12.3 Infix Operationsによると、優先順位は以下のようになってる。 letter < '|' < '^' < '&' < '<', '>' < '=', '!' < ':' < '+', '*' < '/', '%' < all other special characters たとえば、 "HOGE" charAt 0 + 1 という式があった場合、charAtの最初の文字はletterなので、+よりも演算子としての優先順位は低い。 そのため、 "HOGE".charAt((0).+(1)) と解釈される。 741 デフォルトの名無しさん [sage] 2009/02/12(木) 03:22:54 訂正。s/letter/all letters/ 742 740 [sage] 2009/02/12(木) 03:25:55 ありゃりゃ。コピペして不等号加えるときにミスったorz 正しくは、以下。 all letters < '|' < '^' < '&' < '<', '>' < '=', '!' < ':' < '+', '-' < '*', '/', '%' < all other special characters 743 739 [] 2009/02/13(金) 00:44:52 >>740 サンクス BigDecimalでも試したけど、ちゃんと掛け算・割り算を優先するってありがたいな RemoteActorの動作がいまいちわからなかったり(コンパイルした後、scalaコマンドで動かないのに、javaコマンドからだったらちゃんと動くとか) わからんことだらけなんだけど、しばらく弄ってみることにする ttp://f21.aaa.livedoor.jp/~kizz/prog/io/_docs/IoProgrammingGuide_ja_only.html マニュアルには 標準の演算子の優先順位は C 言語と同じ ユーザー定義の演算子は常に左から右へ とある なるほど・・・ > ユーザ定義の演算子 (標準の演算子名は使えない) は、常に左から右に動作する。 Us 「ユーザ定義」は「常に左から右」か Scalaは最初の一文字できまるということなので、Scalaの方がよいかもだな・・・。 「左から右へ」は演算子が左結合ってことじゃないの? 定義するときに優先度指定はできるよ 以下を参考に ttp://subtech.g.hatena.ne.jp/cho45/20071021/1192926373 文字列パースにおいてのみ機能するようだ あと、 ttp://www.nabble.com/Question-about-OperatorTable-and-difference-between-Interpreter-Scripts-td17356792.html 対話環境とスクリプト環境では挙動が変わるらしい MinGWでビルドできました。 >>88 さんが仰っていたように、 <sys/wait.h>をコメントアウトして Line:238辺りにある IONUMBER(WEXITSTATUS(exitStatus)) を IONUMBER( ( (exitStatus >> 8) & 0xff) ) と書き直したらいけました。 今更ですが、ありがとうございました。 96です。 久しぶりにgithubから最新取ってきてコンパイルしてみましたが、 >>96 の問題は修正されていました。良かった。 しかし今度はアドオンが上手く動かせていません。 使っている方いましたら、動作具合を教えて頂けないでしょうか? 公式サイトが・・・ github行くといくつかあるんだけどどれがいいんだ? >>100 公式がいいなら、公式のgithub。 最新版がいいなら、githubのnetworkタブクリックして日付が一番新しいそうなのをえらぶ >>101 今朝公式直ったみたいだな 公式から飛べるgithubで落とした ありがとう ちなみに落としたのはdownload押してmaster選んだやつ セックスしたときに下の前の穴に入れた、なんて明示する必要ないよな 久しぶりにいじってみたんですが、いつのまにか、++ が実装できるようになっていますね。 call message previous が実装されていました。 Number ++ := method( varname := call message previous name now := call sender getSlot(varname) if (now, call sender setSlot(varname, now + 1)) self ) a := 1 a println # => 1 a ++ println # => 1 (後置なので返ってくるのは 1 !) a println # => 2 (a++ + 456 / 3) println # => 154 a println # => 3 漏れら極悪非道のageブラザーズ! 今日もネタもないのにageてやるからな!  ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∧_∧ ∧_∧ age (・∀・∩)(∩・∀・) age (つ 丿 ( ⊂) age ( ヽノ ヽ/ ) age し(_) (_)J githubに移行してる stevedekorte's io at master - GitHub http://github.com/stevedekorte/io >>108 ハアアァァアアアアアアアアアアアアアアア??? ゴミだな うるさいゴミ うへえ、翻訳出たのか 言語つまみぐい入門には最適だな ためしに貼り付けてみたんだけど、このスレ、見てる人いるんですね。 ちなみに件の本は、言語のつまみ食いに慣れている人にとっては 既に味見済みの言語ばかりかと思いますが、まとめて復習出来るという点で良書です。 しっかり読んでも、流し読みでも楽しい本だと思います。 # まだ読み終えていませんが。 一方、そうでない人にとっては、つまみ食いというほどお手軽に読める本ではないかもしれません。 でもIoスレを見ているような人には不要な心配ですね。 組み込み的にも言語的にもIoのほうがかなりいいと個人的に思ってる 致命的に流行ってないけど >> 120 問題は、 (1) 実行速度の遅さ (2) addon に必要なライブラリを含めた場合のビルドの面倒さ にあるように思う (1) に関しては、他VM上で動くIo実装やIoに影響を受けたとしている言語に期待 (2) に関しては、ポータビリティがひとつの売りなので本家では対応しないだろうから、これまた他実装に期待 _ | ,、‐''''´ ̄ ̄``''''-、, / \/ ::\ / \/\/ ::::::ヽ / \/\/\/ :::::::ヽ |ヽ/\・∀・ /\/ ::::::::| アキラメロンテスト |./\/\/\/\ :::::::::| ヽ \/\/\ :::::::::/ ヽ /\/\ ::::::::::/ \ /\ :::::::::::::::/ `''-、、,,:::::::::::,,、、‐''´ Singletone := Object clone Singleton clone := Singleton とやってシングルトンプロトタイプを作る。 で、Singletonを継承した新しいプロトタイプを作る。 ExSingleton := Singleton clone だめだ、頭がクラスベースになってる...orz Singletonって今まで使う機会がなかったんだけど、 試しにPythonで書いてみようとしたら、意外と面倒。 IoのSingletonってシンプルでカコイイ! ∩___∩ / ノ \ ヽ | ● ● | 彡 (_●_) ミ /、 |∪| ,\ この鮭の切り身やるから帰れよ /.| ヽノ | ヽ ,,/-―ー-、, --、 .|_,| r-、,'''";;:;;:;::;;;;:;;::;:;:;;::;:;`'- /_,l,,__ ) |,,ノ;;:;r'" ̄ ゙̄^"`Y'-、;;;::;:;::;:;:;:;::;:| .ヽ,′ ; `"";;;;;⌒゙') ´`゙'''''''''''‐-‐'"`‐-‐'"゛ `゙´ 「;:丶、:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:_;:} ト、;:;:;:丶、:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:_;:;: --―;:''"´;:_」 {::ト、:;:;:;:;:;:` '' ー―――;:;: '' "´;:;:;:;:;:;:;:;:;:;_ ,.ィ彡! l::l 丶、:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:_,. -r==ニ二三三 } ',:i r- 、、` ' ―――― '' "´ ,ィ彡三三三三三/、 || ヾ三) ,ィ三ミヲ `丶三三三三三ん', lj ゙' ― '′ ヾ三三三ミ/ )} | , --:.:、:.. .:.:.:.:..:.:... 三三三ツ ) / | fr‐t-、ヽ. .:.:. '",二ニ、、 三三シ,rく / l 丶‐三' ノ :ヾイ、弋::ノ`:.:. 三シ r'‐' / ', ゙'ー-‐' イ: : 丶三-‐'":.:.:.. 三! ,' / ', /.: ミツ/ー'′ ', ,ィ/ : .:'^ヽ、.. jソ,ト、 ',.:/.:.,{、: .: ,ノ 丶:::.. -、 ,ハ l、 ヽ .i:, ヽ、__, イ _`゙ヾ ノ / ,l l:ヽ ,.ゝ、ト=、ェェェェ=テアヽ } ,/ l l:.:(丶、 _r/ /:.`i ヽヾェェシ/ ゙' / ,' ,':.:.:`ヾヽ _,,. -‐ '' " ´l. { {:.:.:.:', `.':==:'." / / /:.:.:.:.:.:.} ト―-- ,,_ 一 '' "´ ',ヽ丶:.:.:ヽ、 ⌒ ,r'" / /:.:.:.:.:.:.:ノ,ノ | ``丶、 ヽ丶丶、:.:.ゝ、 ___,. イ / /:.:..:.:.:.,ィシ′ | `丶、 ``"二ユ、_,.,____/__,/;: -‐ '" / だれかコレをIoで書いてみて Command = {}; Command.Do = function(){}; Command.UnDo = function(){}; Journal = {}; Journal.ReDo = function(){}; Journal.UnDo = function(){}; Journal.DoIt = function( aCommand ) { aCommand.Do(); var unDo = this.unDo, reDo = this.ReDo; this.UnDo = function() { aCommand.UnDo(); this.UnDo = unDo; this.ReDo = function() { aCommand.Do(); this.ReDo = reDo; } } } ActiveJournal = Object.create( Journal ); HelloCommand = Object.create( Command ); HelloCommand.Do = function() { WScript.StdOut.WriteLine( "Hello" ); } ActiveJournal.DoIt( HelloCommand ); ActiveJournal.UnDo(); ActiveJournal.ReDo(); 7つの言語〜を読んで興味を持ったのですが、Ioの書籍はありますでしょうか? >>2 >>1 がネタ振りできなくても残ってるじゃないか デタラメ言いやがって お前はろくになにもせず歳をとってしまったことだろう smalltalkあるいはjavascriptは、 プロトタイプベースのオブジェクト指向言語として、 似ていますでしょうか? ioライクなインタプリタを作っていますが、ioの情報が少ないため、 他に参照できる情報がないか探していました。 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる