クラなんとか or くらなんとか or cla なんとかの日記

2009-12-08

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:パッケージ化するのにテストとドキュメントが要ると思う.

2009-11-10

Erlang Super Lite [Chapter1] に行ってない

行けません.ダブルブッキングですね.

とりあえず宿題は,こっちに書いておきます.

ツッコミ待ちということにしよう.

リンク

2009-11-09

distel を入れてみた

make する.あと erlang.el をコピる.

erlang-start.el は,初期設定でたぶんそのまま使えばいい.

$ cd distel
$ make
$ locate erlang.el|xargs diff # 念の為
$ cp `locate erlang.el|head -1` elisp
$ locate erlang-start.el|xargs diff # 念の為
$ cp `locate erlang-start.el|head -1` elisp

あとは,.emacs に適宜追加.

;; erlang
(add-to-list 'load-path (expand-path ".emacs.d/distel/elisp" home))
(require 'erlang-start)
(require 'distel)
(distel-setup)

これで,*.erl への関連とか.M-x run-erlang も使えるようになる.

README にこんな記述が.

だけど,NetInfo Manager なんてもんは無い.

参考記事だと dscl を使うらしいけど,困ったら何かしよう.

Special notes for Mac OSX:

David Wallin reports the following procedure to setup Distel to work
on an OSX machine with no network connection:

1. Start NetInfo Manager.app (in /Applications/Utilities)
2. From NetInfo Manager, select the directory path
   "/machines/localhost" and mark property "name" and (and anytime
   before here: click on the lock and enter the password) choose
   "Append Value" from the "Directory" menu.
3. Enter your machine name as the appended value and Save.

This procedure is like putting "127.0.0.1 <hostname>" into /etc/hosts
on a UNIX machine. It's necessary so that Emacs can open sockets to
the localhost via the hostname part of a nodename without talking to
DNS.

参考

2009-10-22

Erlang Super Lite(仮) 準備会にいってきた

今回は第零会ということで,本編をどうしようという話でした.

  • Erlang を勉強してもプログラミング的に嬉しくなれない
    • むしろ,不便?
    • やはり特定用途向け
  • 仕事とか考えないで,楽しくやる方がいいぜ
  • 本的には,Erlang Programming をお勧めする
  • クーポンを使うといいよ
  • むしろ Eclipse をお勧めする
  • Erlang のデバッグは勘だ
  • ドキュメント,ソース
  • 分散環境の方は,モロ仕事でやってる人ばかり
  • てか,Erlang でこれだけ(12人くらい)集まるのも想定外

ということでー,本編は問題を解きながら,

必要な部分を勉強していこーぜ.みたいな話しらしいです.

Link

次回

http://www.amazon.co.jp/exec/obidos/ASIN/0596518188/search042-22/ref=nosim/

Erlang Programming

個人的に日程がバッティングしてるので,宿題だけやろうかなと思っているところ.

twitter とか流してくれたら反応できるかも.

2009-10-19

Erlang をインストールした

Erlang Super Lite(仮) 準備会にて必要かと思って,Erlang をインストールする流れ.

ご参考

以下はただのログっぽいこと.

いつものように,port install erlang したのだけど,

expat が,universal が無いときにインストールしたみたいだったので,

variant +universal で,upgrade した.

けど,erlang が +universal でbuild できなかったので,-universal

なんのために,upgrade したのか.

$ port installed|egrep expat
  expat @2.0.1_0 (active)
$ sudo port -ncuf upgrade expat
Warning: Skipping upgrade since expat 2.0.1_0 >= expat 2.0.1_0, even though installed variants "" do not match "+universal". Use 'upgrade --enforce-variants' to switch to the requested variants.
$ sudo port -ncuf upgrade --enforce-variants expat
$ port installed|egrep expat
  expat @2.0.1_0+universal (active)
$ sudo port install erlang -universal

error の辺.

thread no で smp enable にできんとか.

thread はどこいったんだ?

checking for pthread_create in -lpthread... no
checking for pthread_create in -lc_r... no
checking if the '-pthread' switch can be used... no
checking whether default stack size should be modified... no
checking for void *... (cached) yes
checking size of void *... (cached) 8
checking whether an emulator with smp support should be built... yes; enabled by user
configure: error: cannot build smp enabled emulator since no thread library was found
configure: error: /bin/sh '/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_lang_erlang/work/erlang-R13B02/erts/configure' failed for erts

    while executing
"$procedure $targetname"
Warning: the following items did not execute (for erlang): org.macports.activate org.macp
orts.configure org.macports.build org.macports.destroot org.macports.install
Error: Status 1 encountered during processing.

そんなことより,本が実家っぽい.どうするかな.

http://www.amazon.co.jp/exec/obidos/ASIN/4274067149/search042-22/ref=nosim/

プログラミングErlang