Erlang Lite #02 にいってきた
- わざと並列っぽいことは一旦飛ばして後でじっくりやろう
- まずは,3, 7, 9, 19 章を進める
- Chapter 03, , 07, 09 など
- Prolog に似てる話
- C call と Pascal call の話
- 普通のパターンマッチ
- if/case とか パターンマッチとか改行とかのスタイルが知りたくはある
- ガードで使えるものとか
- if/case とか パターンマッチとか改行とかのスタイルが知りたくはある
- List Comprehension
- 問題まで進まなかった
- みんなわかってるよね.という単語を使ってしまった(反省
- 無名関数でパターンマッチが書けたのがおもしろいと思った
- ということで,無名関数を再帰したくなった
- fix f x = f (fix f) x を教えてくれた id:yoshihiro503 さんありがとー
- ということで,無名関数を再帰したくなった
ということで,PHP で fix を書いてみた
書いてみてわかったこと
- return が必須っぽかった(何かの設定?
- 行末に";"(セミコロン)が必須
- ブロックの最後とかはさすがに省略したかった
- クロージャで外部の変数(自由変数)を使うのに,use 指定が必要
- PHP を知らな過ぎる
- 自由変数を書き換えるには & 指定が必要(リファレンス?
- そもそも function とか 変数に $ を付けるということも(ほぼ)知らなかった
- array() で配列ができることは知っていた
- php-mode が入っていなかった(重要
- 無名関数を作っても変数に一度代入しないとうまく使えないようだった(未確認
- array_{unshift,push} の戻り値が int じゃなくて array が良かった
- PHP を書いていたおかげでモテモテだった
ということで,こんなんを使えるみたい.あまりやらないだろうけど.
fix(fun(_ , []) -> []; (F, [X | Xs]) -> ... F(Xs) end, XXX).
個人的には,パッケージングまでしたいので,
18章(Types and Documentation)あたりも楽しそうだと思うのだった.*1
でも試したら typer が PTL が必要とかいってきたので,後で試す.
$ typer --show aaa.erl typer: Dialyzer's PLT is missing or is not up-to-date; please (re)create it
参考
- http://ja.wikipedia.org/wiki/%E5%91%BC%E5%87%BA%E8%A6%8F%E7%B4%84
- http://jp2.php.net/manual/ja/function.return.php
- http://php.net/manual/ja/functions.anonymous.php
- http://jp2.php.net/manual/ja/functions.returning-values.php
*1:パッケージ化するのにテストとドキュメントが要ると思う.