Hatena::Grouperlang

檜山正幸のErlang未確認情報 RSSフィード

2009-06-11 (木)

関数節と関数名

| 08:41

fun式の場合

8> (fun (0) -> 1; (1) -> 2; (2) -> 3 end)(1) .
2
9>

と書ける。けっこうスッキリしている。

(0) -> 1; 
(1) -> 2; 
(2) -> 3.

という書き方が、普通の関数定義でも使えるといいな。

succ(0) -> 1; 
    (1) -> 2; 
    (2) -> 3.

とか、

succ
 (0) -> 1; 
 (1) -> 2; 
 (2) -> 3
.

いいね、いいね。でもモチロン使えない(泣)。

[追記]余計なことが書いてないのがいいし、表みたいな感じの関数節をイッパイ書いた後で関数名をリネームするとき便利だと思う。ムキになって無理クリ:

succ(N) -> (fun 
 (0) -> 1; 
 (1) -> 2; 
 (2) -> 3
end)(N).

エラーしたときの関数名が '-succ/1-fun-0-' みたいになってしまうのが難点。[/追記]

[追記の追記] funで囲うより、内側にcaseを入れたほうがスッキリでしょ、って?

succ(N) -> 
case N of
 0 -> 1; 
 1 -> 2; 
 2 -> 3
end.

確かにそうだ。

でもね、関数節で関数名を省略できるのと、caseを入れるのとは違うのだ、微妙に、気分的に。[/追記の追記]

VoluntasVoluntas2010/01/13 11:58fun() でのパターンマッチはエラーが起こったとき優しくないので使うのは最低限にしておいたほうがよさげです。

m-hiyamam-hiyama2010/01/13 12:17Voluntasさん、
funは好きで、すぐ使っちゃうんだけど、http://erlang.g.hatena.ne.jp/m-hiyama/20100113/1263344750 で書いた観点からも、名前付き関数を定義したほうがいいようです。短いならfunのほうがコンパクトで読みやすいですけど。

FreidaFreida2013/08/10 18:12I can't believe you're not playing with meht--at was so helpful.

PamPam2013/08/12 08:02That's an expert answer to an inireesttng question http://uupzlrq.com [url=http://ykmkxb.com]ykmkxb[/url] [link=http://ktbaqg.com]ktbaqg[/link]

HyunwooHyunwoo2013/08/14 19:11I could watch <a href="http://suamipfmjx.com">Scrihdlen's</a> List and still be happy after reading this.

2008-12-18 (木)

ガードに書ける条件

| 14:39

ユーザーの責任で、ガードに書ける条件を追加できないかなー。危なっかしいのは分かるんだけど、自己責任ってことで許可してくれないかしら。ガード記法のほうがスッキリ書けるから case 使いたくないのよね。

RasadRasad2012/02/09 19:39So much info in so few words. Tosotly could learn a lot.

fttosrpfqrfttosrpfqr2012/02/09 22:04xtmx4I <a href="http://dcwmuvowvxrk.com/">dcwmuvowvxrk</a>

qbwziqzqbwziqz2012/02/11 03:45EuHBqE , [url=http://vmxmmwylocyl.com/]vmxmmwylocyl[/url], [link=http://ewgoxruwespg.com/]ewgoxruwespg[/link], http://oyqkypsxrner.com/

zygmbyzygmby2012/02/12 23:23Gr6C5f <a href="http://foeilrknewxy.com/">foeilrknewxy</a>

iigwhkksnsiigwhkksns2012/02/14 01:05eCy3ac , [url=http://boynrsvpwqyg.com/]boynrsvpwqyg[/url], [link=http://dbgndaxgwozh.com/]dbgndaxgwozh[/link], http://pqhcxmcmdrlj.com/

2008-12-10 (水)

パッケージ

| 11:50

ほんとに使ってるのを見かけない。みんな、アンダスコアでつないだ長い名前使っているしぃ。でも、実は例外の場合と同じように、パッケージ使わないって悪しき伝統だったりするかも。

基本資料はこれだろ:

基本

パッケージ機構とファイルシステムは、概念的にも物理的にもすごく似てる。実際に、JavaでもErlangでもパッケージシステムをファイルシステムにマップしている。

パッケージシステム ファイルシステム
モジュール ファイル
パッケージ ディレクトリ
モジュール ファイル名(Unixならbasename)
パッケージ名 ディレクトリ名(dirnaeme)
モジュールのフルネーム ファイルのフルパス

ファイルシステムで混乱しがちなことは、パッケージシステムでもやっぱり混乱しがち。foo/bar と書くと、このパスがファイルなのかディレクトリなのか分からない。僕はよく、foo/bar/ と書いてディレクトリであることを強調する。foo.bar も同様に、パッケージかモジュールかわからない。foo.bar. ならパッケージ、foo.bar: ならモジュールとかで区別できるが、使われている例はたぶんない。最後のピリオドは別な記号を使って、foo.bar#mod とかだと良いが、そうじゃないから言ってもしゃーない。

パッケージシステムには、カレントディレクトリに対応する概念はない。が、特定のモジュールに対して、当該モジュールが所属するパッケージは必ず一意的に存在する。モジュール名だけのモジュール(伝統的モジュール)は、ルートパッケージに所属する。

ルートパッケージは特殊で、これだけは空な名前。伝統的モジュールmodのフルネームは ''.foo となる。ルート以外では空な名前は許されない。ファイルシステムでは、foo//bar は foo/bar と同じだが、foo..bar はダメ。

モジュールのフルネームは、.foo.bar.mod のようにピリオドではじめてもいいが、これは、ルート直下のモジュール以外ではあまり使わない。foo.bar.mod でよい。つまり:

ピリオドが含まれないモジュール名は、現モジュールの所属パッケージ内にあるとみなされる。ここは僕が誤解していたところだ。

インポート

モジュールfoo.bar.mod内で、io:writeと書くと、foo.bar.io:fwriteの意味になる。ひとつの回避手段は、''.io:fwrite, .io:fwrite と書くこと。または、-import(io). 。

このとき、-importに入れるパッケージ名は、ピリオドがなくてもフルネームと解釈されるみたいで、io = .io 。ややこしい。雰囲気としては、モジュールmodのパッケージをあたかもカレントディレクトリのごとくに考えれば、-import(io). は、

  • cp /io.erl .

ということだろう。もし、. が/foo/bar/ なら、/io.erl が /foo/bar/io.erl としても見えているから、./io.erl あるいは io.erl でもいい、と。

関数インポートは、モジュール内の関数名前空間(記号テーブル)に個々の関数を登録することだから、モジュールインポートとは異なる概念だ。

jj1bdxjj1bdx2008/12/10 13:23Erlangのpackageは,それでも,使わない方が無難だろうと思いますね.OTP自身の配置が階層化されるぐらい整理されれば話は別ですが.
http://www.erlang.org/pipermail/erlang-questions/2008-September/037931.html

m-hiyamam-hiyama2008/12/10 15:26jj1bdxsさん、
> 使わない方が無難だろうと思いますね.
実際には当面使わないと思います。src/ の下に階層ができると、IDEなしでは辛いので。
IEDがあってもIDEはキライだからどうせ使わないし、、、

NancyNancy2012/10/08 08:48I told my grandomther how you helped. She said, "bake them a cake!"

svnllbxrsvnllbxr2012/10/09 14:20pkeNkm , [url=http://ehhrwvfcjjhr.com/]ehhrwvfcjjhr[/url], [link=http://wuqlduykxaaa.com/]wuqlduykxaaa[/link], http://odqkhwrxidrp.com/

shzxzzygsshzxzzygs2012/10/10 22:18cdj1yW <a href="http://ueaiozuzjnxe.com/">ueaiozuzjnxe</a>

upyiopvynupyiopvyn2012/10/11 11:52vCq946 , [url=http://jrbbzesnpppd.com/]jrbbzesnpppd[/url], [link=http://ljnyrdfhubae.com/]ljnyrdfhubae[/link], http://kwxqfoacedrz.com/