Logic Dice このページをアンテナに追加

2012-02-09

2/10 練習メモ

Haskellλ式

add :: (Num a) => a -> a -> a

add = (\ x y -> x + y)

型クラスを用いる場合は、

関数名 :: (型クラス[, 型クラス...]) => (関数の型)という宣言の仕方になる。

型クラスのところがJavaの<T extends Hoge>みたいなもの (Thanks rf0444).


Ocamlでは無名関数はfunを用いて記述する。

add = fun x y -> x + y

厳密なλ式がもしかしたらあるのかもしれないけど、とりあえずはこれで表現可能。

2012-02-08

2/9 練習メモ

Ctrl + D -> terminalを落とす。screenの時とか。


git: git checkout -b [branch name]

ブランチを作って移動する。

現在のworking状況(addやcommitしていないファイル)を引き継いでブランチを移動。


単相性限定っていうものがあるらしい。

なんかこわいらしい。


Progrmming Haskell P.43

練習問題1, 2をHaskellOCamlで。

https://github.com/a-hisame/FunctionalPractice/tree/prac4

2012-02-06

2/6 夜会話

サモンナイト風タイトルの忘備録。

map (+) ってどんなの返ってくるの?

...というのをつらつらと書き連ねていたことからスタート。

今回は分かんなかったので、これは後々の課題。

ここでは話を簡単にするために(+)はOCamlの(+)*1のみとして考えていった。

map :: (a -> b) -> [a] -> [b]
(+) :: (int -> (int -> int) )

これをa, bに合わせると、
map :: (int -> (int -> int)) -> [int] -> [(int -> int)]

なんじゃこりゃー。何に使うのかよくわからん。まだ。

んで、この変換がどうにもしっくりこない。

int -> int -> intを (int -> (int -> int))にすっと変換して考えられなかった。

色々話してるうちにたどり着いたのが、値の世界や、高等数学のレベルだと、関数は「複数の値を取り、1つの値を返す」もの。

そのため、+であれば、 (+) :: int×int -> int のような感覚を「自分はより直観的」と感じる。

なので、int -> int -> intを (int -> int) -> int と結合するかのように錯覚しており、

すぐには出てこなかった。

最初はゆっくり、()を付けて考えるぐらいでいいと思う。


確率ならった時に、確率関数とかただの高階関数に過ぎないのに、それが分からないからすごくわかんなくなる。

値以外にも関数も返せることを離散数学のレベルで教えるべき。


haskell-platformとlrwrapをaptitude install。

Programming Haskellの課題をHaskellOCamlで解いてgit-hub(a-hisame)に上げる。

*1:int->int->int

2012-01-26

自然数に0を加える方が便利な理由

隣の人(id:rf0444)と話してたらまとまったので。


0を含む自然数の集合 N_0と0を含まない自然数の集合 N_1を比較すると、

  •  (N_1, +)半群*1であり、Monoid*2ではない。
  •  (N_0, +)半群であり、Monoid*3である。

なんで、0を含めると自然数をより広いインタフェースで考えられるようになる。

あと、プログラマの場合は、リストやモナドと同じ枠組みで考えられるようになるのも大きい。

……モナド分かってないけど、確かに対応していることは分かったので次はそれだな。

*1:交換則が成立する。すなわち、集合の任意の要素a,b,cに対して(a+b)+c=a+(b+c)

*2半群であり、なおかつ単位元を持つ。すなわち、集合の全ての要素aに対して、e+a = a+e = aとなるeが存在する

*3:e = 0が唯一の解となる

2012-01-17

IE8でDOCTYPEを書かずにgetElementByIdを使った場合の挙動

久しぶりの日記です。


仕事で情報処理してると色々な場面がありますよね。

自分じゃ絶対使わないけど、IEでの挙動を確かめなければいけなかったり。

そして、そんなIEを使ってる時に遭遇した問題に関して一言。


http://d.hatena.ne.jp/seiunsky/20100209/1265691289


IE7までは、なぜかJavascriptのdocument.getElementById('hoge')となると、name="hoge"のDOMが取得されてしまう残念仕様がありました。

しかし、IE8ではこれがようやく修正されました。


……が、ちょっとばっかりIE7以前の挙動が再現する例を発見しました。

それが、HTMLのDOCTYPE宣言を行わない場合です。

上記リンクのhtmlのDOCTYPE宣言を消したhtmlに対して処理を行うと、残念ながらnameと一致するものが取得されてしまいます(nameの文字が表示される。IE8/WinXPおよび7で確認/FireFoxではきちんとidが表示されます)。


推測ではDOCTYPE宣言が無いHTMLを読み込む場合、古いHTMLにはDOCTYPE宣言が無いものが多かったことから、IE8の互換モードが自動的にIE7の互換モードとしてHTMLファイルを読み込んでしまい、結果としてIE7以前の仕様のjavascriptが実行されるのではないかと思います。


まあ、DOCTYPE書けって話なんですが、ちょっとはまってしまったので忘備録に。

2011-10-24

アグリコラ勉強会 一人企画会議

突発的なIT系勉強会が開かれるぐらいなら、別にアグリコラで勉強会をしたっていいじゃない!

てなわけで企画+妄想。

会場と人が集まったら是非ともやりたい。

※この記事が消えていたら企画倒れです。

----

時期:2012年1月後半〜2月前半(?)/土曜日

規模:15人〜30人ぐらい? (そんなにいるかは分からないけど)

企画スケジュール:

10:00〜18:00ぐらいの8時間ぐらい借りられるとよさげ?

【朝:勉強・講演会】 10:00〜12:00ぐらい?

アグリコラ基礎戦略(-> はじめてでも大丈夫だよ!)

・強い人のお話(スピーカーしてくれる人がいるといいなぁ)

・個々のLT(獣医最高!とか5分で語ればいいと思うよ)

・勉強成果発表(骨細工の理論最高点は何点?とか誰得なものでも)

【昼:実践編】

・5グリだと大体2戦ぐらいかな。

感想戦も機会がないと少な目だから、ドラフトのピックと狙いの関係とかを話すのもいいかも。

・1戦→LT→1戦てのもありか。

・何か講演会の内容を活かせるようなテーマがあるといいんだけれど。

----

最大の問題は会場かなぁ。

どれくらい人が集まる/予算が分からないので、立てづらいし。

プロジェクターがあって、声を出しても文句を言われないところ……。

東京を良く知らないのもでかいなぁ。


参加したい、何かこんなの面白いんじゃない? っていう意見がある方はtwitterでもブログでも、ご意見ください。

2011-07-09

わんくま同盟勉強会名古屋#18で発表してきました。

「グラフにまつわるエトセトラ」というテーマで発表してきました。

資料は以下から。

https://docs.google.com/viewer?a=v&pid=explorer&chrome=true&srcid=0B3nNi1KZf_eCYWU4NTMwZjEtOTljYS00NzVhLWJjOTUtMjdjYWNkOTRmOWIz&hl=ja

発表した内容はグラフ理論とグラフクラス+インターバルクラスについて。

詳細書くなら落ち着いてからで。