【関数】Erlang【エリ ..
[2ch|▼Menu]
435:EWの人
08/06/07 21:40:50
>>434
たしかに、ErlangとPrologは歴史的に繋がりがあると思いますが、
互換性が取れているという話は聞いたことがありません。
Prologユーザの絶対数が少ないので、言語としては似通っていても
Erlangではprologのインターフェースを持っていないのかもしれません。
pythonでいうexecみたいなコマンドがあったら便利ですね。
そうすればこんな悩みなんか一瞬で解決してしまうのにwwww


webページに関してなのですが、
現在までのコンテンツに
「バイナリ、ビットシンタックス」
「マクロ」
を追加して、一回整理をしようと思うのですが、
今までの範囲で他に必要なものはありますでしょうか。
作成しますので、良かったらお伝え下さい。

436:デフォルトの名無しさん
08/06/08 00:48:14
>>435
特にはありません、僕にとって全てが未知なのも原因ですが。
声援を送ることしかできませんが、がんばってくだされ(日本語でかかれたWebのErlang系の情報で一番充実してますです)


437:デフォルトの名無しさん
08/06/08 05:00:42
>>434
例えば、append/3 ということになるが、
実務での使われ方としては、
?- append(X,[_,d|_],[a,b,c,d,e,f]).
X = [a,b],
_ = c,
_ = [e,f].
yes
の方が多い。つまり、Prolog述語の引数のモード宣言がないと、
難しいということがあるのではないか。

438:433
08/06/08 06:16:36
Prologでなくても、RubyでもPythonでも何でも呼び出し側は
いいんです。parserを書く必要があるかないかくらいの差。
それよりも、こんな話題を続けていて気づくのは、
Erlangは実務的な部分で専ら伸びてきているせいか、
入門書に当然のようにソケットを使った通信などが
入っている。これは、関数型言語では珍しい。
そして、ありがたい。
例外の扱いの順序など、どうかなと思うところもあるけれど、
"Programming Erlang" のプロセス間通信に至る構成が
言語入門書の標準になることを期待。
ウィンドウを開いてにHello,World! を表示することではなくてね。


439:433
08/06/08 06:34:45
"Concurrent Programming in Erlang" にはソケットでてこなかったか。
この本を入門書と呼ぶことは躊躇されますが。

440:デフォルトの名無しさん
08/06/08 06:47:37
ビットの取り扱いが楽だったり、もともとネットワークとの親和性も考慮されている様子
(そういえば開発元が通信会社か)

他言語からErlangを呼ぶってのはなかなか良い感じ
解法としてプロセスの大量使用が自然な問題を、Erlangに投げてやるって使い方が
すぐさま思いつく

441:デフォルトの名無しさん
08/06/08 07:07:42
>>440
ソケット通信だとオーバーヘッドはあるけれど、
その使い方を一般に知らしめるのが、Erlang普及の
一番の近道だと思う。

442:EWの人
08/06/08 09:06:15
>>436
いやいや、私も初めてから2ヶ月ぐらいですからね。
実際に使い始めれば習得も早いのではないかと思います。


多言語とのソケット通信に関してなのですが、
自分で関数を定義するよりも、既存のインターフェースを使うほうが楽なようです。
「プログラミングErlang」に載っていなかったので、そのうち載せておきます。

443:EWの人
08/06/08 13:13:57
少し調べたのですが、erlangのBIFにmakeというものがあって、
erlangのソースコードのコンパイルにはgnu makeよりもそちらのほうが便利なようです。
URLリンク(www.erlang.org)

444:EWの人
08/06/09 14:59:00
webページの構成を変えました。
URLリンク(erlangworld.web.fc2.com)

明日以降に内容の調整をしていきます。

445:EWの人
08/06/11 14:42:00
Erlangの最新版5.6.2はエラーが起きた行を表示してくれるようになったみたいですね。

446:デフォルトの名無しさん
08/06/11 16:58:53
>>445
私は5.5.5だけれども、エラーメッセージの読解には泣かされてる。

447:デフォルトの名無しさん
08/06/11 17:00:57
皆さんはあーらんでどんなもの作ってます?

448:EWの人
08/06/11 19:48:20
>>446
まさに、「日本語でおk」ってやつですよねwww

>>447
一概には言えませんけど、やっぱりネットワーク関連のものですね。
簡単なサーバならサクサク書けます。

本来なら自分でプログラムを作成しなければいけないところを、
言語がカバーしてくれているのでいい感じだと思います。
分散システムとかを作るのに最適な言語なんじゃないかな。

449:デフォルトの名無しさん
08/06/12 09:28:12
で、C10Kは越えられるの?スケールするの?

450:デフォルトの名無しさん
08/06/12 10:45:30
>>449
「C10K」については知らないので、ボケたレスになるのを覚悟で書くと、
Erlangはプロセスを完全にErlang処理系が制御するので最大プロセス数は
Erlang起動時のパラーメータで可変となる。
私はほとんどスケルトンだが、100万プロセスを起動して実験している。
Ubuntuだから4GBメモリで。
実務で使っているマシンになるので試したことはないが、RHEL5だと無制限の
はずだから、もっといけるのではないか。

451:デフォルトの名無しさん
08/06/12 11:55:08
比較的実用レベルの話だと、
WebサーバのベンチマークでYAWSが8万セッション程度を同時に扱ったテストがあったようだ
比較対象のApacheは4000セッションで落ちた
URLリンク(www.sics.se)

452:EWの人
08/06/12 20:40:08
C10Kを意識したプログラム作成って個人レベルじゃあまり求められませんよね。
自分が作ったプログラムで「遅い」と感じるのは演算能力以外の部分が大きいです。
例えばネットワークとかファイル入出力とか。

Erlangは理論上においてC10K問題をクリアしやすい言語だと思いますが、
そのためには言語以外にアルゴリズムなども発展する必要があるかもしれませんね。

453:EWの人
08/06/13 10:01:22
yahooカテゴリに登録されるようです。

あと数日したら掲載されるみたいです。

454:デフォルトの名無しさん
08/06/13 10:14:42
>>453
昔は検索エンジンにサイトを登録してもらうのが
一種のステータスだったのになあ
ディレクトリ型検索って見ることもなくなったな


455:デフォルトの名無しさん
08/06/13 10:22:24
PageRankとかの分析手法の登場で、
人気サイトはすぐに発見できるようになっちゃったからね
まあ今でも良質なサイトが多いようだし、一定水準を確保できているという証明にはなるかも

456:EWの人
08/06/13 11:37:25
>>454
>>455
ページランクを上げるためには知名度がいりますからね。
起爆剤として働いてくれればと思って登録しました。

とりあえずページランク n/a(存在しない) から抜けることが目標です。
存在しなきゃ利用者も増えないですから。

457:デフォルトの名無しさん
08/06/14 02:57:39
>>449-452
Web2.0の先にあるC10K問題
URLリンク(www.atmarkit.co.jp)
TheC10kProblem
URLリンク(www.hyuki.com)
Grizzlyの概要 : C10K問題に対応するGlassFish(Grizzly)
URLリンク(blogs.sun.com)

Javaの場合はスレッドごとのスタックがメモリを食いつぶすから
ネットワークサーバエンジンGrizzlyは1スレッド複数クライアント方式で実装されました。
Erlangは100万スレッドでも動くから1スレッド1クライアント方式でスケールするのですね。
コードが分かりやすくなる1スレッド1クライアント方式を選べるのはありがたいです。

458:EWの人
08/06/16 20:49:15
ちょっと忙しいので更新遅れます。
とりあえず作成してあるものを明日アップしておきますが、
次の更新は来週あたりになりそうです。

459:デフォルトの名無しさん
08/06/16 22:12:41
「Concurrent Programming in Erlang」ってどんな本なの?
アマゾンのマープレでは法外な値段が付いてるけど・・・

460:EWの人
08/06/16 22:35:37
英語が読める人にとっては、プログラミング言語Erlangより簡単です。
よりマニュアルに近い感じです。

ただ、あの法外な値段を払ってまで読むべきものかと言うと、
それはちょっと疑問ですね。私も自腹なら買いませんwww

本家のマニュアルを片っ端から読めば、同じような内容だと思います。

461:EWの人
08/06/21 16:17:40
今更気づいたんですが、
BIFってのはErlang以外から構成されている関数のことだったんですね。
標準ライブラリのことをBIFと言うと思っていました。

462:EWの人
08/06/23 22:17:37
分散Erlangとファイアーウォールを共生させるのが難しいですね。
デーモンで使われるポートを開放していても、どこかが引っかかっているような感じです。

463:デフォルトの名無しさん
08/06/24 03:16:43
ライブラリが強力に思えたことがある。
でもつかってない。
Amazon EC2上で実験してみたいと思っているが。


464:デフォルトの名無しさん
08/06/25 11:18:33
数十〜数百台のノード間でグループ通信をしようと思っています。
やりたいことは、
- グループにノードが追加/削除されたらコールバック関数を呼ぶ
- グループメンバのノードへのブロードキャスト
- グループ内のノードのリアルタイムモニタリング (CPU ロードとか)
なんですが、OTP のどのライブラリを使ったらよい、とかがわかれば教えてください m(__)m


465:EWの人
08/06/25 21:43:15
>>464
たぶん、求めている機能自体はOTPではなく他のものを使って作ると思います。
OTPはそれらの機能を繋ぎ合わせる土台みたいなものですかね。

他のマシンの状態とかを逐次的に調べたいのであれば、
OTPのイベント管理機能を通して管理するのがスマートなような気がしますが、
イベント自体は自分で設計する必要があります。

ブロードキャストに関しては、通常のTCP/IPでいうところのマルチキャストみたいなもんですから、
全てのノードに連続で送信でいいんじゃないですかね。

とりあえず、ライブラリの
rpc group なんかが参考になるかも。

466:デフォルトの名無しさん
08/06/26 04:54:46
Tokens の構成要素で
[{atom,1,abc},...} の中の"1"は何を意味するのですか。

467:デフォルトの名無しさん
08/06/26 04:57:31
まちがえた。よく見えない。 [{atom,1,abc},...] です。
おちゅーしゃの入力ウィンドウとフォントをもっと大きくする方法はないのだろうか。

468:デフォルトの名無しさん
08/06/26 12:11:58
>>466
改行情報。
"2"の場合、この要素の前に1行改行が入る。


469:464
08/06/26 16:54:56
>>465
ありがとうございます。

ひとまず、数十台のクラスタでそれぞれにスーパーバイザを立てて、全対全で
監視しあう(もし落ちてたら再起動)、ということを考えています。

この場合、supervisor のコールバック init/1 の中身をどうすべきかで悩ん
でいます。

ふつうは↓こんな感じになると思うんですけども、すでに起動してるやつ同士
にリンクを結ぶような start_link/0 関数を定義する必要があるでしょうか??
それとももっと簡単なやりかたがある?

{ok, {{one_for_one, 3, 10},
[foo_server,
{foo_server, start_link, []},
permanent,
10000,
supervisor,
[foo_server]}
]}}.


470:EWの人
08/06/26 21:08:21
supervisorは階層型の管理方法だと思うので、
平等なノード同士を監視し合うというのは特殊な使い方なような気がします。

個人的な意見なのですが、スクラッチをOTP無しで作ってみて、
それを参考に「欲しい機能を持たせた仕組み」を一から作るのがいいかもしれないですね。

471:EWの人
08/06/27 18:16:23
そういえば、ブロードキャストに関してなのですが、
プロセスに対してだったら連続送信するしかない(もしかしたら間違ってるかも)と思うのですが、
分散Erlangに参加しているノードに登録されているローカルの登録済みプロセスに対してなら
マルチキャストする手法があったような気がします。

各々のノードが均一であるならば、同名のローカルの登録済みプロセスを一つ作成して、
それにたいしてマルチキャストすればいいかもしれません。
やったことないですけど。

472:デフォルトの名無しさん
08/07/02 06:09:27
Ubuntu7.10 でOTPを./configure するとエラーになるのだけれど、
何か注意事項があるかな。

473:デフォルトの名無しさん
08/07/02 20:13:47
エラーをよく読む

474:EWの人
08/07/02 23:26:26
たぶんオプションの指定か、
何かが足りない(コンパイラとか?)かのどちらかだと思います。

Java(BIFにJinterfaceがある)もいるかもしれませんね。
コンパイルしてる最中にチェックされてたような気がします。

475:デフォルトの名無しさん
08/07/09 08:57:01
今日の日本経済新聞の一面に、松下が世界25万台のPCを
集中管理するという短い記事があったけど、こういう制御は、
Erlang向きなんだろうか。

476:デフォルトの名無しさん
08/07/10 01:01:57
>>475
何を管理するかによると思う。
記事から推測すると、管理ポリシー(実行権限、使用可アプリ制限、
パッチ等の適用タイミング同期など)が対象のようだから、Erlangで
なくても可能。
むしろ既存システムとの整合性が重要と思われる。

477:デフォルトの名無しさん
08/07/10 03:01:01
>>476
25万台、ポーリングシステムなどと途方もないことを
考えてしまったw

478:EWの人
08/07/10 23:42:57
Erlangの純粋な分散はクラスタ向きかもしれませんね。
例えば、「みんなのマシンを合わせて分散させよーぜ」なんてのは
セキュリティの問題上きついかもしれません。

ノードごとに権限を設ける機能ってあるんですかね?

479:デフォルトの名無しさん
08/07/11 11:38:55
OTPにはErlangアプリケーションサーバのようなものは入っているのですか?

480:EWの人
08/07/22 18:08:25
>>479
JavaのTomcatみたいなもののことですね。
良くわかりませんが、あるとしたらYawsあたりの資料に載っているような気がします。

明日あたりに少しwebページを更新します。
9月あたりまで少し更新頻度が遅れそうです。

481:デフォルトの名無しさん
08/08/01 13:06:37
私は日常的には関数型言語とは無縁なのですが、Erlangの
receive ... end や case ... of ... end が嫌で嫌でたまりません。
fun() -> ...end も勿論いやです。
こういうのは関数型言語を使われている方は平気なのですか?


482:デフォルトの名無しさん
08/08/01 14:36:52
共通する「こういうの」が解らないんだが、その3つに関しては全く気にならない。
#endが嫌なのか、予約語が嫌なのか…ifもwhenも入ってないし…

むしろ、個人的にはifでelseが使えない方が嫌だ。
if Foo ->
 bar;
else ->
 baz
end
ってやりたい。
それが嫌でcaseばかり使ってるよ。

483:デフォルトの名無しさん
08/08/01 14:56:22
>>482
何が気に入らないか書かなくて申し訳なかった。
たとえば、
X = receive(), foo(X),
で何ら問題ないではないかということですが。
case文もif文もないとだめですか。

484:デフォルトの名無しさん
08/08/01 23:50:27
>>483
Prologの人乙

485:デフォルトの名無しさん
08/08/02 00:53:44
>>484
そうです。

486:デフォルトの名無しさん
08/08/02 01:59:44
自分が慣れ親しんだPrologと違うからいやだってことですね。

487:デフォルトの名無しさん
08/08/02 04:10:16
>>486
そうですねw
Prologでも
...,(q1(..),q2(..);q3(..),q4(..),q5(..);q6(..)), ...
のような構文がありうるわけですが、
実はプログラムエラーの90%以上が
ここで発生します。
それで何ていうのか適切な表現では
ないかもしれないが、
インラインに展開したような表記法は
嫌いなのですね。

488:デフォルトの名無しさん
08/08/02 15:45:39
Prologみたいに一々変数の名前考える方がイヤすぐる

489:デフォルトの名無しさん
08/08/02 15:48:00
>>488
論理変数が命だから。

490:デフォルトの名無しさん
08/08/02 20:44:36
Prologのプログラミングは
1) 単位節(データベース)定義。
2) ルールの記述。
以外にないわけで、1)をともかく積み上げなくてはなりません。
2)のルール記述では唯々現時点で、論理変数が同じものであるか、
あるいは同じものとは云えないかに焦点を当てて記述していく。
>>487 の面倒だというのは、違うことを示すために別のラベルを
考えるのが面倒だということですね。たしかにそうなのだけれども、
論理変数の記述によって現れるストリームこそPrologの形像であり、
論理変数の命名、則ちPrologプログラミングではないかと思います。

491:デフォルトの名無しさん
08/08/02 20:48:40
>>490
スレ違い

492:490
08/08/02 20:50:28
すみません。 >>487 ではなくて(これは私の書き込み)、
>>488 でした。

493:490
08/08/02 20:51:23
>>491
ErlangとPrologの歴史から
すれ違いだとは思いません。

494:デフォルトの名無しさん
08/08/02 21:18:01
fib(N) -> fib(N-1) + fib(N-2).
って書けないのは面倒すぐる。
N-1やN-2やfib(N-1)の結果やfib(N-2)の結果やfib(N-1)+fib(N-2)の結果は
>唯々現時点で、論理変数が同じものであるか、
>あるいは同じものとは云えないかに焦点を当てて記述していく。
必要ないよね。
Erlangの中の人もPrologは面倒すぎたんじゃないの?

495:デフォルトの名無しさん
08/08/03 02:03:18
Erlang はとっくの昔に論理型言語じゃなくなってるから
今さら Prolog と比べられてもな

496:デフォルトの名無しさん
08/08/03 03:02:33
>>495
どなたかがPrologの変数に言及されたので、
Prologでの論理変数の位置づけを確認した。
私がいいたいのはErlangが
foo(receive()) で捌けるようにならなかったものかということ。

497:デフォルトの名無しさん
08/08/05 01:01:06
>>496
論理型プログラミングがしたいなら、とっとと別の言語を探した方が
幸せになれると思うよ。

498:デフォルトの名無しさん
08/08/05 10:17:23
>>497
やっぱり、Ozか


499:デフォルトの名無しさん
08/08/05 12:14:16
>>498
習得時間がかかりすぎ。Erlangの何倍かな。

500:デフォルトの名無しさん
08/08/06 00:51:10
Oz が Erlang に比べて極端に難しい言語だとは思えんが。
論理型でも書けるってだけで、それを強制されるわけでもないし。

ところで Oz のスレって無いのかね。

501:デフォルトの名無しさん
08/08/06 00:57:35
コンピュータプログラミングの概念・技法・モデル
スレリンク(tech板)

502:デフォルトの名無しさん
08/08/11 07:38:27
>>500
ひとつのパラダイム部分だけ使うのなら変わらないけれど
それで習得したとはいえないだろう。
どのくらい学習時間が必要かはともかくとして、
Erlangで不自由な部分があるからOzも同時に使いたいと
思ってる人いるかな。

503:デフォルトの名無しさん
08/08/21 03:19:55
なんでこれでエリクソンって読めるの?

504:デフォルトの名無しさん
08/08/21 04:47:04
>>503
作った会社の名前だっつの

505:デフォルトの名無しさん
08/08/21 07:11:23
>>503
"Erlang" でエリクソンと読む訳ではないよ。アーランと読むのが普通みたい。

506:デフォルトの名無しさん
08/08/22 03:49:09
>503
エリクソンの綴りは"Ericsson"
Erlang (アーラン)は最初、エリクソン社が社内で使うために
開発された言語らしい。

よって"Erlang"は"ERicsson LANGuage"の略だと言う説あり。
by Wikipedia

507:デフォルトの名無しさん
08/09/13 11:09:45
秋の夜長は、がっつり、あーらん

508:デフォルトの名無しさん
08/09/14 15:07:49
Erlangってコンパイラ屋にたいして愛されてないよね
URLリンク(shootout.alioth.debian.org)
URLリンク(shootout.alioth.debian.org)

ホントに数百コア時代がきた時には使われないんだろうね。
要素技術だけ他の新言語に吸い上げて貰えば上等みたいな。

509:デフォルトの名無しさん
08/09/14 17:17:17
>>508
機械語が関数型になるのはどのくらい先だろう。


510:デフォルトの名無しさん
08/09/14 17:30:04
次世代はLarrabeeなんでまだ10年はx86かな

511:デフォルトの名無しさん
08/09/14 17:48:11
15年とか20年とか先になるとして、>>508 的な状況と
時期的にどのくらいのズレが生じるのだろう。
本格的なマルチコア時代と関数型への移行が
同期するなら極めてハッピーと言えるのだが。

512:デフォルトの名無しさん
08/09/14 17:55:53
>>511
マルチコアではHaskellが有望株らしいよ
URLリンク(www.watch.impress.co.jp)

513:デフォルトの名無しさん
08/09/14 18:10:46
Hakellが機械語ですか、ゾッとしますね。

514:デフォルトの名無しさん
08/09/14 18:27:47
関数に副作用が無いことを利用して並列化をかけるってのは確かに有望だとは思うが
オブジェクト脳的な考え方だと、アクターベースのほうがより親しみやすい感じがする
特にゲームは実世界のシミュレーション
オブジェクト的な発想が強そうだが、そうでもないのかね?

515:デフォルトの名無しさん
08/09/14 18:44:26
ゲームに使うアクションの合成をうまいこと作れる演算子のセットが
できれば、Haskell的な言語への移行は意外と早いんじゃないかな。

ツクール系とかのスクリプト言語として「HaskellらしからぬHaskell」が
現れてくると思う。

むしろ、ゲーム開発のメインストリームになるためには、ガベージコレクションに
ブレイクスルーが必要だと思うね。確実にメモリ消費量の上限を決められたりとか、
そのあたり。

純粋関数型言語じゃないけど、PC向けのSchemeであるYpsilonの開発動機に、
既存の処理系ではGCに不満がある、とあった。

516:デフォルトの名無しさん
08/09/15 15:50:20
>>515
20年後になっても、人類はゲームをやってるのか。

517:デフォルトの名無しさん
08/09/15 15:56:04
20年前に人類にゲームはなかったのか?

518:デフォルトの名無しさん
08/09/15 15:57:12
>>516
やって無いと思うほうがおかしくね?



519:デフォルトの名無しさん
08/09/15 20:38:34
2千年後でも2万年後でも200万年後でも人類はゲームをやっているだろうね。
絶滅するか、あるいはとても人類とは呼べないものに変貌していない限り。

ゲームをする(遊ぶ)と言うのは人間というものを特徴づける
重要な性質のひとつだ。

現在のような人手でプログラミングする必要のあるコンピュータが
存在しなくなる可能性の方がまだ有り得るな。

520:デフォルトの名無しさん
08/09/15 20:44:49
人間自体コンピュータだと主張する俺が通りますよ

521:デフォルトの名無しさん
08/09/15 21:31:21
脳の並列処理はすごいと思う。
画像認識処理とかもう人間並みに速くなってるのかな

522:デフォルトの名無しさん
08/09/15 21:40:46
無理でしょ。
人間の画像処理は目玉やら筋肉やら脊髄やら、いろんな複合的なシステムになっている。
ハードウェアまで含めて画像処理に使ってる人間と、
ソフトウェアだけのコンピュータによる画像処理では最初から勝負になってない。
たとえば、太陽黒点を観測するシステムを構築する時。
結論から言うと、カメラで写らない黒点を人間の目玉は見つけることができる。
なぜなら人間は全体を一様な明るさでとらえているのではなくて、
眼球を動かしつつ虹彩で明るさ調整しつつ経過時間を意識して見ているから。
人工的にできないわけじゃないけど、まだ誰もできていない。

523:デフォルトの名無しさん
08/09/15 21:44:17
実際に観測装置を動かしてみると、とても大きな黒点が見えるのに、
適切に設定したはずのカメラにはまったく映っていなかったということが実際にある。

524:デフォルトの名無しさん
08/09/18 19:39:05
パートクリエイター板で技術さんを募集。
みんなでわいわいやりましょう。
URLリンク(ex14.vip2ch.com)
URLリンク(www36.atwiki.jp)

現在6名の技術さんがいます。
他にもサーバー部分、土台を作る人が不足しています。
CSS、Perl、アーラン、その他言語ができる人を募集中!
勉強中な人でもかまいません。

イメージや企画内容についてはスレッドとwikiをご覧下さい。
わからない所があればIRCやメールで気軽に聞いてください!

525:デフォルトの名無しさん
08/09/18 21:29:28
>>524
おk
いまからerlang勉強して手伝ってやる

526:デフォルトの名無しさん
08/09/20 14:37:16
むしろ技術者が6人もいるのに、ろくに進捗がないことの方が驚きだわ

527:デフォルトの名無しさん
08/09/20 14:39:43
>>526
それではあなたが加入して、革命的躍進を遂げて下さい。

528:デフォルトの名無しさん
08/09/20 19:27:11
>>526
察しなさいよ。
6人中一人しか使えない言語を選択してるんだぞ?
リーダーは大学2年生くらいで、来年には就職活動が忙しくなって投げ出すよ。

529:デフォルトの名無しさん
08/09/22 13:16:54
質問です

floatからintegerに変換するにはどうすればいいですか?

530:デフォルトの名無しさん
08/09/22 13:38:00
trunc(Number).

531:デフォルトの名無しさん
08/09/22 14:19:38
>>530
ありがとうございます。
さらに質問ですが、Erlangで無限リストはどのように書けば良いのでしょうか?

532:531
08/09/22 14:28:47
説明が不十分ですね。
私がしたいことは、
たとえば、2,3,5,7,11,13,・・・(無限)と続く素数のリストから100個の要素を取得したい場合、
どのように書くのがスマートでしょうか?

533:デフォルトの名無しさん
08/09/23 15:49:03
皆さんエディタは何を使っています?
俺はemacsを使っているんですが、関数を畳んだりできる機能が無いので若干不便に感じています。

534:デフォルトの名無しさん
08/09/23 16:45:02
>>533
> 関数を畳んだりできる機能が無いので

あるよ。 erlang のモードで使えるかどうかは知らんが、それでもちょっとコードを書き足せば出来るはず。

535:EWの人
08/09/28 03:02:06
おかげさまで大学院にも合格しました。
卒論の折を見ながら、サイトの更新を再開しようかと思います。

>533
無限リストってものが良く分からないのですが、
一番純粋なリストっぽくやろうとしたら、リスト内包表記じゃないかと思います。
条件判定のところに素数の条件と、どこまで求めるかを記せば動くような気はしますね。
ただ、直感的にあまりいいプログラミングのやり方じゃないように感じます。
毎回2から割り切れるか調べるという馬鹿プログラムなら別にいいんですが、
そうじゃないのなら複雑すぎるので避けるべきではないかと。

特に拘りが無いのであれば、他の言語みたいに関数で定義すりゃ手っ取り早いような気はします。
引数に「現在の値」と「素数リスト」を取った再帰関数を定義して、
「素数リスト」に含まれる要素が「現在の値」を割り切れないときは素数リストにその値を追加。
「現在の値」をインクリメント
というのをグルグル回すのが一番シンプルな気がします。
本格的に作るのなら、並列処理で判定させるのも面白いかもしれませんね。

536:デフォルトの名無しさん
08/10/03 07:50:35
>>494
関数型に較べて、論理型が冗長な部分があることは確かだが、
多くの場合仕様を変更して機能的に拡張するとなると、
例えば履歴の確保を追加する場合などだが、関係する述語群に
引数(論理変数)を1-2個増やすだけで解決できる論理型の
方が圧倒的に有利になる。

537:536
08/10/03 09:05:03
例えばPrologで引数を増やすということは、
関数で型宣言をすることに近いのだから、
圧倒的に有利どころかほとんど差はないか。>>536 は撤回。

538:デフォルトの名無しさん
08/10/03 21:34:53
プロセス辞書って副作用だよね?


539:デフォルトの名無しさん
08/10/04 00:11:29
ごめん、参照透明とかあんま厳密な言語じゃないみたいね

540:デフォルトの名無しさん
08/10/04 11:35:09
>>539
ちょいさわった感じでは、ある意味「普通」の言語。
単一代入なのは、プロセス間でmutableなデータを共有しないための手段のような気がする。(なので、個々のプロセスで閉じるプロセス辞書については気にしない)
そういうデータを扱う方法については言語内でカタを付けるんじゃなくて、ETSやMnesiaという形で外出しにしてるし。

541:デフォルトの名無しさん
08/10/16 07:40:04
関数型プログラミング言語、興味を持ってちと勉強してみようと思い立ったものの、
Erlang, Haskell, OCaml, etc. どれに手をつけてみるのが一番良いの?

まあこのスレで聞くのもナンだけど。

542:デフォルトの名無しさん
08/10/16 14:50:57
どうせ全部手をつけることになるんだからどれでもいい


543:デフォルトの名無しさん
08/10/16 18:08:24
なるほど!
目からウロコとはこのことです。迷っていた自分が馬鹿らしくなりました。

544:デフォルトの名無しさん
08/10/16 19:04:48
>>541
どれつかっても身近な文字列扱うときに泣いたのでF#でお茶を濁した俺


545:デフォルトの名無しさん
08/10/16 20:55:51
全部手をつけることにはなるだろうけど、どれも均等に使う可能性は低いかな。。
みなさんGUIは何でやってる?やっぱerlgtkですか?

546:デフォルトの名無しさん
08/10/19 10:51:15
Scala で Swing

547:EW
08/10/24 13:30:12
Erlangでオブジェクト指向っぽくプログラミングする手法って
需要ありますかね?
継承やポリモーフィズムあたりを実現させるのはかなり難しいんですが、
インスタンスとメソッドを用いるプログラミング手法には似せることが出来ます。

知りたい人がいるのであれば、webページを作ろうかと思います。
URLリンク(erlangworld.web.fc2.com)

548:デフォルトの名無しさん
08/10/24 14:48:37
Parameterized modules のこと?

549:EW
08/10/25 01:07:25
>>548
そんな高度なもんじゃないですよ。

Cの構造体でオブジェクト指向っぽくプログラムを組むのと似たような感じですかね。
オブジェクトを一つのプロセスにして状態をグルグル回すだけです。
gen_serverの簡単なバージョンをイメージして頂ければ分かりやすいと思います。
プログラミングの癖が私に似ている人なら、たぶん自然と使っているような気はします。

550:デフォルトの名無しさん
08/10/25 02:07:07
継承と多態の無いオブジェクト指向って、それオブジェクト指向じゃなくね?

というのは置いといても、receiveを囲ってるループの引数にフィールド当てはめてメッセージにメソッド当てはめるってこと?

551:デフォルトの名無しさん
08/10/25 04:46:22
オブジェクトにメッセージを送れるならOOPLと呼んでいいと思う

552:デフォルトの名無しさん
08/10/25 10:52:45
>>551
絶対に違うと思う

553:EW
08/10/25 12:18:02
>>550
だから、それっぽくということですwww
プログラミングをしている感覚としては、やっぱりオブジェクト指向よりも
手続き型に似ているような気がしてなりません。

そうですね。基本はreceiveをぐるぐる回す構造です。
メッセージによるイベントドリブン形式とでも言えるかと思います。
ErlangのAPIがCの構造体を利用したものに似ているんですが、
Pidをインスタンスに、メッセージをメソッドに、みたてて似たようなことをやるほうが、
並列処理では使い易いような印象がありますね。
まぁ、弊害として
・資源開放としてのプロセスの終了が必要になる
・死んでいるプロセスに送信したら無視される
というものもあるんですけど。

554:デフォルトの名無しさん
08/10/25 16:41:13
>>552
「絶対に」という根拠は気になるな

555:デフォルトの名無しさん
08/10/26 14:52:39
表紙のconcurrentに惹かれて「プログラミング Erlang」を読み進めているのだが、
今ひとつ並列性への本質的な強みが感じられなくて、期待はずれ感。
20章の初めには「たくさんのプロセスを使う」とか書いてあるし・・・

どうしたら満たされる、並列への期待

556:デフォルトの名無しさん
08/10/26 17:18:49
>>555
第五世代コンピュータ

557:デフォルトの名無しさん
08/10/26 17:23:53
織田信長?

558:デフォルトの名無しさん
08/10/26 18:01:36
> 20章の初めには「たくさんのプロセスを使う」とか書いてあるし・・・

プロセスを誤解してないか?

559:デフォルトの名無しさん
08/10/26 20:21:12
誤解とは?OSレベルのプロセスじゃないよってことかい?

560:デフォルトの名無しさん
08/10/26 21:02:42
>>559
うん。
それわかってて期待はずれならプロセス計算(代数)にも期待はずれなのかと。

561:デフォルトの名無しさん
08/10/27 04:38:07
>>560
ErlangでGHC(KL1)の処理系を書けばいいんじゃないの。

562:デフォルトの名無しさん
08/10/27 05:46:13
>>561
GHC(KL1)は各ゴールがプロセスでErlangよりたくさんプロセスを使うから
>555にはやっぱり期待はずれだろうね

563:デフォルトの名無しさん
08/10/27 06:14:43
>>562
GHCが問題なのではなくて、Erlangのプロセス管理を
生かす事例という意味だが。

564:デフォルトの名無しさん
08/10/27 08:16:18
programming erlangは並列経産の本じゃなくてerlangのチュートリアルだから
仕方ない。erlangを使って、openmpとかMPIとかMapReduceとかやればいいじゃない

565:デフォルトの名無しさん
08/10/27 16:13:54
>555は並列に何を期待しているのか?

566:デフォルトの名無しさん
08/10/27 16:52:15
>>565
次元の壁を越えた美少女達とのお付き合い

567:デフォルトの名無しさん
08/11/05 02:45:28
これの実用的なライブラリってある?rubyでいうrailsくらいの

568:デフォルトの名無しさん
08/11/05 21:31:34
誰か!誰かエスパー呼んできて!

569:デフォルトの名無しさん
08/11/06 20:05:56
ないだろ。別にエスパーよばんでも

570:デフォルトの名無しさん
08/11/07 08:17:56
あればもっと流行ると思うんだけどね
てか言語の流行る流行らないは実用的ライブラリが揃ってるかどうかが大きい

571:デフォルトの名無しさん
08/11/07 20:46:24
関数型で流行ってるのなんてないだろう。

572:デフォルトの名無しさん
08/11/08 00:05:48
こういう時やたらHaskellを推してくる人がいるけど、そいつが実際どれだけHaskellでコード書いてるのか知りたい。

573:デフォルトの名無しさん
08/11/08 00:15:30
>>572
>こういう時やたらHaskellを推してくる人がいる

どの人の事?

574:デフォルトの名無しさん
08/11/08 00:18:25
ただの妄想だろう

575:デフォルトの名無しさん
08/11/08 01:02:36
「やたら〜する人がいる」 「みんな言ってる」 は大抵1人とか二人とかだよな

576:デフォルトの名無しさん
08/11/08 01:19:55
だから数字にすることに意味があるんだね。

577:デフォルトの名無しさん
08/11/08 01:21:21
以前初心者オススメスレにHaskellを推しまくってるヤツがいたよなwww
あまりに変だったからさらに不自然なHaskell狂信者風なのが出てきてネタにしてたwww

578:a36 ◆K0BqlCB3.k
08/11/08 01:29:47
>>572
まぁ、人にはいえないあんなことやこんなことに使ってます。
Haskellでスタンドアロンアプリを書くことは滅多にないのですが、
とあるHaskell用のライブラリを作って公開しています。(本家にリンクがある)
論文を書くときにHaskellを題材に使ったりすることもあります。

579:デフォルトの名無しさん
08/11/08 08:28:49
企業でHaskell,Erlang,Lisp,Prologなどを使う場合は
使ってることも何に使っているかも秘密にしておくよ。

580:デフォルトの名無しさん
08/11/08 08:40:59
>>575
どういう風に統計とったの? 妄想?

581:デフォルトの名無しさん
08/11/08 09:03:24
>>572
>こういう時

どういう時?

582:デフォルトの名無しさん
08/11/08 22:02:30
>>580
そうみんな言ってた

583:デフォルトの名無しさん
08/11/08 22:10:23
ワロタww


584:デフォルトの名無しさん
08/11/09 04:28:11
この言語はよっぽどネタがないんだな
ということが分かるやり取り

585:デフォルトの名無しさん
08/11/09 05:38:37
>>559
どういうこと

586:デフォルトの名無しさん
08/11/09 14:23:44
仕様が成熟している、利用者がいない、のどちらかまたは両方

587:デフォルトの名無しさん
08/11/09 14:29:34
>>586
erlangが普及しない理由
1. 遅い
2. 関数型言語
3. ネイティブが吐けない
4. 実行方法が異質
5. (ほぼ)サーバー特化

588:デフォルトの名無しさん
08/11/09 17:43:37
遅い、ネイティブが吐けないとかはpythonとかでも同じじゃんか
なのにpythonは普及している。
関数型言語ってのが普及しない一番の理由じゃないかな、実用的に見て

589:デフォルトの名無しさん
08/11/09 18:50:38
>>588
pythonはライトウェイト言語であって、erlangとは領域がまったく違う。
プロセスは軽いが処理自体は低速。
サーバを停止しなくても修正ができるというのはメリットだが、
そういう機能が必要なければバイナリが吐けたほうが都合が良い。
それにC++でも軽いソフトウェアスレッドのライブラリは存在するから
もはやプロセスが軽いというのはさほどメリットでもない。
関数型言語としてはHaskellやOCamlのほうがすぐれている。

590:デフォルトの名無しさん
08/11/09 18:52:44
あくまでこれは俺がこの言語を選択しない理由として挙げているだけ。
erlangはどんな言語か知っているけど、あえてこの言語を選ぼうとは思わないんだよ。
サーバーを書くときは簡潔に書けるから便利ではあるけど。

591:デフォルトの名無しさん
08/11/09 18:55:00
スタンドアロンなツール類を書くならやっぱりC++だろうな。
WEBアプリを書くならRubyかPHPかPerlだし、俺自身はPythonという選択肢はない。
サーバーならerlangかhaskellが書きやすい。
それぞれ使いわけでいいじゃん。
サーバー書く人が少ないっていうのが一番大きい理由じゃないの?

592:デフォルトの名無しさん
08/11/10 20:30:25
すごいな。ErlangもC++と対等に語られるようになったか。

593:デフォルトの名無しさん
08/11/10 21:13:43
オブジェクティックでフォンクティックな言語があればいいのに

594:デフォルトの名無しさん
08/11/10 21:53:38
>>593
"object oriented" functional language でぐぐったら、なんかいっぱい出てくるぞ。
でも実用にできるのはOCaml, Scalaくらい?

595:デフォルトの名無しさん
08/11/10 22:18:51
CLOS(Lisp)、あとOzとか
オブジェクト指向ベースに関数型の機能を取り込むアプローチだと、
まあ高階関数ぐらいなら比較的新しい言語はどれも持ってる

596:デフォルトの名無しさん
08/11/10 23:16:53
高階関数それ自体がマルチコアを生かすようなバイナリに繋がると良いが、原理的にそんなことないわな。
しかし今だ考え方はプロセス・スレッド止まりだし。
もっとまったく新しい考え方って何かないのかね

597:デフォルトの名無しさん
08/11/11 00:48:27
Objective Erlang的なの作ればいいんでね?

598:デフォルトの名無しさん
08/11/11 00:54:49
Erlang使ってない俺が言うのも何だが、流れはEW氏に来たということか。

599:デフォルトの名無しさん
08/11/14 02:39:00
開発を手続き型言語以外でやってる会社とかないよな
関数型はオナニー

600:デフォルトの名無しさん
08/11/14 03:21:58
Diceあたりで検索かければ出てくるよ。少ないけど。

601:デフォルトの名無しさん
08/11/14 13:59:37
>>599
Schemeで書かれたピンボールとか出てこようかという
ご時世に、ずいぶん乗り遅れてますねあなた

602:デフォルトの名無しさん
08/11/14 23:24:30
>>599
今の教育課程でパンピーの知能じゃ無理でしょ。まだだいぶ先の話じゃないか、
関数型つか並列資源を存分に使いこなすプログラミングなんて。

603:デフォルトの名無しさん
08/11/15 08:46:24
>>601
やっとピンボールですか。
手続き型なら30年前にできてたので、ずいぶん乗り遅れてますね。

604:EW
08/11/15 10:41:08
>>597
Erlangが目指すところはオブジェクト指向と相反するような気がしますね。
カプセル化などは便利だと思いますが、インスタンスを使いまわすというのは
かなりイケてないことだと思います。
それがおkなら、変数への再代入なども許可しているでしょうし。
おそらく、可能な限り「状態依存を無くす」というのが、
Erlangの基本コンセプトなのではないかと思います。

>>598
僕が使っているのはあんまり上等な代物じゃないですよ。
個人レベルで手抜きをしているだけであって、本来なら綿密なデバッグが必要となる
危険なプログラムだと思います。

余談ですが、来年から planet lab のメンバーに加わることになりました。

605:デフォルトの名無しさん
08/11/15 11:29:08
>>603
その理屈では機械語以外は全て遅れている言語ですよ。
脳味噌大丈夫ですか?

606:a36 ◆K0BqlCB3.k
08/11/15 11:44:09
>>602
今の大学生は提出課題ですら他人のコピーだから、
FizzBuzz問題すら解けない子が多いよ。

607:デフォルトの名無しさん
08/11/15 12:36:47
>>605
きみこそ脳みそ大丈夫?
高級言語が機械語より遅れてるの当たり前じゃないか。

608:デフォルトの名無しさん
08/11/15 12:43:43
>>606
昔の大学生も、FizzBuzz問題すら解けない子おおかったと思うが。

609:デフォルトの名無しさん
08/11/15 14:32:15
>>607
しょうがないよ、君の理屈だとそうなるんだから(605の理屈ではない)。

610:EW
08/11/16 23:20:23
2つ以上のイベントドリブン形式のプロセスが相互に通信しあうというモデルでは
複雑なトランザクションを記述するよりも、
プロセスがメッセージを受け取ったら、
「新しいプロセスを作り処理させて、その結果を返す」
という手法のほうがプログラムを組みやすいみたいですね。

AがBに処理を依頼
BがAに対してある処理をさせる。
Bはその結果を受け取る。
そして処理を続行し、完了するとAに値を返す

という処理を書いたのですが、逐次プロセスのみだと処理が複雑になって
アウトでした。自分の意図しないところでデッドロックやバグがおきまくりました。
AとBの処理を新しいプロセスを立ててやらせると、かなり簡単に動きました。
なかなか便利な手法です。

611:デフォルトの名無しさん
08/11/17 01:00:47
AがBに依頼した処理をBがAに処理をさせる?

612:デフォルトの名無しさん
08/11/17 01:12:02
AとBでコルーチン的に処理をさせたいってことじゃね?

613:デフォルトの名無しさん
08/11/17 03:04:20
名古屋コーチンがどうしたって?

614:デフォルトの名無しさん
08/11/17 20:29:56
名古屋撃ちなら知ってる

615:EW
08/11/17 21:54:07
612の方が指摘している通り、コルーチン的に処理するってことです。
純粋な逐次プロセスでコルーチンを実装すると、その処理をやっている間は
第三者からのアクセスに反応できないため問題がありました。

並列で新しいプロセスを作ると、コルーチンを分解できるんで
シンプルになりましたということです。

616:デフォルトの名無しさん
08/11/19 22:28:39
>>615
権利義務の関係で処理すればいいんですね。
それぞれのプロセスはメッセージを受け取り自分を使わせる代わりに、
質問者を制御するメッセージを応答に付加できる。
そして、質問者はこのメッセージをevalことを義務付けられている。
これだけで>>610は実現できます。

617:616
08/11/20 06:48:07
これではダメでしたね。
質問者は最初の質問に対してサーバから一度応答を
受けてそこで完了してしまいます。実際にはさらに続いていて、
質問者側の情報をサーバが得て本回答を送ってくるのですが、
それを受け取るのは、最初の質問者が設定した質問ではないですね。
サーバ側によって仕組まれた、バックグラウンドでの質問です。
これを質問者が最初の質問の回答と見なすのは困難ですか・・・。

618:616
08/11/20 07:26:58
できるだけプロトコル化しないのがスマートと思ったのですが、
破綻しました。keep-alive状態を保って再質問するのが質問者
となるように仕組むことはできますが、
再質問は(最初の質問+質問者側でエバッた値)を引数に与えなくてはならず
複雑ですね。

619:616
08/11/20 07:55:21
それにBは最初のAの質問に回答しないで、Aから情報収集してから
回答を用意するのが>>610の仕様ですね。全然ダメですね。
お騒がせしました。>>616->>619までは無視してください。

620:デフォルトの名無しさん
08/11/20 23:41:22
>>616-619

621:EW
08/11/21 10:13:54
やっていることとしては

loop(State) ->
receive
1 -> spawnA, NewStete = State
2 -> spawnB, NewState = State
2' -> setState, NewState = 更新
end
loop(NewState).

みたいなのをイメージして頂ければいいと思います。

somefunc() ->
sendA
receive
sendB
receive
return Value

とやると、その間は処理がストップする(loopがreceiveできない)
ので、新しいプロセスを独立させてそこでコルーチンlikeな処理をして
その結果をloopに対してメッセージとして送っています。

上記の方法は柔軟性が増しますが、代わりに厳密性を失っています。
そのコルーチン処理がプロセスの状態に関るものであるならば危険なプログラムなので
使用しないほうがいいと思います。

622:デフォルトの名無しさん
08/11/24 14:42:15
vistaで erl -name hoge とするとAPPCRASH(StackHash_e52f)で起動できないのですが、
何が悪いのでしょう?
R12B-5(Erlang (BEAM) emulator version 5.6.5)です。
Microsoft Office IME 2007だとStackHash_e52fが起きるらしいのでMicrosoft IMEに
してみましたが、効果無しでした。


623:EW
08/12/10 11:56:36
>>622
ごめんなさい。分からないです。

624:デフォルトの名無しさん
08/12/12 00:20:13
おれはXPで動けばいいと思ってる

625:デフォルトの名無しさん
08/12/12 23:28:46
》624
なんで?

626:デフォルトの名無しさん
08/12/13 16:34:11
vistaはmeと同じ運命だからじゃないかい?

627:デフォルトの名無しさん
08/12/13 19:08:43
そのmeを3年使った俺への当てつけか?
それにどうせ7はvistaの発展なんだから、vistaがmeと同じ立場というわけにはならないよ。

628:デフォルトの名無しさん
08/12/13 19:14:02
そうだよな。7のカーネルはVistaと同じ、バージョン6.xなんだよな。
どの辺りが7なのか未だにわからない。

629:デフォルトの名無しさん
08/12/14 05:56:13
MSも必死だからな


630:デフォルトの名無しさん
08/12/14 12:19:25
名前なんて飾りです

631:622
08/12/14 22:53:41
>>623
どうもありがとうございます。
-snameは動くので、ローカルなネットワーク限定で遊ぶことにします。
vistaで使っている人はいないのか…

632:デフォルトの名無しさん
08/12/15 20:05:56
で、そろそろアーランを使用した基幹システム開発導入事例とか
出てきてもいいと思うんだ
通信以外の用途で

633:デフォルトの名無しさん
08/12/22 13:20:47
io:fwriteでファイルに書き出すときは文字列のエスケープをしないのに
コンソールに出力するとUTF8の多バイト文字が皆エスケープされてしまうのだけど
これを抑止することできますか?
ファイルからテキスト処理してコンソール上で確認してるとことごとく\227,\130,\143…みたいになっちゃって
涙が


634:EW
08/12/22 21:59:14
>>663
Erlang本には多バイト文字の扱い方が書いていないことは確かです。
正直、ファイル処理ですら相当危ういと思います。
ファイルにそのまま出力できたのは、UTF8の文字を認識しているのではなく
「バイト列をそのまま書き込んだから同じになったに過ぎない」という程度だと思います。
おそらく、ちょっと手を加えるだけで、ファイル出力も一瞬で文字化けするような気がします。

とりあえず、コンソール(コマンドプロンプト)が、EUCやShift-Jisになっていないかを
確認して、それでも駄目ならかなり厳しいんじゃないかと思います。
(だって、開発国の言語であるスェーデン語ですら文字化けするぐらいですし・・・・)

635:デフォルトの名無しさん
08/12/23 21:03:44
>>634
不当なシーケンス食わせてもそのまま保持してくれるので(pread)コンソールでの
エスケープだけやめてくれれば十分な場合がほとんどだと想うのですが
パッチ自分で入れないとなんないとすると面倒だなぁ(ファイルにログ吐くとUTF8通るのに、コンソールだとアレみたいな)



次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4773日前に更新/151 KB
担当:undef