関数型言語ML(SML, OCaml, etc.), Part 5at TECH
関数型言語ML(SML, OCaml, etc.), Part 5 - 暇つぶし2ch754:デフォルトの名無しさん
09/01/11 20:48:28
>>753
オモチャっていうのは、実用に堪えないっていうニュアンス?

755:デフォルトの名無しさん
09/01/11 20:49:29
>>754
いや、オマケ&デモって意味
本気で使わせたいんなら、最初からそれを言語仕様にするか
トップレベルに組み込むんじゃね?

まあ、単に俺がそう思っただけで、詳しいことは白根

756:デフォルトの名無しさん
09/01/11 20:59:17
>>742
Scheme > Common Lisp > Haskell > SML/OCaml

757:デフォルトの名無しさん
09/01/11 21:37:10
おまえらのいう「開発効率」って所詮個人の趣味プログラムでの話だろ?
>>690のように仕事で使う上での「開発効率」を考えたことある?

758:デフォルトの名無しさん
09/01/11 21:47:05
>>757
ゲームやGUIアプリの類に関数型は正気とは思えんし
ドカタ仕事の類にも向いてねえだろ
ド汚くてもいいから仕事を簡単にやっつけられるってのが「開発効率」じゃねえの?

759:デフォルトの名無しさん
09/01/11 22:02:41
LispのマクロはS式があって始めて便利なもの。
だから他の言語にはない。

760:デフォルトの名無しさん
09/01/11 22:12:55
つ Dylan

761:デフォルトの名無しさん
09/01/12 00:41:18
>>757-758
 >>735

>>760
Dylanはscheme/Lispとの差別化が出来なかったんだよね。むしろ劣化版。
最終的にObj-Cでいいやってことになって中止になったし。

762:デフォルトの名無しさん
09/01/12 00:41:42
>>733
むしろ、あなたのような人が人間の質として低い気がしますが?

英語ができた方がいいとは思いますが、必須とは思いませんね。

763:デフォルトの名無しさん
09/01/12 00:48:25
>>758
ところがどっこい、Unreal Engineの開発者がHaskellに注目してたりするんだ。
確か国内のゲーム開発者が、関数型に注目してるという記事も以前見かけた。
正気じゃないと言うほどでもないと思うけど。

それと、汚い仕事をやっつけ、って、割と関数型のフィールドじゃない?
関数こねくり回すのが本領の訳だしさ。

764:デフォルトの名無しさん
09/01/12 00:52:03
MONADIUSみてHaskellに対する印象が変わったな

765:デフォルトの名無しさん
09/01/12 01:16:12
>>762
英語必須ですよ。
英語ドキュメント避けて日本語ドキュメント探しているうちに日が暮れるような非効率な奴は3流

766:デフォルトの名無しさん
09/01/12 07:49:20
安定した仕様の言語だと、プログラマがドキュメントを探す
ことは稀だと思いますよ。通信規格のようなものは参照しま
すが。

767:デフォルトの名無しさん
09/01/12 08:49:25
洋書も持ってるけど、どうしても意味が汲み取れない
ところとかあると挫折しそうになる。

768:デフォルトの名無しさん
09/01/12 08:54:54
英語読めない奴の為に翻訳までしないと一流とは言えないな

769:デフォルトの名無しさん
09/01/12 08:59:00
300ページくらいで文章とコードが半々くらいだと何とかいけるんだが、
700ページとか厳しい。

770:デフォルトの名無しさん
09/01/12 08:59:14
じゃぁ二流でいいです。

771:デフォルトの名無しさん
09/01/12 09:41:39
>>761
>>>757-758
> >>735

お前は何が言いたいのだ?

772:デフォルトの名無しさん
09/01/12 12:09:39
>>766
documentって英単語は書き物全般を指すと思うんだが?w
最新の論文はもちろんのこと、RFCの一部なども日本語に訳されていないこともあるから、
やっぱり英語ができなきゃ支障がでるね。
特にアルゴリズムの論文は読むことも多いんじゃないかな。

773:デフォルトの名無しさん
09/01/12 12:18:14
>>772
私もあなたも同じだと思うけど、このム板に書き込んでいるような
奇人プログラマでないかぎり英文のドキュメントなんて読まないと
いうことです。研究者は別ですよ。

774:772
09/01/12 12:22:02
俺は職業プログラマではない。
どっちかっつーと天文台に住んでる実験系の物理屋だ。
プログラミングもするからプログラマで通してる。

775:デフォルトの名無しさん
09/01/12 12:29:37
つまんね

776:デフォルトの名無しさん
09/01/12 12:29:41
少し前に英文ドキュメントも読まないようなプログラマは3流だ、
という主旨の書き込みがありました。しかし、英文情報を渉猟して
いる方が珍しいのであって、当然そんなことをしていない人の中に
一流の人はいっぱいいると確信できるので、ちょっと反撥してみま
した。

777:デフォルトの名無しさん
09/01/12 12:32:13
>>776
一流なら当然名前は売れてるんだろ?
例を挙げてくれよ。

778:デフォルトの名無しさん
09/01/12 12:33:29
>>776
英文を読めない人間は、プログラマとしては情報弱者であることが
確定したようなものだ
そんな「一流のプログラマ」などあり得ないと俺なら確信できるが

英論文を読めない研究者などあり得ないのと同じだと考えてよい

779:デフォルトの名無しさん
09/01/12 13:02:04
>>776
日本発の情報がウンコなので英文を読むほかないのです。

780:デフォルトの名無しさん
09/01/12 13:04:30
並川さんもよくTVに向かって英語できません、なんて言えるよな。
昔と今じゃ状況が違うんだよ、馬鹿
ノーベル賞剥奪しちまえよ

781:デフォルトの名無しさん
09/01/12 13:25:37
一流のプログラマになれるような頭の良さを持ちつつ英語わからないやつっていないんじゃない?

782:デフォルトの名無しさん
09/01/12 13:27:31
言語マニアのファインマン先生は日本語を覚えようとして挫折した過去がある

783:デフォルトの名無しさん
09/01/12 13:27:53
実際に読めるかどうかは別として、少なくとも
「英語が読めなくても大丈夫」と主張するやつは駄目だな。

784:デフォルトの名無しさん
09/01/12 13:30:28
>>781
中学以来英語教育を受けてる筈なんだしね
まあネイティブ同然に読めなくてもそれは仕方が無いが
誰もそこまでは言ってない

785:デフォルトの名無しさん
09/01/12 13:33:47
>>782
何がだめだったんだろ。
言語体系の違いか?

786:デフォルトの名無しさん
09/01/12 13:36:45
>>785
日本語をファインマンに教えていたのが朝永の研究室の連中だったんだよね。
日本語の教え方がへたくそだったんじゃないかな。
それで、ファインマンもうんざりして日本語習得あきらめたんじゃないかと思うね。

787:デフォルトの名無しさん
09/01/12 13:41:14
そろそろ関数型言語の話をしようぜ

788:デフォルトの名無しさん
09/01/12 13:51:09
>>786
この馬鹿が。
日本語は世界でも最も難しい言語の一つなんだよ。
英語みたいに単純明解ではないのだよ。

789:デフォルトの名無しさん
09/01/12 14:00:26
英語:主語+述語を主体とした前置型(Lispチック)
日本語:述語を中心とした後置型(Forthチック)
だとオモ。と無理矢理スレに繋げてみる。

790:デフォルトの名無しさん
09/01/12 14:04:48
>>780
並川じゃなくて益川
漢字も読めないようじゃ現場では使えないな

791:デフォルトの名無しさん
09/01/12 14:57:09
>>788
俗説

792:デフォルトの名無しさん
09/01/12 14:59:53
しかし日本語を体系化できた人間は未だにいない。

793:デフォルトの名無しさん
09/01/12 15:03:06
朝永の弟子がファインマンに日本語を教えたときも、そういうもんなんだよ、という説明しかできなかった。
日本語が英語に比べて体系化しにくい複雑な言語だということなんだよね。
英語が世界中で愛用されて、日本語が日本国内でしか使われない理由が良く分かるよ。
やっぱ言語はシンプルじゃないと駄目ってことだ。

Scheme最強!!

794:720
09/01/12 15:24:53
>>718 Haskell覚えようとするような奴が英語読めないとも思えないし
>>720 英語読めないけどHaskell覚えようとするような奴ですが何か?w
>>726 英語も分からないような人はプログラミングなんかしなくていいよ
>>732 英語わからんけど飯の種なんでやめられないですw
>>733 お前みたいな質の低いプログラマがいるからこの業界なめられるんだよ。
>>762 英語ができた方がいいとは思いますが、必須とは思いませんね
>>765 日本語ドキュメント探しているうちに日が暮れるような非効率な奴は3流

つまり、
1.英語読めない奴は3流である
2.3流の奴はプログラミングしなくていい
3.プログラミングを仕事にしてるなら転職しろ

って、こってすね?
1.はともかくとして2.と3.には同意しかねますね。

>>787
スレチ失礼しました。
私はこのレスで終了とします。


795:デフォルトの名無しさん
09/01/12 15:31:37
低品質ソフト垂れ流しやがって ゆるせん

796:デフォルトの名無しさん
09/01/12 15:59:16
まあ英語読めんでも仕事になってるんならそれでいいんじゃないの?

manだのinfoだのMSDNだのコンパイラの吐くメッセージだのを
「英文なので自分には読めません」で仕事になるのか分からないが
それで済んでいるのならある意味幸運なことだ
俺には関係ないしな

797:デフォルトの名無しさん
09/01/12 16:23:47
>>792
どんな自然言語もそう。
完全に体系付けできる言語は人工言語だけ。

798:デフォルトの名無しさん
09/01/12 16:55:04
Javascriptなんて、方言やバージョン違いだらけで、
「Javascript大系」出すのは不可能。


799:デフォルトの名無しさん
09/01/12 17:24:34
"体系化しにくい"とは"規則化しにくい"と考えればよいのか。
つまり例外が多すぎる、と。

800:デフォルトの名無しさん
09/01/12 19:14:29
で、英語を読めないやつは三流だっていうことを必死で主張してた人は結局何がしたかったの?

801:デフォルトの名無しさん
09/01/12 19:17:42
スレチの話題はそろそろ終了してくれ。続けるならマ板にでも逝け。

802:デフォルトの名無しさん
09/01/12 23:56:12
Ocamlも色々盛り込みすぎて,体系化されてるとは見えにくくなっている.

803:デフォルトの名無しさん
09/01/13 00:01:31
Camlp4で頑張ればUnicodeリテラルとか
[1..10]みたいな記法を使えるようになるんでしょうか

804:デフォルトの名無しさん
09/01/13 00:46:07
てか、オブジェクティブな要素はいらないだろ。
流行に流されてるなぁ

805:デフォルトの名無しさん
09/01/13 00:53:19
>>804
lablgtkとかはいいんだけど、自分で使う分にはいらないよね、オブジェクト指向要素。
でもそこを否定すると"O"Camlじゃなくなるww

806:デフォルトの名無しさん
09/01/13 01:10:01
前から疑問だったんだけど、オブジェクティブじゃない素のcamlってのは
発展してるの?というか、継続的に開発されているの?

807:デフォルトの名無しさん
09/01/13 02:29:32
バリバリのOCaml使いって、関数型だとかそういうの拘らないで、
副作用使いまくり、オブジェクト指向使いまくりで
関数型の要素もある手続き型言語ですみたいな感じで書いてたりするんだろうなあ。。。

808:デフォルトの名無しさん
09/01/13 03:58:12
>>807
なんか偏見?そりゃHaskellよりはゆるいかもしれないけど。
バリバリのOCaml使いが作ったと思われるJane Street Capitalのcoreライブラリとか読んでもそんな感じはしないよ。


809:デフォルトの名無しさん
09/01/13 04:00:47
>>807
バリバリのC使いがにわかOCaml使いになってプログラムしたんだろ。

810:デフォルトの名無しさん
09/01/13 07:01:13
>>808
mldonkeyとか読んだ。でもあんま沢山のアプリを読んでないのですまん。

811:デフォルトの名無しさん
09/01/13 09:07:42
OCamlはフランスで作られているのだからフランス語をやるべきだ。
wikipediaひとつみてもフランス語が断然情報量が多いね。
フランス語
URLリンク(fr.wikipedia.org)
日本語
URLリンク(ja.wikipedia.org)
英語
URLリンク(en.wikipedia.org)


812:デフォルトの名無しさん
09/01/13 09:39:21
オブジェクトはOcamlの鬼子
URLリンク(d.hatena.ne.jp)
URLリンク(d.hatena.ne.jp)

813:デフォルトの名無しさん
09/01/13 10:25:50
lispわかってる人がOCamlマスターするのにかかる時間ってどのぐらい?
3日じゃ無理?

814:デフォルトの名無しさん
09/01/13 12:24:20
>>813
3時間ぐらい

815:デフォルトの名無しさん
09/01/13 18:09:27
↑↑馬鹿だろ

816:デフォルトの名無しさん
09/01/13 18:17:27
>>813
lispマスターがOCamlわかるのには大体3週間ぐらい。(これはマジレス)
lispわかってる人がOCamlマスターできないと悟るのが3分くらい。


817:デフォルトの名無しさん
09/01/17 20:38:13
初Ocaml

階乗計算を2通りやってみた。
URLリンク(codepad.org)

どっちの書き方の方が多い?

818:デフォルトの名無しさん
09/01/17 21:00:36
let rec fac=function
| 0 -> 1
| x -> x*fac(x-1);;
はどうよ?

819:デフォルトの名無しさん
09/01/17 21:13:25
>>818
同意。

820:デフォルトの名無しさん
09/01/17 21:16:50
>>817, >>818
3通り
URLリンク(codepad.org)

821:デフォルトの名無しさん
09/01/17 21:54:19
型の例
URLリンク(codepad.org)

822:デフォルトの名無しさん
09/01/17 22:01:22
凄く細かいことだけど、自分は OCaml なら fact (n + 1) と必ず空白を入れるかな。
C や Java だと、その括弧は関数の引数を括るための特別な記号だけど、
OCaml だとそういう意味はなく、単に演算の優先順位を示す普通の括弧だから
2 * (3 + 4) の括弧に空白を入れるのと同じ理由で fact の後の括弧にも空白を入れる。


823:デフォルトの名無しさん
09/01/17 23:08:59
>>822の言うように修正したコード
URLリンク(codepad.org)

824:デフォルトの名無しさん
09/01/17 23:20:24
let fact n = fold_left ( * ) 1 [2..n]
とか書けたらいいのにと思いますた
遅延計算で

825:デフォルトの名無しさん
09/01/17 23:23:22
>>823を相互再帰にする。3つの関数のどこから計算しても同じ。
URLリンク(codepad.org)

826:デフォルトの名無しさん
09/01/17 23:51:52
Yコンビネータを2種類追加して全部で5通りになった。
URLリンク(codepad.org)

827:デフォルトの名無しさん
09/01/17 23:53:36
>>825
相互再帰を入れれば全部で6通り。


828:デフォルトの名無しさん
09/01/18 00:24:56
>>824
Haskellならできるね
fact n = foldl1 ( * ) [1..n]

829:デフォルトの名無しさん
09/01/18 00:35:06
PythonもHaskellよりはダサいですが一応出来ます
from operator import mul
fact = lambda n: reduce(mul, xrange(1, n+1))

830:デフォルトの名無しさん
09/01/18 15:24:18
末尾再帰バージョン
URLリンク(codepad.org)

831:デフォルトの名無しさん
09/01/18 20:08:54
マージソートを作ってみた。リストの表示に良い方法ってあるの?
URLリンク(codepad.org)

832:デフォルトの名無しさん
09/01/18 20:16:02
>>826
それ>>164まんまw

833:デフォルトの名無しさん
09/01/18 20:16:18
extlibのStd.printが汎用プリンタっぽいですね

834:デフォルトの名無しさん
09/01/18 20:32:39
>>833
ありがとう。どうやらcodepadでは
#use "topfind";;
#require "extLib";;
が使えないみたい。

835:デフォルトの名無しさん
09/01/22 19:43:52
簡単なオブジェクトの例
URLリンク(codepad.org)

(* helloオブジェクトのメソッドprintを呼び出す。 *)

hello#print ;;


836:デフォルトの名無しさん
09/01/22 19:58:40
>>835の例をもう少しちゃんと書くと
URLリンク(codepad.org)

let hello = new c_hello ;;

837:デフォルトの名無しさん
09/01/22 20:30:48
>>836のクラスを継承する。
URLリンク(codepad.org)

838:デフォルトの名無しさん
09/01/23 19:01:06
リストの操作の練習など
URLリンク(codepad.org)

839:デフォルトの名無しさん
09/01/24 05:42:37
和集合は
else

840:デフォルトの名無しさん
09/01/24 05:44:24
間違えて途中書き込みしてしまった

和集合は
else h :: union t b
よりも
else union t (h::b)
のがいいんじゃね?

841:デフォルトの名無しさん
09/01/24 16:43:36
>>840
いいわけないだろ。
hが加わった分だけ再帰に余計な計算が加わって遅くなる。
ばか?

842:デフォルトの名無しさん
09/01/24 16:48:47
計算量多くなるけど、入力に同じのが入ってたときを考えたんだが。
入力が正しくないときなんて考えるだけ無駄か。

843:デフォルトの名無しさん
09/01/24 17:20:19
俺も>>840と同じように思いました
>>840方式なら、計算ステップ数は同じで、末尾再帰になりませんか?

>>838のコードは末尾再帰になっていない分効率が悪いですよね

844:843
09/01/24 17:21:39
ああそうか
再帰のステップ数は変わらないけど、memberpの計算量が増えていくのですね
理解しました


845:デフォルトの名無しさん
09/01/24 21:43:51
>末尾再帰になっていない分効率が悪いですよね
URLリンク(codepad.org)
URLリンク(codepad.org)

よくそんな嘘を平気で言えたもんだw

846:デフォルトの名無しさん
09/02/05 13:14:19
OCamlを使っている皆さんのプログラミング環境やプログラミングスタイルって
どういうものなのか教えていただけませんか?

847:デフォルトの名無しさん
09/02/06 09:08:33
環境やスタイルっつーてもねー、もうちょっと質問を明確にできない?
linux, gcc, ocaml3.11, OMake/Makefile, emacs, tuareg1.46.2,
80chars/line, indent 2chars
とか、そういうこと知りたいの?


848:デフォルトの名無しさん
09/02/06 10:06:07
ドテラ着てコタツに入ってみかん食いながらプログラミングするのが今時のスタイル。

849:デフォルトの名無しさん
09/02/06 22:25:20
BT別/トイレ有/風呂有/シャワー/室内洗置/給湯/ガスコンロ対応/
システムキッチン/エアコン/冷房/暖房/BSアンテナ/CATV/エレベータ/
オートロック/収納/フローリング/分譲賃貸/駐輪場/ガス2口/浴室乾燥機/
シャワー付トイレ/バルコニー/外壁タイル/クロゼット/宅配ロッカ/CS/照明/
インターネット接続可

850:デフォルトの名無しさん
09/02/06 22:34:40
FONに追加したSDカード上のLinux環境(Open-WRT)に
ログオンしてemacs起動してサーバーサイドを作成してる。

851:sage
09/02/07 08:21:54
自分はEmacs + ocaml-mode。
多くの人は同じじゃね?

852:デフォルトの名無しさん
09/02/07 13:00:09
>>847
・コンパイラに○○、
・デバッグのために○○と○○、
・エディタには○○、
・IDEを使う場合は○○、
・開発用と検証用のPCを分けたり、
・開発用・検証用PC間のデータ共有にLANを使ったり、
・通信にRS232Cを使ったり、
・コンパイルするまえに検証したりするかどうかとか、
・バグが見つかったときの対処方法など、
ですね。
ほかにも必要な要素があればぜひ付け加えてください。

どういうプログラムを作るかにも因るかもしれませんが、
要するにどういう種類のプログラムを作るときどういう手順を踏んでいるのか、
ということを教えていただければ幸いです。

853:852
09/02/07 13:03:48
追加ですが、
ソースコード管理や配布などについても教えていただければ幸いです。

854:デフォルトの名無しさん
09/02/07 20:34:01
>>851 tuareg-modeは楽しいよ

855:デフォルトの名無しさん
09/02/08 07:22:46
コンパイラはocaml3.11+ocamlspotter patch.
デバッグは主にextlibのdumpで画面表示. 超絶困ったときにはocamldebug.
エディタはemacs. IDEはいまのところ使ってない.
全体をコンパイルする前に大きく編集したファイルは-iオプションで個別に型をチェック.
-annotオプションは殆ど常に付けていて、謎な動きで困ったときには型とかも参考にしながら動作を追う.
上で抑えられているはずの(match文とかの)ありえない遷移にはassertとかも付けている. ヒットしたことないが.

856:デフォルトの名無しさん
09/02/08 10:52:48
>>855 と殆ど同じ

> ・開発用と検証用のPCを分けたり、
> ・開発用・検証用PC間のデータ共有にLANを使ったり、
> ・通信にRS232Cを使ったり、

これは OCaml と何の関係もないと思うが。必要な人はそうするだけの話でしょう。

> ・コンパイルするまえに検証したりするかどうかとか、

質問の意図がよくわかりません。
コンパイラに通す、という事以上に意味のある検証を、
コンパイラに通す前にできるとは思えませんが。

通した後にモデルチェッカとか定理証明器でさらに検証する、
というのなら判りますが、実際やっている所を聞いたことがありません。
あれば是非話を伺いたいです。

> ・バグが見つかったときの対処方法など、

printf debug は馬鹿にできない。
assert して backtrace とかかな?
最悪 ocamldebug。gdb は意外といける。


857:デフォルトの名無しさん
09/02/08 11:37:12
>>852
>>853

質問の対象が広すぎて良い答が得られるとは思えません。

- なぜこういう質問をしたくなったのか (会社で OCaml を導入しようとしているとか)、
- 現在こういう手順で他言語で開発を行っている、OCaml を使っても同じようにできるか知りたい

とか、背景説明していただかないと、答える側としても的を得た答を出しにくいです。


858:852
09/02/08 12:09:49
>>857
明確な答えは求めておりません。
質問というよりは
「オレはこういうやり方で開発やってるぜ」
という話が聞けたらなぁという感じですね。

どちらかというとブレインストーミングに近いかも。

859:デフォルトの名無しさん
09/02/08 20:44:49
じっとソースコードを眺めて、ここでこうなっているはずなのに
こんなことになっている、ということはその原因の候補は……
と考えるだけでもわりととれるもんだよ、バグ。

860:デフォルトの名無しさん
09/02/08 20:57:18
・コンパイラにはocaml 3.10
・デバッグのはprint
・エディタにはEmacs + caml-mode
・IDEは使わない
・コンパイルするまえに検証 <- ??? そんなことできるの?
・バグが見つかったときの対処方法 printデバッグ

861:デフォルトの名無しさん
09/02/08 22:50:04
ホーア論理を御忘れか?

862:デフォルトの名無しさん
09/02/08 23:29:52
MLのHoare論理はまだ研究段階

863:デフォルトの名無しさん
09/02/08 23:35:13
completeである必要はないんじゃないの? > 人間のやる検証

864:デフォルトの名無しさん
09/02/08 23:51:49
コンパイルの前に検証って、エディタがtypoや型エラーを指摘してくれるとかそういうのじゃないの?

865:デフォルトの名無しさん
09/02/09 07:42:47
ちょ MLで Hoare論理ってwww バカスwwww

866:デフォルトの名無しさん
09/02/09 12:34:14
>>864
それは深読みすぎ


867:デフォルトの名無しさん
09/02/09 21:43:11
>>864 型エラーとかシンタクスとかはコンパイルでチェックしてくれるから
それでよくね?セーブしてコンパイル の時間がそんなに惜しい?一瞬でしょ

868:デフォルトの名無しさん
09/02/11 00:08:11
OMake -pの事でしょ?
-p
Watch the filesystem for changes, and continue the build until it succeeds. If this option is specified, omake will restart the build whenever source files are modified. Implies -k.
このレスポンスを一度体験すると割とはまる。

869: 
09/02/24 10:58:46
Ocaml初心者です。

let ( ) = print_string "Hello World\n"

ってのは何を意味するのですか? let の後には関数名とか変数名とかじゃないのですか?
let ( ) = ってのがわかりません。
教えてください。

870:デフォルトの名無しさん
09/02/24 12:04:36
let には二通りある:
let f x y z = 式 (省略)
let パターン = 式

パターンは、簡単に言えば、変数を含んだ値のようなもの。
右辺の式を評価後、パターンに対してパターンマッチを行い、
パターン内に変数があれば、変数部分に該当する値を束縛する:

let x = 1 (* x = 1 *)
let (x,y) = 1, 2 (* x = 1, y = 2 *)
type t = { label : int; foo : float }
let { label = x } = { label = 2; foo = 3.0 } (* x = 2 *)
let x::xs = 1 :: [] (* x = 1, xs = [] *)

変数がなければ束縛は起こらない。
let true = 3 > 2 (* no binding *)

パターンの定数と、右辺の結果に齟齬があるばあい、パターンマッチは失敗する:
let (false, true) = 3 > 2, 2 > 0 (* match failure *)

let () = print_string "..."

最後の式は右辺の結果を () にパターンマッチさせているが、() の型 unit には
() しか値がないから、マッチは必ず成功する。なので、コンパイラはわざわざこの
マッチを行うようなコードは生成しない。結果、この式は、右辺を実行するだけ。


871:
09/02/24 15:51:06
>>870
Ocamlにパターンマッチがあるのは知ってましたが、これがそうだとは気づきませんでした。
詳しくありがとうございました。

872:デフォルトの名無しさん
09/02/28 19:37:03
let main = print_string "Hello, world!\n"
とかの方がわかりやすいと思うけどなあ。俺はこっち(let main = ...)を使っている。
let () = ... ってなんでこうするんだろ。何かメリットあるのかな?

何にせよ右側の式が評価されることにはかわらないからどっちでもよいとは思うが。

873:デフォルトの名無しさん
09/02/28 19:46:51
>>872
だって、将来使わないものをわざわざ定義したら、後で読み返したときややこしくなるじゃん。

874:デフォルトの名無しさん
09/02/28 21:34:47
オブジェクト指向言語の良い所は変数やメソッドの名前が分かり易い事だと思うんだけど、
関数型言語の良い所は名前をイチイチ考えなくて良い事だよね。

875:デフォルトの名無しさん
09/02/28 21:44:44
いやちゃんと考えろよ…意味を表す名前を

876:デフォルトの名無しさん
09/02/28 22:02:32
いや本当に必要な時は考えてるよ…関数型言語だとそれが少ないだけで

877:デフォルトの名無しさん
09/02/28 23:06:58
関数型言語ML 最終話 「なまえをよんで」

878:デフォルトの名無しさん
09/03/01 09:30:13
>>873
名前を付けたくないなら、普通 let _ = ... じゃね?


879:デフォルトの名無しさん
09/03/01 14:04:44
我が輩は関数である。名前はまだ無い。
どこで生まれたかとんと見当がつかぬ。何でも薄暗いじめじめした所で他の関数に渡された事だけは記憶している。

880:デフォルトの名無しさん
09/03/01 14:08:47
そうだな。let ()だと、右辺がunitを返す場合しか使えない

881:デフォルトの名無しさん
09/03/01 20:51:42
本当はちゃんと意味を表す名前をつけるべきなんだろうけど、
関数型言語でそれをやると馬鹿にされそうで、ためらってしまうな

882:デフォルトの名無しさん
09/03/01 21:32:47
>>880
unitを返すのが分かるなんて 何て素敵な!

883:デフォルトの名無しさん
09/03/02 09:44:11
>>880
>>882 の通りで、

let _ = Printf.printf "%d %d" 1

のようなコードを書いて、先生、何も起こらないんですが、と聞かれたことがある。
そりゃ見た目何も起こりませんがな。


884:デフォルトの名無しさん
09/03/02 12:06:10
let main = ...
let _ = ...

の場合、副作用がなく返り値に意味がある別の関数を誤って呼んでしまうミスを見つけづらい。
たとえば ioaccess_in : ... -> int と ioaccess_out : ... -> unit が定義されているとして

let _ = io_access_out ...
let c = io_access_in ...
let _ = io_access_out ...
let _ = io_access_out ...
let c = io_access_in ...
let _ = io_access_in ...
let _ = io_access_out ...
let _ = io_access_out ...
let c = io_access_in ...
let _ = io_access_out ...
let _ = io_access_out ...
let c = io_access_in ...
let _ = io_access_out ...

のようなコードのバグ。

let () = ...

なら、そのミスも型検査で検出できる。


885:デフォルトの名無しさん
09/03/16 09:11:08
あるある

886:デフォルトの名無しさん
09/03/31 20:32:14
ここ
URLリンク(alain.frisch.fr)
の patch_record が凄く魅力的なんだけど、同じことを camlp4 で
できないかな。

887:デフォルトの名無しさん
09/04/01 17:52:22
型に unaware な camlp4 では全く同じ事は無理です
local open を使うか、
module alias でも使って文字数を減らすぐらいかなぁ

fun r ->
open Very_long_module_and_I_do_not_want_to_type in
r.x

fun r ->
let module M = Very_long_module_and_I_do_not_want_to_type in
r.M.x


888:デフォルトの名無しさん
09/04/08 15:10:44
>>879
コピペだけど

【手続き型】

吾輩は猫である。
名前はまだ無い。
どこで生れたかとんと見当がつかぬ。
何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。
吾輩はここで始めて人間というものを見た。

【関数型】

人間というものを始めて見た薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶しているがどこで生まれたかとんと見当がつかず名前がまだ無い猫である吾輩。


889:デフォルトの名無しさん
09/04/08 19:53:44
時間が経過すると…

【手続き型】

吾輩は猫である。
親ゆずりの無鉄砲で子供の頃から損ばかりしている。
「おい、地獄さ行ぐんだで!」
ウスウスと目を覚ました時、蜜蜂の唸るような音は、まだ、その弾力の深い余韻を、私の耳の穴の中にハッキリと引き残していた。
国境の長いトンネルを抜けると雪国であった。
名前はまだない。

890:デフォルトの名無しさん
09/04/09 16:10:18
…………ブウウ懼懼懼懼懼懼ンンン懼懼懼懼懼懼ンンンン………………。


891:デフォルトの名無しさん
09/04/09 19:16:00
CMの使い方を教えてください。
SML/NJで、use文のカスケードではロードが厳しくなってきたので、
CMに移行しようとしているのですが、以下の点で困っています。


(1) 対話型環境を使って計算したい。そのため、トップレベルに関数を
展開したいが、.cmにはトップレベル関数・値を書けない。
 今のところ、open XXX; がならんだ .smlを作って、これをuseしている。

(2) 中置演算子の割り当てをトップレベルに置きたい
 目的は、(1)と同じ。こちらは、実現方法が見つからない。


892:デフォルトの名無しさん
09/04/26 17:14:43
float は boxing して扱われ、気合の入った最適化をしているわけでもないっぽい OCaml が
レイトレースのベンチマークで C++ と勝負できる位置にいるのはなんで?

893:デフォルトの名無しさん
09/04/26 20:17:02
>>892
関数型言語は手続き型言語より最適化しやすいよ

関数型は中間表現で CPS 使ってる奴が多いから、 気合いが入って
なくても SSA 使ってる手続き型言語程度のコードは吐き出しそうな
気がする

fortran を除くと、手続き型言語のコンパイラの内部表現に SSA を
使うのが一般的になったのは、わりと最近じゃなかったっけ?

gcc だと 4 系列から SSA だっけか?


894:デフォルトの名無しさん
09/04/26 20:46:10
とりあえずF#からいじり始めてる新参者なんですが、immutableなデータの取り扱い教えてくんなまし
immutableにするとMapReduceみたいにナイスに並列化も出来てクールだぜというのはわかったんですが、その結果とかで何処かにステートのチェンジが起きますよね?
Haskellのゲームかなんかでキャラの移動とかされた結果のそのシーンの状態を新しいWorldとして作っていくことでimmutableを維持してるとか言ってたんですが、業務アプリとかだと同なるんざんしょ。
別の記事か何かで、全体のデータ構造をobject-oriented西といて、その間の処理とかをfunctionalにするのが現実的だとかも言ってたんですが。
教えてエロイ人

895:デフォルトの名無しさん
09/04/29 00:17:23
smlって実行結果が長いとき#で省略されちゃいますよね?あれを最後まで表示
させたいときって、どうすればいいんですか?printの引数はstring型でsring
にするにはInt.toString(a)などとすればできますが、intとchar型くらいしかできませんよね?
新しくつくった型には使えないのでどうすればよいかわからなくて・・・
誰か教えて下さい。

896:デフォルトの名無しさん
09/04/29 07:05:49
別にデータをimmutableにするのにゲームも業務アプリも変わんないんじゃん

897:デフォルトの名無しさん
09/04/29 09:25:16
データ毎回全部作り直すの?

898:デフォルトの名無しさん
09/04/29 22:16:45
そうしてもいいけど、、、
普通は関数的なデータ構造では更新後と更新前が「ある程度共有される」。
たとえばリスト構造の先頭のほうを作り直す場合とかそうでしょ。
なおかつ共有されちゃっててもこまらないのはデータがimmutableだからこそだともいえる。
そしていろいろなデータ構造でimmutableでありながらも空間効率や時間効率のいいアルゴリズムが開発されてる。
Haskellのゲームかなんかで云々っていうのもデータを毎回全部作り直すという話じゃないと思うよ。

899:デフォルトの名無しさん
09/05/01 20:03:46
「プログラミングの基礎」浅井健一という本は、
他の言語経験が無くOCamlがわからない人でもついていけますか?

900:デフォルトの名無しさん
09/05/01 20:24:05
>>899 どのように考えながらプログラミングをしていくかが丁寧に書いてあるのでお勧めです。
もう少し高度な機能が知りたくなったら「プログラミング in OCaml」。

901:デフォルトの名無しさん
09/05/02 01:25:00
>>895
ぱっと思いついたのは、print関数自作かSMLFormat使う

902:デフォルトの名無しさん
09/05/09 19:04:23
質問です

ML系またはHaskell系言語でGUI開発に便利なRAD環境が充実している言語って何でしょうか?
できれば個人的なお勧め開発環境も教えていただければうれしいです。

903:デフォルトの名無しさん
09/05/09 19:22:56
VBに匹敵するようなものはないなぁ

904:デフォルトの名無しさん
09/05/09 19:37:35
F#でよくね?

905:デフォルトの名無しさん
09/05/09 22:12:06
OCaml にありそうな気がす

906:デフォルトの名無しさん
09/05/09 22:30:47
ここまでGUIプログラムを開発した人なし

907:デフォルトの名無しさん
09/05/11 11:28:08
LablGtk の glade インターフェースを 5 年前に使ったけど、まあ、glade だったよ。


908:デフォルトの名無しさん
09/05/11 14:22:49
GUIイラネ

909:デフォルトの名無しさん
09/05/11 15:00:29
>>908
で?

910:デフォルトの名無しさん
09/05/11 15:01:42
別にGUIイランやつはイランで結構だろ。
誰も強制なんかしてないんだし。
ここでそんなこと表明する意味がわからん。

911:デフォルトの名無しさん
09/05/11 16:25:14
GUIイラネの人じゃないけど、言語処理系をパッケージシステムで
インストールするとき、最近はGUIツールキットまで一緒に入れようと
するのが結構あってうざいんだよね。幸いML関連でそういうのにあたった
ことはないけど、こないだMacPortsでSWI-PrologとErlangを入れたら
いろいろ勝手に入って来て大変だった。オプションでも外せないし。
将来lablgtkなんかを強制されるようになったらOCaml捨てたくなる。

こっちは今後もコマンドラインだけでひっそり生きていきたいんだから
ほっといてほしい。

912:デフォルトの名無しさん
09/05/11 16:42:41
そんなもん、自分でコンパイルすりゃ良いんじゃねーの?

GUI無きゃないで、
「今時、言語側でdefaultでGUIぐらいつけろ。」
とか言う人出そうだし。

オメーン所の、パッケージ作成者に言うことだろうが。


913:デフォルトの名無しさん
09/05/11 16:50:45
デフォルトでついていても使わなきゃいいだけの話。
もしデフォルトで付いていればインストールの手間もなくなるし、
公式お墨付きということでヒューマンインターフェースが共通化されて利用者にとって便利になる。
どうしてもそれに不満があれば別のライブラリをインストールすればいいだけのことだし。
言語にGUIライブラリがくっついていたら何が不満なのかわからん。
容量にしてもインストール時間にしても対して違わない。
処理系を自前でコンパイルしてるやつは多少コンパイル時間が長くなるが、些細な問題だよな。

914:デフォルトの名無しさん
09/05/11 17:53:25
>>913
たとえば、SWI-Prologのインストールで入ったライブラリのために、
別の言語のインストールでエラーになるということはあるよ。

915:デフォルトの名無しさん
09/05/11 17:56:07
ディスク容量が限られてる環境なので、依存するライブラリをあれこれ
入れられるとうっとおしい、とか、サーバサイドアプリで、サーバには
あれこれ入れたくないとか、パッケージ管理システムがバイナリベース
じゃなくてゴリゴリコンパイルするのでやってられない、とか。

(パッケージのメンテナが)簡単に分離できるような構成にしておいて
ほしい、という要望はありなんじゃないか?

916:デフォルトの名無しさん
09/05/11 18:10:00
つGentoo

917:デフォルトの名無しさん
09/05/11 18:20:41
>>911
MacPortsならパッケージ作成者がGUI無しのvariantsを用意すればいいだけの
話だよな。それが嫌だったらパッチ書いて送るしかないだろ。

918:デフォルトの名無しさん
09/05/11 18:21:16
>>915
> (パッケージのメンテナが)簡単に分離できるような構成にしておいて
> ほしい、という要望はありなんじゃないか?
それはアリだな

919:デフォルトの名無しさん
09/05/11 18:28:08
似たような文句のある人っているんだね。
X関連をいろいろ入れろと要求するのは勘弁してほしいよね。
あくまで言語を入れたいんだからGUIはあくまでオプションにしていてほしい。
こっちはGnomeみたいなリッチなデスクトップじゃなくてまだtwmなんだよ。

920:デフォルトの名無しさん
09/05/11 19:12:50
>>919
twmって割と重くて使いにくいと思ってたんだがまだ使ってる人いたんだww
みんなawesomeとかfluxboxとかに移行しちゃったと思ってた。



921:デフォルトの名無しさん
09/05/11 19:24:48
基本的にUIに興味ないもんでいろいろ試すのが面倒で。
言語は片っ端から使ってみているのだけど。

# 言語もある意味UIの一種だというツッコミを受けそうだ :-)

922:デフォルトの名無しさん
09/05/11 19:39:25
コンピュータを何につかってんの?
どうせ論文にもならないような研究ごっこやって妄想して遊んでるだけだろ。

923:デフォルトの名無しさん
09/05/11 21:38:30
たぶん>>921さんみたいな人はWindows(メイン)ともう一台(実験用)みたいな構成だと予想。

924:デフォルトの名無しさん
09/05/11 21:44:55
まぁ2chよりでくだらない煽りを書いてるよりは有意義なことかと

925:デフォルトの名無しさん
09/05/11 22:25:07
>>922
俺は自宅で10台ぐらいのクラスタで論文にできる研究やってるよ

926:デフォルトの名無しさん
09/05/11 22:27:37
ただ並列化して測定しました、という類の論文は勘弁してくれ

査読するたびにうんざりする

927:デフォルトの名無しさん
09/05/11 22:35:02
>>925
InfiniBandか10GbEか分からんけど、電気代凄そうだな

928:925
09/05/11 22:44:36
>>926
そんなどこかの高校生じゃあるまいしw

929:925
09/05/11 22:48:01
>>926
頼まれたこともないくせにw

930:925
09/05/11 22:49:09
>>927
家庭用だぜ?
1GbEに決まってるだろ

931:デフォルトの名無しさん
09/05/11 22:58:29
これは推して知るべしだな

932:デフォルトの名無しさん
09/05/12 00:46:29
10台ぽっちでクラスタって…

933:デフォルトの名無しさん
09/05/12 12:42:55
>>911
macports使ってるけど、Xがからまないと確かに気楽だなあ。
macportsだったら、swi-prolog-liteがおすすめ。

934:デフォルトの名無しさん
09/05/12 13:12:16
関数型言語の話題になっていない件について。


ライブラリが豊富なのが魅力で最近やっとSML/NJからOCamlに移行したんだが、
SMLで書いたコードを書き換えるのが結構面倒。
文法的にもOCamlって面倒臭く感じるんだけど、単なる慣れの問題?

935:デフォルトの名無しさん
09/05/12 13:20:43
let fun や let val とか tuple には必ず括弧を書いていた癖に、
何が面倒なのかわからんが、camlp5 には pa_sml があるのでそれを使ってみ?



936:デフォルトの名無しさん
09/05/12 14:15:41
再帰関数の定義がlet recだったり関数引数のパターンマッチングを
let funcName = function ... | ... のように書くのが面倒に思えたんで。
確かにSMLにも冗長な部分はあるし、慣れだとは思うんだが。

何らかのトランスレータはあると思っていたのだが、camlp5なんて便利なものが
あったとは。2000行程のSMLコードをうまく変換出来たよ。どうもありがとう。

937:デフォルトの名無しさん
09/05/12 14:50:17
>>932
どうでもいいけど、計算そのものの研究ならクラスタであれば台数は関係ないのでは?

938:デフォルトの名無しさん
09/05/12 16:03:34
>>936
ホントに変換できたんだ!知らずに教えといてすまんが、使ったことなかったんで。


939:デフォルトの名無しさん
09/05/12 16:45:46
>>938
camlp5 pa_sml.cmo pr_o.cmo -impl MyModule.sml
で変換できた。printをprint_stringに置換する必要はあったけど。
まじで助かった。

940:デフォルトの名無しさん
09/05/12 17:41:59
それはよござんした


941:デフォルトの名無しさん
09/05/12 23:47:13
関数型言語って、常微分方程式の初期値問題の数値解を求めたりするのには向いてますか?
科学技術計算を中心にした関数型言語の入門書でなにかいいのありますか?

942:デフォルトの名無しさん
09/05/13 00:31:28
f# for scientists

943:デフォルトの名無しさん
09/05/13 14:36:30
>>925
なぜ自宅で?
まともな研究じゃないな

944:デフォルトの名無しさん
09/05/13 14:37:24
粘着乙


945:デフォルトの名無しさん
09/05/13 14:38:10
>>944
早ッ!!

946:デフォルトの名無しさん
09/05/13 14:39:01
>>942
Harrop の本なんか読むなよ、頼むから。


947:デフォルトの名無しさん
09/05/13 14:57:42
>>943
大学にいる人間じゃないから、そういう研究は自宅でしかできないんだよ。

948:デフォルトの名無しさん
09/05/13 22:16:09
>>946
その著者が書いた唯一の本のようだが。

949:デフォルトの名無しさん
09/05/13 22:52:58
>>947
計算機科学の研究は分野によってはPC1台でも十分に出来るのが良い所。
ぜひ成果を出して論文投稿してくれ。

950:デフォルトの名無しさん
09/05/13 22:56:19
成果が出なくても rm するだけというのも良い所。

951:デフォルトの名無しさん
09/05/14 08:42:20
>>948
その著者が書いたSpamは山程ある。


952:デフォルトの名無しさん
09/05/14 22:02:27
うまいこといいやがって

953:デフォルトの名無しさん
09/05/17 19:01:26
>>946 >>951
kwsk

954:デフォルトの名無しさん
09/05/21 09:43:34
john harrop troll でググレカス


955:デフォルトの名無しさん
09/05/21 14:26:16
John Harropってtrollすぎてワロタ


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch