[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/10 00:21 / Filesize : 224 KB / Number-of Response : 956
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

関数型言語ML(SML, OCaml, etc.), Part 5



1 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 14:49:54 ]
関数型言語MLについて語るスレッドです。

MLは、確固とした理論的背景を持つ言語でありながら、
現実的なソフトの開発にも使用できる実用性を備えた言語です。
また、プログラミングの初心者が最初に学習する言語としても優れています。

総本山
Standard ML www.smlnj.org/
Objective Caml caml.inria.fr/ocaml/

前スレ
関数型言語ML(SML, OCaml, etc.), Part 4
pc11.2ch.net/test/read.cgi/tech/1133003340/

792 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 14:59:53 ]
しかし日本語を体系化できた人間は未だにいない。

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

Scheme最強!!

794 名前:720 mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 15:31:37 ]
低品質ソフト垂れ流しやがって ゆるせん

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

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

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

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


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

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



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

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

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

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

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

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

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

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


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

810 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 07:01:13 ]
>>808
mldonkeyとか読んだ。でもあんま沢山のアプリを読んでないのですまん。



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


812 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 09:39:21 ]
オブジェクトはOcamlの鬼子
d.hatena.ne.jp/camlspotter/20080906/1220723583
d.hatena.ne.jp/camlspotter/20080908/1220846961

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

814 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 12:24:20 ]
>>813
3時間ぐらい

815 名前:デフォルトの名無しさん [2009/01/13(火) 18:09:27 ]
↑↑馬鹿だろ

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


817 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 20:38:13 ]
初Ocaml

階乗計算を2通りやってみた。
codepad.org/5vBjk9Cm

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

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

819 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 21:13:25 ]
>>818
同意。

820 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 21:16:50 ]
>>817, >>818
3通り
codepad.org/5bAL8aRu



821 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 21:54:19 ]
型の例
codepad.org/UGqmVJcb

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


823 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 23:08:59 ]
>>822の言うように修正したコード
codepad.org/i8vprhP5

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

825 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 23:23:22 ]
>>823を相互再帰にする。3つの関数のどこから計算しても同じ。
codepad.org/x8n2Lk8r

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

827 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 23:53:36 ]
>>825
相互再帰を入れれば全部で6通り。


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

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

830 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 15:24:18 ]
末尾再帰バージョン
codepad.org/vE2CJfG0



831 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 20:08:54 ]
マージソートを作ってみた。リストの表示に良い方法ってあるの?
codepad.org/VJydA6mc

832 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 20:16:02 ]
>>826
それ>>164まんまw

833 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 20:16:18 ]
extlibのStd.printが汎用プリンタっぽいですね

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

835 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 19:43:52 ]
簡単なオブジェクトの例
codepad.org/v0ANkxs1

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

hello#print ;;


836 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 19:58:40 ]
>>835の例をもう少しちゃんと書くと
codepad.org/kJsrhxd6

let hello = new c_hello ;;

837 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 20:30:48 ]
>>836のクラスを継承する。
codepad.org/Q1xMkrvt

838 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 19:01:06 ]
リストの操作の練習など
codepad.org/Ggh5Z9mp

839 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 05:42:37 ]
和集合は
else

840 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 05:44:24 ]
間違えて途中書き込みしてしまった

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



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

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

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

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

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


845 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 21:43:51 ]
>末尾再帰になっていない分効率が悪いですよね
codepad.org/NLLYr3fJ
codepad.org/KnzRmJjp

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

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

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


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

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

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



851 名前:sage mailto:sage [2009/02/07(土) 08:21:54 ]
自分はEmacs + ocaml-mode。
多くの人は同じじゃね?

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

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

853 名前:852 mailto:sage [2009/02/07(土) 13:03:48 ]
追加ですが、
ソースコード管理や配布などについても教えていただければ幸いです。

854 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 20:34:01 ]
>>851 tuareg-modeは楽しいよ

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

856 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 10:52:48 ]
>>855 と殆ど同じ

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

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

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

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

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

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

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


857 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 11:37:12 ]
>>852
>>853

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

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

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


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

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

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

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



861 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 22:50:04 ]
ホーア論理を御忘れか?

862 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 23:29:52 ]
MLのHoare論理はまだ研究段階

863 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 23:35:13 ]
completeである必要はないんじゃないの? > 人間のやる検証

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

865 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 07:42:47 ]
ちょ MLで Hoare論理ってwww バカスwwww

866 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 12:34:14 ]
>>864
それは深読みすぎ


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

868 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:  mailto:sage [2009/02/24(火) 10:58:46 ]
Ocaml初心者です。

let ( ) = print_string "Hello World\n"

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

870 名前:デフォルトの名無しさん mailto:sage [2009/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 名前: mailto:sage [2009/02/24(火) 15:51:06 ]
>>870
Ocamlにパターンマッチがあるのは知ってましたが、これがそうだとは気づきませんでした。
詳しくありがとうございました。

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

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

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

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

875 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 21:44:44 ]
いやちゃんと考えろよ…意味を表す名前を

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

877 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 23:06:58 ]
関数型言語ML 最終話 「なまえをよんで」

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


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

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



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

882 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 21:32:47 ]
>>880
unitを返すのが分かるなんて 何て素敵な!

883 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 09:44:11 ]
>>880
>>882 の通りで、

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

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


884 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 09:11:08 ]
あるある

886 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 20:32:14 ]
ここ
alain.frisch.fr/soft.html#patches
の patch_record が凄く魅力的なんだけど、同じことを camlp4 で
できないかな。

887 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん [2009/04/08(水) 15:10:44 ]
>>879
コピペだけど

【手続き型】

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

【関数型】

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


889 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 19:53:44 ]
時間が経過すると…

【手続き型】

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

890 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 16:10:18 ]
…………ブウウ懼懼懼懼懼懼ンンン懼懼懼懼懼懼ンンンン………………。




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


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

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


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






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<224KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef