この資料が分かりやすかった。
以下メモ書き
- 言語の基本的な動作を覗く
- ループ
- loop(処理)
- while(条件, 処理)
- for(カウンタ名, 初期値, 終了値(含む), senderを伴うメッセージ)
- for(カウンタ名, 初期値, 終了値(含む), 増分, senderを伴うメッセージ)
- 条件分岐
- ifは関数
- if(条件, 真の場合, 偽の場合)
- if(条件) then(真の場合) else(偽の場合)
- if(条件1) then(条件1が真の場合) elseif(条件2) then(条件2が真の場合) else(偽の場合)
- if(条件, 真の場合, 偽の場合)は真偽のコードどちらかを評価した結果を返す
- 演算子
- OperatorTableで演算子表を確認出来る
- 優先順位が分かる
- 演算子の追加はaddOperator(演算子, 優先順位)
- 1 + 2は1 +(2)というメッセージにコンパイルされる。1に対して+(2)というメッセージ送る
- addOperatorでOperatorTableに演算子を追加しないとエラーが出る例
- OperatorTableで演算子表を確認出来る
$ io
Io 20110905
Io> List ++ := method(a, a foreach(v, call target append(v)))
==> method(a,
a foreach(v, call target append(v))
)
Io> list(1, 2) ++(list(3, 4))
==> list(1, 2, 3, 4)
Io> list(1, 2) ++ list(3, 4)
Exception: nil does not respond to 'foreach'
---------
nil foreach Command Line 1
List ++ Command Line 1
Io> OperatorTable addOperator("++", 4)
==> OperatorTable_0x7fc798c73040:
(略)
Io> list(1, 2) ++ list(3, 4)
==> list(1, 2, 3, 4)
- メッセージ
- メソッド呼び出すとcallスロットにcallオブジェクトが設定される
- callオブジェクトのスロットはsender(送信元), target(宛先), arguments(引数)
- メッセージの引数はmethod(arg, arg)の様にargを書くと評価される
- メッセージの引数を書かないと評価されない
- method(call message argAt(0)) <- argAt(0)で0番目の引数を取る事が出来るが評価はされない
- えばるならevalArgAt
- ほんとに,以外はほぼメッセージ… 純粋! かっこいい!
- unlessの例
- call sender doMessage(call message argAt(2))
- 送信元の環境で2番目の引数を評価
- 短くやる方法がevalAtArg
- animalsの例
- プロトタイプを辿りながらスロットを出力していく
- selfはcallのtargetに設定されてるのかな
- 1つのオブジェクトが複数のプロトタイプを持つ場合もあるらしい
- どういうことだろうww
- メッセージリフレクションとオブジェクトリフレクション
- クラスの存在なし
- call messageやselfやprotoなどメッセージやオブジェクトにアクセスする手段がいっぱい
- asなんとかメソッドでデータ形式の変換
セルフスタディ 試してみよう
既にあるメソッドを勉強して使いこなさないとすっきり書けないですね。
本を見ながら書いたもの
感想
他の方の回答を調べたらめっちゃすっきり書かれてる。
この違いがどこからくるのか、かける時間かリファレンスをちゃんと見てるのか良い方法があるのか気になる。
今回は間があいてしまいました。1週間1言語はやはりちゃんとやらないとついていけない orz
1ヶ月の夏休み中は内定先の企業様でバイトをさせて頂きました。
プライベート時間の確保が学校居るときより出来なくなりました(週1日は元同級生と基本情報の勉強をするため空けてたり、週末も色々あったりで) orz
時間をうまく使う技術身につけないと会社入ったらあっという間に老いて死んじゃうので今のうちどうにかせねば…
今月はScheme修行の本文からもっと深く読めてない部分(Yコンビネータ等々)も読むし、PHPの勉強も始めるし、3日目はしっかり読んで、さっと練習問題まで終わらせてしまおうと思います。
0 件のコメント:
コメントを投稿