2011年6月29日水曜日

昨日出来たこと出来なかった事



出来たこと




  • TODOリストを作る

  • 姿勢を正す

  • 先生に今日の午後5時に会社へ伺う事を伝える

  • 会社訪問する

  • 昼飯で野菜をとる


    • 海鮮丼の大根



  • 30分以上かけて食事する


    • 良く噛みました!



  • Scheme手習い8章を読む


    • condを書き忘れてるのに気付くまで10~20分かかった。睡眠不足やばい!



  • 一年生と一言でもいいので会話する


    • 挨拶だけ



  • 休み時間の10分を1回使って散歩する

  • 48時間でSchemeを書こう - Wikibooksの最初の一歩をやる

  • コーヒーを最低一杯飲む

  • 運動する


    • 腹筋背筋

    • 散歩(睡眠時間を削らない程度に)



  • RubyKoanを1ファイルこなす


    • @geriraoojishin を巻き込んだけどgem install rakeでちょっとつまずいた。

    • Try Clojureをやることに




出来なかった事




  • Scheme手習い8章の記事をアップする


    • 睡眠が短かくてバタリ。学校でやっとけばよかった。



  • SQLの授業内容をきっちり把握する


    • 微妙においついてない。



  • ロゴマーク1個作る


    • @geriraoojishin に聞いてみなければ



  • 早寝


    • 目標を定めなければならない。遅くて1時半。




欲しい本




買った本







Scheme手習い Chapter 8



さて、いよいよ後半になって難しくなってきた。


8章ではカリー化、収集子(継続とも呼ばれる)、収集子を渡すスタイルの関数の書き方。


第10の掟「同時に2つ以上の値を集める際には関数を作るべし。」が出てきた。


自分なりまとめ




  • 関数はリストとアトムを返せる


    • 関数自身を返す事も出来る


      • これは関数が第一級オブジェクトだから?

      • 第一級ってどんな事かっていうと


        • 関数を引数にとれる

        • 関数を変数に代入出来る

        • 関数に名前をつける必要がない



      • よく聞く関数が第一級市民というのはWikipedia見ると『この言葉は1960年代にChristopher Stracheyによって「functions as first-class citizens」という文脈で初めて使われた。』らしいのでそれから来てるのかな。





  • カリー化


    • 『カリー化 (currying) とは、計算機科学分野の技法の一つ。複数の引数をとる関数を、引数が「もとの関数の最初の引数」で戻り値が「もとの関数の残りの引数を取り結果を返す関数」であるような関数にすること。』(Wikipediaより)




気付きとか




  • func.scmが700行越えてきて見通し悪い


    • なんか前もこんな事書いた気がする


      • 1章1ファイルにまとめるとすっきりしそう

      • テストも1つのファイルにまとめられたりするかな?





  • insertR-fとinsertL-fの内側のlambdaの引数の名前


    • insertRやinsertLのときは(new old lat)だったのが(new old l)になってる。

    • コピペでinsertR-fとinsertL-fを作ったのでlatのままにしてたのに気付き、後から修正 orz

    • test?を取るのでlat以外の構造も比較出来る。だからlatじゃなくてl、なのかな?

    • 引数の名前付けって大事っすね…

    • でもinsert-gだとeq?で比較してるのにlだ。latじゃないのかな…謎。



  • 前に定義した関数を定義しなおした時ってテストどうしよ


    • とりあえず1.scmから順番に全部通るのを確認してみてる



  • こないだ作ったf-testマクロの都合で関数を返す関数のテストが出来ないかも

  • 無名関数を渡すようにすると覚えておく名前が少なくてすむ(p135)便利!

  • 関数を取って関数を返す関数は怖くない!

  • multirember&coみたいに、名前に&がつくのには、最後に?がつくのは述語!のように決まりがあるのだろうか

  • 継続渡しスタイル面白い!

  • even?の定義


    • 自分で作ったo+ o* o/を使わずにSchemeに元からある+ * /を使って定義すると奇数でも#tになるので注意。



  • p148のevens-only*&coの結果は間違ってるらしい



  • evens-only*&coは一応書けた。やっぱり一番最後の収集子が難しい。


    • 一応かけたけど何をしてるかって聞かれるとまだ説明しづらい。




感想


収集子面白い!


lambdaでくるんで渡して後続の計算から呼び出されるところとか


クロージャで前の計算の値を保持してるとことか





今日出来た事と出来なかった事



今日出来た事




出来なかった事




  • もいっこ別用途のblogを作る

  • CakePHP調べる

  • 48時間でSchemeを書こうの構文解析をやる


借りた本


同級生から



フォントのふしぎ  ブランドのロゴはなぜ高そうに見えるのか?

フォントのふしぎ ブランドのロゴはなぜ高そうに見えるのか?






借りた。





2011年6月27日月曜日

今日やったこと出来なかったこと



出来た




  • 17:30から校内での会社説明会


    • 参加しない事を決めて先生への連絡



  • Scheme手習いp142を読む


    • 収集子が出てきた。

    • この基本さえ抑えれば後はバリエーションな感じなので明日には8章読み終えるかも。



  • 2期の時間割確認


    • Server Side Scriptの授業が入ってるのを確認。PHPの検定を取るという話を聞いている。



  • 企業への連絡


    • 明日会う約束(17:00)



  • 情熱プログラマの内容を実践


    • 三日坊主でもいいからやる事にした

    • 今日はp102のSay It, Do It, Show It


      • 10分の空き時間でも出来る事を考えた

      • 遅刻しそうになってもまずはじめに一日の予定を立てる



    • 今日は何をすべきか?一日でやることを書いた。


      • 継ぎ足して「そういえばこれも」というのが以外と多かった。





  • RSSリーダーの未読とピンを倒した。


    • 久々に消化出来て嬉しい。

    • なんか個々の記事の内容をはっきり追えてない orz

    • ブクマだけしといた。



  • 爪を切る


    • 最近足をひっかいて出血してるのは爪のせいだったかも

    • 足の毛がかゆみの原因かもしれない



  • 休み時間に休みを取る


    • 寝不足だったので。とりあえず椅子にじっと座るのはいやなので歩いたりしてリフレッシュ。



  • 午前と午後で買う飲み物を3本までに


    • 毎日ジュース買いすぎなので制限を。

    • これからは水を買う。

    • 炭酸水があるとベストだけど開南の前のローソンには冷えてるのが置いてないのよね。今度聞いてみる。



  • 背筋を伸ばす


    • 知らずしらず曲がっている。スーツだから尚更かっこわるい。スーツの生地が痛む。

    • 午前中は意識的にやってたけど午後はどうだかしらん



  • カロリーの低い食生活


    • 朝、昼とサラダを取り夜も野菜炒めで野菜をしっかりとる

    • プロテインは飲む

    • 朝ワッフル食べる程度なら許容

    • 家で飴ちゃん2、3個食べてしまった。後ガムも5粒は食べた。カロリーないふりしてあるから困る。

    • やるべき事は豆腐の多い食事と、食べたものの記録。



  • 筋トレ


    • 腹筋背筋ともに100回程度。あとうつぶせに寝て足をあげる運動とか。尻肉消えろ。




出来なかったこと




  • えりかさんへSEA/Jの本を渡す


    • 飲みの席での話ですっかり忘れてた。スマン。

    • そもそも自分の家になかったことが判明

    • 貸してた方に持ってきてもらってそのまま渡してもらおう



  • 欲しい本を買う


    • ドラッカーのマネジメント(エッセンシャル版)


      • もしドラ読んだ影響



    • Head First ネットワーク


      • 同級生になんでも出来そうだよねと言わたのでせっかくなので何でも出来るやつになりたい

      • ネットワークも一応知っとかなければならない





  • メガネ買う


    • コーティング剥がれてる



  • 歯を治す


    • 皆もガム食べる時は気つけないと銀歯とれるよ。



  • 本探す


    • 行方不明な本が一冊




予定にはないけど出来たこと




  • 祖父にあった。元気そうで何より。

  • ジーンズを買った。(82cm)


    • ダイエット効果で32inchや82cmが入るように。嬉しい。


      • ただしまだピチピチ。尻ももっと上むけよ。贅肉消滅させたい。この手で、いやこの尻で消しさりたい。





  • シャツを買った。(2枚)


    • 5分丈の袖


      • 似合わなかったら着てこなくなります。



    • 白いシャツ


      • 汗じみこわい





  • DVD借りた


    • インセプション借りてみた。




明日やりたいこと




  • 海鮮食べたい

  • 本を買いたい

  • おいしい酒飲みたい

  • もうすこしマシなTODOリスト





2011年6月26日日曜日

2011年6月21日火曜日

Scheme手習い Chapter 7



気付きとか




  • 集合の例として出ているものについて(p.113)


    • (apple peaches apple plum)や(apples peaches pears plums)などリストの中の要素に複数形のものがある。

    • set?がどんな関数か考えさせるために複数形の名詞を入れてるのかなぁ(複数形の名詞だからといってsetなわけではないみたいな)



  • eq?をequal?使って書き直したっけ?


    • p.113とp.115でmember?とかmultirember?の定義をequal?使って書き直したって記述があるんだけど記憶になかった orz



  • makesetのテストケースについて


    • 最初のmakesetの定義だと結果はp.114の最初の質問の答え(apple peach pear plum lemon)と同じ結果にならない。

    • 最初のmakesetの定義だと結果はp.114の最後の質問の答え(pear plum apple lemon peach)になる。

    • 第2のmakesetの定義だとその逆で、最初の質問の答えになるが、最後の質問の答えと同じ結果にならない。

    • とりあえず最後の定義で通るように修正。



  • subset?の2つ目の質問でandと5の間にスペースがあいてないのは間違いかな? (p.115)

  • intersect?の定義のところで、最初の質問の答えが#fじゃなくてnilになってるのが所々ある。間違い?

  • p120のfirst, secondの定義では引数がp(pair)、p121のthirdの定義だとl(list)。引数の名前付けも中身に対応してて分かりやすい。

  • 集合とか、そこらへんの数学出てくるとお手上げ。


    • 情報数学入門でも読むか… orz



  • fullfun?を、最初



(define fullfun?
(lambda (fun)
(and (set? (firsts fun))
(set? (seconds fun)))))


と書いたんだけど、funが渡されてくる前提があるから最初の質問はいらなかった。


感想




  • 前に定義した関数を使って簡潔に書ける


    • makesetでmultirember

    • eqset?の中のsubset?

    • intersectallの中でintersect



  • 表現から部分を取り出す補助関数first, second, buildを使ってすっきり書ける


    • 前章でも表現から部分を取り出す補助関数を定義して抽象化してた。(1st-sub-exp, operatorなど)


      • 読み易くなって変更にも強い!



    • revrelで補助関数を使った定義と使わない定義を見比べると超違う


      • 使わないとき







(define revrel
(lambda (rel)
(cond ((null? rel) '())
(else (cons (cons (car (cdr (car rel)))
(cons (car (car rel))
'()))
(revrel (cdr rel)))))))








      • build, first, second使うと





(define revrel
(lambda (rel)
(cond ((null? rel) '())
(else (cons (build (second (car rel))
(first (car rel)))
(revrel (cdr rel)))))))








      • 更にrevpairを使うとすっきり





(define revrel
(lambda (rel)
(cond ((null? rel) '())
(else (cons (revpair (car rel))
(revrel (cdr rel)))))))




  • fullfun?も


    • (set? (seconds fun))か(fun? (revrel fun))で。




なんというか一行文の補助関数がある/なしで大分読み易さが違うなって印象でした。


前章でも出てきた第8の戒律



表現から抽象化するに際し、補助関数を使用すべし。



はめっちゃ大事ですね。


今までの章で書いたのも補助関数を使うと読み易くなるのだろうか。