Erlang Lite #02 にいってきた

  • わざと並列っぽいことは一旦飛ばして後でじっくりやろう
    • まずは,3, 7, 9, 19 章を進める
  • Chapter 03, , 07, 09 など
  • Prolog に似てる話
    • C call と Pascal call の話
  • 普通のパターンマッチ
    • if/case とか パターンマッチとか改行とかのスタイルが知りたくはある
      • ガードで使えるものとか
  • List Comprehension
  • 問題まで進まなかった
  • みんなわかってるよね.という単語を使ってしまった(反省
  • 無名関数でパターンマッチが書けたのがおもしろいと思った
    • ということで,無名関数を再帰したくなった
      • fix f x = f (fix f) x を教えてくれた id:yoshihiro503 さんありがとー

ということで,PHP で fix を書いてみた

書いてみてわかったこと

  • return が必須っぽかった(何かの設定?
    • 当方ほぼデフォルトのMacOSX 10.6.2 の /usr/bin/php
  • 行末に";"(セミコロン)が必須
    • ブロックの最後とかはさすがに省略したかった
  • クロージャで外部の変数(自由変数)を使うのに,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://www.amazon.co.jp/exec/obidos/ASIN/0596518188/search042-22/ref=nosim/
Erlang Programming

*1:パッケージ化するのにテストとドキュメントが要ると思う.