2009-12-08
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 が必須っぽかった(何かの設定?
- 当方ほぼデフォルトの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
参考
*1:パッケージ化するのにテストとドキュメントが要ると思う.
2009-11-10
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://atnd.org/events/1927
- 2009/11/11 19:00-21:00 ヤブ原ビル9F(東京都中央区八丁堀2丁目14−4)
個人的に日程がバッティングしてるので,宿題だけやろうかなと思っているところ.
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.
そんなことより,本が実家っぽい.どうするかな.




