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/
350 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 13:48:50 ] >>349 怒ってため息をついてるね。w
351 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 15:38:52 ] 標準で関数型プログラミングをサポートする言語=関数型言語じゃね 標準のSTLだけだと関数型プログラミングは厳しいのでC++は入らないと思う
352 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 17:10:34 ] Q. 関数型プログラミングとは? A. 関数型言語が標準でサポートしているプログラミング
353 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 21:04:26 ] 相互再帰ですか
354 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 21:44:22 ] >>353 無限に再帰してて、止まらないわけですね、わかります。
355 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 22:08:01 ] 再帰なんて簡単だお。
356 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 22:32:21 ] >>347 >今日職場で出た話題。 どこの職場ですか?日本ですか?
357 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 00:30:58 ] let id x = xと let v = id `Aと let _ = match v with | `A -> () だけみれば`Aと`Aだからエラーにならなそうで let unify x y = if true then x else y let _ = unify v `B もみるとxとyが同じ型じゃないとエラーで`Aと`Bだからエラーになりそう でも多相バリアントだからエラーにならないみたいな。 なんか問題がわるいな
358 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 00:32:16 ] 357は>>347 へのレス 書き忘れたorz
359 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 01:16:05 ] type 'a 関数型言語 = { 変数 : 参照透過; 関数 : 高階; 型 : 代数的; } constraint 'a = 多相
360 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 08:22:31 ] >>351 個人的にはSTLがどれほど充実しようが、後付けのクロージャが qsort に渡せ ない時点で除外したい。箱庭の中だけで関数プログラミングをサポートしても、 その言語が関数型とは言い難い。どんな言語でも関数型言語を「実装」する事 は出来るので。
361 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 12:09:28 ] std::sort に渡せりゃそれで十分じゃん。
362 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 16:41:50 ] qsortのほうがずいぶん遅いしね
363 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 16:49:38 ] >>362 プラットフォームによるとqsortの方が団地に早かったりするんですが どのようなプラットフォームでお仕事をしておいででしょうか?
364 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 17:12:28 ] windows。それ、最適化してんの?
365 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 17:24:49 ] >>36 qsort() の呼び出しでは関数ポインタの呼び出しが多いから、インラインで置換するコードには負けてしまうと思います。
366 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 18:25:41 ] >>363 プラットフォームって、インライン最適化もできない糞コンパイラを使えばって話か?
367 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 18:46:20 ] あるいはstd::sortに関数ポインタを渡してるとか
368 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 20:41:28 ] おもしろいな。 関数呼び出しコスト以上に速くなる?
369 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 07:57:36 ] >>361 qsort はただの例。ライブラリの形で別言語を実装しておいて関数型でございっ てのが気に入らないってだけ。関数ポインタを要求している所に渡したり、新 しい関数ポインタのインスタンスを実行時に作れないと。
370 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 08:58:50 ] > ライブラリの形で別言語を実装しておいて 言語内の機能で実装しているんだぜ?
371 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 21:49:06 ] クロージャはファーストクラスじゃないとね
372 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 22:47:50 ] >>370 それいうとあらゆる言語が関数型を名乗れるから。
373 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 23:02:44 ] >>370 それいったらアセンブラだって関数型だろwww
374 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 06:52:47 ] つまらんんこと言っとらんでコード書け。
375 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 08:27:19 ] C++のboost:lambdaみたいなのを、 言語の本来の機能で実装できるのってないんじゃねえ?
376 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 10:04:38 ] >>375 boost.lambda 見てないんだけど Lisp のマクロ、R6RS のマクロでも無理?
377 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 11:19:19 ] 関数型は最初からラムダ式があるから必要ないのでは。 zip(list1, list2, _1 + _2) //←こんな感じ。
378 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 17:44:55 ] Boostはポリシーによるプログラミングができる (lambda (lambda (funcname)) (funcname ...)) ↑こんなイメージ。これはLISPだったらマクロなしだと実現不可能じゃない? 型システムが閉じてないことが前提だから OcamlやF#ではこれ、実現不可能だと思う //ちら裏:自分はBoostが関数型言語やろうと思ったきっかけ
379 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 17:52:12 ] >>378 マクロ書けばええやん? 言語本来の機能でっせ、Lisp のマクロは…
380 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 18:56:16 ] >>378 >LISPだったらマクロなしだと その前提が間違い。何の為の S 式だか。
381 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 22:14:56 ] すまん、今の流れでマクロなしってのは間違ってるなw しかし、マクロありでもポリシーによるプログラミングはLISPでは不可能なんじゃね? ここでS式が出てくるのはなぜ? 静的な型を持つ言語じゃないとコンパイル時型チェックの利点はなくなるし 単なるダックタイピングになってしまう 現時点では閉じていない多態かつ静的な言語って 俺が知る限りC++ぐらいしかないけど他にあるのかな Template Haskellとかどうなんだろ
382 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 22:19:20 ] >>381 >ここでS式が出てくるのはなぜ? 興味無いくせに聞くなよ
383 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 22:26:20 ] >>381 declare すりゃいい話だし、元気があればコンパイラ書き換えれば OK 型推論でも何でもできるんじゃないか?
384 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 22:28:55 ] ああ、コンパイラ作るのか・・その発想はなかったわw
385 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 21:52:19 ] >>384 つか, 処理系自体にシンタックスパーサからコンパイラまで含んでて そいつらを自前の定義に書き換え可能な言語相手に何を戦ってるんだか
386 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 23:06:06 ] >>378 すまんが、このコードで何をしてるのか参考までに教えてくれ・・・ >>385 C++に脳を冒されて、そんな言語が存在することを知るよしもないんだろう
387 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 05:23:56 ] >>339 いや、セーフだろ
388 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 07:28:36 ] 職場で出た話題。 O'Caml で、v == v は真なのに v = v は偽な値 v は存在するか。
389 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 08:16:39 ] NaN
390 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 21:55:52 ] >>375 >静的な型を持つ言語じゃないとコンパイル時型チェックの利点はなくなるし OCamlは型推論で静的な型が付くからC++並にコンパイル時型チェック働くよ 型変換がらみのバグ出づらい分むしろ安全だと思うけど。 (* てかboost:lambdaコンパイル遅すぎ *)
391 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 23:38:28 ] >>390 OCAMLだとこれに相当することができない(STLC<U>が定義済みの場合だけOCamlでも可能) C++では定義済みかどうかは関係なく宣言できる STLライクなデータに対する探索コード template <template <typename T> class STLC,typename U,typename R> bool has_data(STLC<U>&data,const R&value){ typename STLC<U>::iterator it = std::find(data.begin(),data.end(),value); if(it!=data.end())return true; else return false; }
392 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 00:30:15 ] begin(data)がイテレータ関数を戻すなら find(b,v)はdataの型と関係なく定義出来る (イテレータ関数の型には影響をうける) クロージャ使えるって忘れてない?
393 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 01:10:33 ] >>391 > 宣言できる 「定義できる」かな? 宣言ももちろんできるけど。
394 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 01:17:03 ] 念のため言っておくけど、上はあくまでどうしてもイテレータ使いたいならの話 リストは、|でパターンマッチして再帰でグルグルが普通
395 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 01:22:07 ] 要は先に定義が必要だったりはしないので、391は間違ってると思われ
396 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 01:39:44 ] >>391 の例自体は不適切かもしれんが、C++のテンプレートにできて他の殆どの言語にできないことがあるのは事実だよ C++のテンプレートの顕著な特徴は ・型検査と名前解決の一部がインスタンス化まで遅延される ・特殊化(テンプレート引数に対するパターンマッチ)ができる で、メジャーな言語でこれを備えてるのはC++の他にはDくらいしかないはず
397 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 01:55:42 ] SFINAE(Substitution Failure Is Not An Error) en.wikipedia.org/wiki/Substitution_failure_is_not_an_error
398 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 01:59:04 ] >>396 取り敢えず CL はどっちも出来るな
399 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 02:06:14 ] >>398 良く分からん CLだと引数の型が確定するのは実行時だから、テンプレートみたいなことはやりようが無いんじゃね?
400 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 02:12:17 ] GF じゃダメなん?
401 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 02:17:12 ] GFって総称関数のこと? それならやっぱり実行時ディスパッチだからテンプレートとは比較できないだろ
402 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 04:48:43 ] >>397 Boostじゃ結構使われてるけど英語しか記事無いのか
403 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 08:11:36 ] GFってgeneric functionのことだと思うけど、それだと >>401 の書いてるように、実行時の型に基づくディスパッチだから、 コンパイル時にディスパッチが行われるC++のテンプレートの特殊化 とは全然違うでしょ
404 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 08:21:47 ] 何で同じ事を2度書く?
405 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 08:48:42 ] >>403 packageとcompileで頑張れば、 同じようなものを作れないこともないなあ。 おもしろいかもね。SFINAEはCLOSっぽいね。 まあC++だって総称関数族だから当たり前か。
406 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 14:56:29 ] patter match で、 let a = "hoge" in match a with a -> "this is hoge" | "hage" -> "this is hage" | _ -> "other" みたいにして、a を "hoge" としてマッチさせることが出来ないのはどうしてなの
407 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 15:25:34 ] パタンに変数参照を書けないから。 パタン中に変数書くときは束縛になるじゃん。
408 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 15:37:05 ] あ、そうか。束縛と区別できないのか。 ありがとう でもグローバルに識別子を持っているとき 例えば root_user_name = "hoge" とかあるとして 直接 "hoge" はタイプしたくない場合 match user_name with eval(root_user_name) -> "root user" | _ -> "normal user" とか書きたくなるんだよね 単純なときは if else だけど、複雑なときに書きたくなる
409 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 19:00:31 ] つ whenキーワード
410 名前:デフォルトの名無しさん [2008/06/02(月) 19:56:37 ] match user_name with | user when user=root_user_name -> "this is root user" | "hage" -> "this is hage" | _ -> "other" で合ってる?
411 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 20:30:39 ] つ if
412 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 00:08:07 ] >409 ありがとー 知らなかった すげー恥ずかしい
413 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 02:56:54 ] >>412 かじりかけじゃしょうがないと思うからがんばれ。
414 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 08:27:09 ] パターンマッチにパターンじゃなくて式を書いちゃうのは初心者にはよくあること。 入門書は振れるべきかもわからんね。
415 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 11:13:11 ] つ 入門OCaml
416 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 19:44:14 ] 軸がぶれている
417 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 10:41:42 ] 質問です、リストの文字を全部つなげるとき List.fold_left (^) "" ["1"; "2"; "3"] とか書くとするじゃないですか でも例えばちょこっと関数を間に挟みたいとき、 let conv x = x ^ "!!" in List.fold_left (fun a b -> a ^ (conv b)) "" ["1"; "2"; "3"] とか書くのって違うのかなとか思ってるんですよ (fun a b ->a ^ (conv b)) の部分をもっとこう関数の合成みたいな感じで短く書く方法ってないですかね
418 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 12:19:57 ] 十分簡潔に書けていると思う。わかりやすいし。 なぜそんなに短さにこだわる?
419 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 12:31:55 ] 質問の趣旨とずれているが、そもそも (^) を fold するのはお勧めできない。 文字列コピーが多すぎるから。String.concat とか、 Buffer を使うべし。 上の例は、 String.concat "" (List.map conv ["1"; "2"; "3"]) これで十分だろう。(^) を使うなら417で十分。無理に短く書いて喜ぶ言語ではない。
420 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 12:36:50 ] ,,,,,,,,,,,,,,,,,,,,,,,,,, /": : : : : : : : \ /-─-,,,_: : : : : : : : :\ / '''-,,,: : : : : : : :i /、 /: : : : : : : : i ________ r-、 ,,,,,,,,,,、 /: : : : : : : : : :i / L_, , 、 \: : : : : : : : :i / λ抽象したら /●) (●> |: :__,=-、: / < 負けかなと思ってる l イ '- |:/ tbノノ \ l ,`-=-'\ `l ι';/ \ ヽトェ-ェェ-:) -r'  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ヾ=-' / / ____ヽ::::... / ::::| / ̄ ::::::::::::::l `──'''' :::|
421 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:08:51 ] >>417 俺だったら先にmapする
422 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:42:08 ] 俺はconvを2引数にしてこんな感じにするかな List.fold_left conv "1" ["2"; "3"]
423 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 21:29:56 ] ありがとうございました Buffer は知ってたけど、String.concat は知りませんでした map 先にやって、String.concat で書くことにします
424 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 23:34:58 ] OCamlでファイルIOするときUnix.lseekとかが file_descr -> int -> seek_command -> int でintで足りない場合が多々あるかと思うのですが、 皆さんは大きなファイルのIOをするときはどうしてますか? オフセットの計算とかも Int64.add pos (Int64.mul index 4L) みたいにしてやってますか?
425 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 01:20:52 ] Unix.LargeFile おまいら、ライブラリ関数で迷ったらまず .mli 読むか、grep するか、 ocamlbrowser でも使えよな。
426 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 01:34:33 ] >>425 おお、ありがとうございます!
427 名前:デフォルトの名無しさん [2008/06/08(日) 17:22:38 ] >>424 31bitがだめなら63bitがあるじゃない。 # 0xffffffff;; - : int = 4294967295
428 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 00:54:23 ] >>427 つまらん
429 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 18:32:15 ] 質問。関数型言語の特徴の一つとしてパターンマッチって出てくるけど何が利点なの? ifの構文糖衣のようにも思えるけど
430 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 19:07:00 ] 簡潔に書ける
431 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 19:48:17 ] >>429 もしパターンマッチがないとすれば、代数的データ型から値を取り出したい場合はどうする? たとえばHaskellのMaybe型のJust 3という値から、3という値を取り出したい場合はどうする?
432 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 20:25:17 ] それはアクセス関数が自動生成されるようにすれば済む話じゃないか
433 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 20:39:02 ] >>429 構文糖には何も利点がないとでも?
434 名前:デフォルトの名無しさん [2008/06/12(木) 22:33:33 ] 安全なダウンキャストができることとか?
435 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 22:41:54 ] >>434 x + yって中間記法、よく出てくるけど何が利点なの? (+ x y)の構文糖衣のようにも思えるけど
436 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 22:42:53 ] >>432 具体的に実装するとすればどうしますか? MaybeにはNothingという値もあるんですよ。
437 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:11:58 ] >>436 入力が不適なら例外発生
438 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:24:50 ] >>437 Maybeは代数的データ型のひとつの定義に過ぎませんよ。 Just aとNothing以外にHogeという値がある別の定義があったらどうするんですか? 定義はいくらでも作れますよ。
439 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:37:45 ] >>438 言っている意味が分からん アクセサの自動生成はHaskellが既にやってること(フィールドラベル使ったときに)だし、技術的な問題はないと思うんだが
440 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 03:16:09 ] パターンマッチの利点: 簡潔 - 記述しやすい (accessors (or deconstructors) for free) 安全 - non exhaustiveness check 速度 - 分岐が集約されているので最適化が楽 (ifの繰り返しを解析するのにくらべて) 以上。他にあるかな? (というか、そもそもパターンマッチは関数型言語の特徴ではありません。 関数型言語が採用しているADTの特徴というべきでしょ。)
441 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 03:29:17 ] 問題 パターンマッチを採用している手続き型言語を挙げよ
442 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 05:12:14 ] awkはパターンマッチなのかな
443 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 08:15:48 ] マセマティカ 項書換えシステム全般 (論理型も含む)
444 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 08:24:46 ] Scalaはcase classがある。 パターンマッチ渡しはできないが、match case文がある。 www.scala-lang.org/intro/caseclasses.html Extractorはユーザ定義もできる。 www.scala-lang.org/intro/extractors.html
445 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 00:12:39 ] SML#はもう開発止まっちゃったの?
446 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 13:51:28 ] F#(OCAML系)があるしなあ。 JNI(Java Native Interface)の中の人は、 SML/NJのWin32対応をやっていた人だった。 Modular Monadic Semanticsの人。
447 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 17:39:37 ] メンバがわりと沢山ある構造体(record)がいくつか必要な時は皆さん メンバの名前が被らないように注意してレコード作ってますか? それともクラスにしますか?
448 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 21:15:11 ] >>446 何か勘違いしていると思われ
449 名前:デフォルトの名無しさん [2008/06/16(月) 21:15:42 ] F#があるのとSML#関係なくね?SML.NETの存在は微妙かも知れんけど
450 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 21:18:34 ] >>447 モジュール名で区別でおk OCamlでオブジェクトの濫用はお勧めできない
451 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 22:45:23 ] SML#の「#」は、.NETよりも歴史が長い
452 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 22:45:43 ] プロジェクト期間終了したから取りあえず一息つきたいんじゃないの? O堀さんのことだからこれで終りとは思えないが。
453 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 03:18:35 ] >>450 おお、目から鱗ですありがとう! このスレは勉強になります。。 俺もできるならクラスは使いたくなかったので助かりましたわ。
454 名前:デフォルトの名無しさん [2008/06/22(日) 02:24:57 ] SML♯で,配列 data[](要素数 n)と int型の i,j を引数にとって, 要素 data[i] と data[j] を入れ替えた配列 を出力する関数 ってどうやればいいんかいな?
455 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 22:44:31 ] 宿題ですか?
456 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 23:37:58 ] OCamlのStream便利だな。。。何でもかんでもコレ使いたくなっちゃうわ。 何かマズいことあるのかな?
457 名前:デフォルトの名無しさん [2008/06/23(月) 01:54:09 ] マズいことはないけど破壊的なのがなにかと使いにくいと思う。
458 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 01:56:52 ] >>457 つまりHaskell最高ってことか?
459 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 02:57:29 ] ほとんどのデータがint縛りっていうか、31bit制限があるところがツラいと思うんですが、 色々と工夫というかテクがあるなら教えて頂きたいです。
460 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 06:54:26 ] >>456 人生、これストリームなり
461 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 12:22:57 ] [1;2;3;4]を入力すると[1;3;6;10]を返す関数sigmaを書いたんですが sigma関数の箇所、もっと効率的なやり方があるような気がしてむずがゆい感じがしてます。 何かアドバイスいただけないでしょうか let iota n = List.init n ((+)1) in let sum lst= List.fold_left (+) 0 lst in let rec take n lst = match n with 0 -> [] | 1 -> [List.hd lst] | _ -> (List.hd lst)::take (n-1) (List.tl lst) in let sigma lst = List.rev (List.fold_left (fun x y->sum (take y lst)::x) [] (iota (List.length lst))) in sigma [1;2;3;4;5;6];;
462 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 13:13:09 ] 累積変数で、これまでの和を持ち運ぶ
463 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 14:45:07 ] ありがとう。こんな感じですかね (途中まで同じ) let sigma lst = let accum = ref [] in List.rev (List.fold_left (fun x y-> accum:=y::!accum; sum !accum::x) [] (iota (List.length lst))) in sigma [1;2;3;4;5;6];;
464 名前:デフォルトの名無しさん [2008/06/23(月) 15:38:22 ] えー。「ここまでの結果」を「引数で」持ちまわるんだよ。再帰終了するところでその引数をそのまま返す。
465 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 15:59:00 ] んー、持ち回る引数がfoldの中なので、プログラム全体の形、結構変わりますよね? こういった変換は慣れていないので、ちょっと時間がかかりそうです
466 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 17:53:21 ] iotaとかsumとかtakeとかを使わないで、さらにfoldにこだわらなくて、かつ再帰を使っていいなら こんなのはどうっすかね? let sigma l = let rec sigma' cur r = function | [] -> List.rev r | x::xs -> let next = cur + x in sigma' next (next :: r) xs in sigma' 0 [] l # sigma [];; - : int list = [] # sigma [1;2;3;4;5;6];; - : int list = [1; 3; 6; 10; 15; 21] foldとかを使ったもっとElegante"〜{エレガンテ}〜"な方法を希望ならスマソ。
467 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 20:17:29 ] こんな感じ。 reverse $ snd $ foldl (\(a,xs) b -> let x = a + b in (x,x:xs)) (0,[]) Haskellの構文を使ってるがMLでも同様のはず。
468 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 20:21:41 ] pairにする必要ないんじゃ… tail $ reverse $ foldl (\a b -> (head a + b):a) [0]
469 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 20:37:13 ] >>468 おお、こういうのがノータイムで出てくるようになりたいわ。
470 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 21:44:56 ] let sigma lst = let rec sum lst = match lst with | [] -> [] | car :: cdr -> (List.fold_left (+) 0 lst) :: (sum cdr) in List.rev (sum (List.rev lst));; こんなんどうでっしゃろ?
471 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 21:48:14 ] >>467-468 おまいらHaskell大好きだなwwwww
472 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 22:44:06 ] MLの構文を知らずにこのスレを覗いてる奴が結構居ると予想
473 名前:デフォルトの名無しさん [2008/06/23(月) 22:46:14 ] 関数の中ですぐmatchするのってfunctionで書き直しちゃいたいんだけど。
474 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 23:08:55 ] let sigma l = let rec aux store = function | [] -> [] | x::xs -> x+store :: aux (x+store) xs in aux 0 l これでok。末尾再帰じゃないけど。な。
475 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 23:31:25 ] うおお、皆さんありがとう! いろんなやり方があって勉強になります
476 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 23:39:06 ] let ($) g f x = g (f x) let sigma = (fun s -> rev $ fold_left (fun ys x -> s := x + !s; !s::ys) []) (ref 0)
477 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 23:43:15 ] let (@@) f x = f x let sigma l = (fun s -> rev @@ fold_left (fun ys x -> s := x + !s; !s :: ys) [] l) @@ ref 0
478 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 23:47:55 ] let sigma = tl $ rev $ fold_left (fun ys x -> hd ys+x :: ys) [0]
479 名前:Haskell 修業中 mailto:sage [2008/06/24(火) 04:32:12 ] すんません。まさに >>472 なんですが…。 import List sigma = tail.(scanl (+) 0)
480 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 21:58:08 ] 対象かアーキュムレータの頭を累積値として利用する手もある。 let rec sigma = function | [] -> [] | hd::[] -> hd::[] | x::y::tl -> x::(sigma (x+y::tl));; let sigma_rev l = List.fold_left (fun acc hd -> match acc with | [] -> hd::acc | last::_ -> hd+last::acc) [] l;;
481 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 23:31:17 ] >>479 tail . (scanl (+) 0) ↓ scanl1 (+) でおっけ
482 名前:Haskell 修業中 mailto:sage [2008/06/24(火) 23:48:01 ] >>481 おおっ!そんなのがあるんですね。 やっぱ、Haskellすごいわ スペースを入れてもわずか10文字w
483 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 01:45:08 ] 意味不明なライブラリ関数の海で遊んで溺れかけているHaskellianにしか見えない。 逆に、OCamlには関数なさすぎ砂漠なわけだが。
484 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 17:36:09 ] Haskellそこらじゅうで大人気だな。 ム板住民の半分はHaskell(かRuby)好きなんじゃないかと思えてくるわ。 OCamlはデフォルトでは関数も文法も少ないけど自分で定義しなさい、みたいな所がCっぽくて好き。 let scanl1 f = function | [] -> [] | (x::xs) -> scanl f x xs let scanl f x y = List.rev (List.fold_left (fun a b -> (f (List.hd a) b) :: a) [x] y) で scanl1 (+) [1;2;3;4];; ってできるし。 HaskellとOCamlの差が出てくるのはやっぱりIOとかかね。
485 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 18:20:16 ] refを沢山使うprogramをHaskellで書くのは大変。 Ocamlで書くのが大変なのは…特にないな。遅延計算くらいか。
486 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 18:34:02 ] ファイルを順々に読んでいく、みたいのはHaskellだと遅延評価だから普通のリストと同じように出来るけど、 OCamlだとバッファリングするとかストリームとか多少は副作用がある方法を使わなきゃいけないかなー。 まあ他の言語ではみんなそうしてるから特に抵抗は無いが。
487 名前:Haskell 修業中 mailto:sage [2008/06/26(木) 18:35:15 ] >>485 Streamって遅延計算じゃないんですか?
488 名前:Haskell 修業中 mailto:sage [2008/06/26(木) 18:37:26 ] あっ、かぶったw やっぱりStream使うんですね。
489 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 18:56:37 ] Streamはかなり便利だけど、 Haskellでは通常のリスト操作みたいに出来るっていうのはやっぱり魅力だよな。 使い方にもよるがソースがStream.junk ();とかだらけになるのは美しくないので避けたい。
490 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 20:28:23 ] >>485 たとえば? 俺がHaskellですっきり書いてやるよ。
491 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 18:43:09 ] ocamlcってgccの-O0みたいなオプションないのかな というかこんなことを平気で聞いてもよさげな初心者スレないのかな
492 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 22:56:35 ] というかこんな意味不明なこと平気で聞くなよ。 kwsk
493 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 01:38:52 ] >>492 ocamldebugを使ってみた ↓ Eventなのに止まらないだと・・・? ↓ きっとコンパイラが最適化してるからだ! ↓ ocamlのコンパイラって最適化無効にするオプションないのかな←今ここ ocamldebugのstep実行で止まるはずのポイント飛ばされたり、 プロファイラで使われているはずの関数が未使用と判定されたり、 言語以前にツールの使い方覚えるとこで俺\(^o^)/
494 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 02:23:23 ] 全然初心者的内容じゃねーじゃん。ocamlc (ocamloptもそうだが) は 最適化みたいなことはほとんどしてないんで。書いたとおりに実行するよ。 優秀なOCamlプログラマを大勢知っていますが、大多数はデバッガの必要を感じていません。 俺もデバッガは使わないので何ともいえんが、何か使いかたを過っているか、 camlの評価順なぞを未理解なのではないかと思われ…
495 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 03:05:49 ] >>490 ICFP PC 2007の問題とかどうよ? RNA実行するだけでも副作用なしだと大変じゃないかな
496 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 05:35:04 ] >>494 皆使ってなかったのか・・・ ソース解析する際流れ追うのに使えるかと思ったんだが >何か使いかたを過っているか、 >camlの評価順なぞを未理解なのではないかと思われ… どっちも怪しいのでもちっと勉強してくる
497 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 10:30:39 ] >>494 そういうのって全部ログコードはいてチェックするんですか?デバッグとそういうやり方併用してるけれど全部それだとチョイきつそう。
498 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 14:39:27 ] コードを綺麗に書けば、printf デバッグと、十分なユニットテストで 大抵バグは潰せる。 デバッガでちまちまやる前に、assertion と Printexc.get_backtrace でかなりのことはわかるはずだが。 Cのデバッガのように必須だという認識の人は少ないと思われ。 もちろん使うなとは言わん。ocamldebugはリプレイとか強力。
499 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 23:12:07 ] >>498 cの場合は破壊的操作と非破壊的操作をあまり意識せずにプログラミングすることもあるから 余計に必要になってくるのではないか?それに、小さな関数の定義を作って大きくするより、 一つでまとめて操作すると言う習慣も影響してるかも。
500 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 23:45:19 ] Cは(普通は)インタプリタがないからっていう部分も大きいと思う。
501 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 03:08:23 ] ちょっとcodepadが使えるのか試してみたよ。 codepad.org/14IrPYhB
502 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 03:21:42 ] C は REPL が無いからね
503 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 20:22:57 ] lisp的なREPLを備えたC環境なんてないよな。確かに… あってもいいんだけど。
504 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 20:55:26 ] gdbは?
505 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 20:58:08 ] そういえばこんなのがあったの忘れてたわ。 C-REPL neugierig.org/software/c-repl/
506 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 20:58:59 ] Haskell製か
507 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 22:53:12 ] >>504 >Cのデバッガのように必須だという認識の人は少ないと思われ。 だから普通はそういう事なんだろうなww まあgdbではlispとかcamlとかみたいに書いて即テストって訳にはいかないがgdbは便利だよな。
508 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 03:43:57 ] >>454 亀だがちょうど最近覚えたので確認のために fun swap (date,i,j)= let val a = Array.sub(date,i) val b = Array.sub(date,j) in Array.update(date,i,b); Array.update(date,j,a) end localでArrayをopenしておいたほうが綺麗かも
509 名前:デフォルトの名無しさん [2008/07/22(火) 18:35:13 ] すんまそん、Ocamlで日本語文字は扱えませんか? 例えば正規表現なんかでも使いたいんですが。
510 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 20:41:48 ] OCamlのstring型は任意のバイナリが入るので、標準入力とかファイル経由で扱うなら 日本語でもなんでもあり。 ただし、OCamlのソースコードに日本語を埋め込みたいなら、EUC_JP以外使えないと思う。 EUC_JPなら、普通にperl互換正規表現ライブラリのラッパーが使える。 pcre-ocaml.sourceforge.net/ データをUNICODEとして扱うなら、Camomileで日本語「文字」を扱えますね。 camomile.sourceforge.net/index.html.ja.jis あと、正規表現で日本語を扱う問題はOCamlに限らずどれでも一緒なので、 www.din.or.jp/~ohzaki/perl.htm あたりをどうぞ。
511 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 22:03:32 ] 最後のURLは、perlのやり方としては古くて、 (今や\p{Hiragana}という風に"script"を文字クラスとして指定できるので) 「どれも一緒」というよりも、Ocamlだとこのやり方が有効って事になると思います。
512 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 22:16:11 ] UTF8 で書いて pcre-ocaml の `UTF8 オプションを使え。あと camomlile。以上。
513 名前:デフォルトの名無しさん [2008/07/23(水) 22:25:46 ] MLtonのFFIを使って、Cのmain関数からSMLを呼びたいのだが、これは 不可能?
514 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 15:52:08 ] www.cs.caltech.edu/courses/cs134/cs134b/book.pdf こんなのをみっけたけど、ゆうめいなん?
515 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 08:08:15 ] OCamlの入門記事 ttp://indori.blog32.fc2.com/blog-entry-223.html
516 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 16:19:54 ] 何よりもピヨが気になる
517 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 08:38:28 ] >>515 入門記事というより、入門している記事
518 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 08:51:30 ] >> 514 数ヶ月前に見たので、うろ覚えだけど、optional arguments や polymorphic variants が かなり早期に出てくる。そういう点では、こういう新しい機能をおまけとして解説してきた、 「OCaml を使ってプログラミングを学ぶ」本とは毛色が違い、より OCaml 自体を学ぶ事に 重点が置かれている。class についても最後にかなりページ数が割かれている。
519 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 09:07:36 ] >> 518 続き そういうわけで、ひととおり関数型言語のコンセプトについて理解した人には OCaml リファレンスとしていいんじゃないかと思う。
520 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 10:11:59 ] >>519 解説ありがとう。なるほど他言語をやっていて、始めようとする人向きだということが 分かりました。
521 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 00:31:48 ] >>515 Winでパフォーマンス落ちるのはバイトコードの話でしょ? ネイティブなら問題ない
522 名前:デフォルトの名無しさん [2008/08/24(日) 14:59:04 ] smlからsml#に移行しようとしてるんだけど, 型エラー(?)が出て実行できないのがある. 誰か助けて... 次のレスにエラーが出るプログラムを貼ります.
523 名前:522 mailto:sage [2008/08/24(日) 15:00:46 ] リストを使った集合演算のプログラムです. (他にもエラーが出るプログラムはあるのだけど, とりあえずある中で一番小さいもの) まずはシグネチャ signature SET = sig eqtype 'a Set exception EmptySet val emptyset : 'a Set val elem : 'a Set -> 'a * 'a Set val member : ''a -> ''a Set -> bool val add : ''a -> ''a Set -> ''a Set val map : ('a -> 'b) -> 'a Set -> 'b Set val allelem : ''a Set -> (''a * ''a Set) Set val fromList : 'a list -> 'a Set val toList : 'a Set -> 'a list end;
524 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 15:01:24 ] ■■学校を作ろう!■■ VIP発でサイトを作ろうと思うんだ。(詳しくはWikiを見てくれ) パートスレになるんでパー速(GEP)に移動している。 今スタッフを募集しているから、来てくれないか? ■Wiki www36.atwiki.jp/vipvipschool/ ■募集スタッフ プログラム担当(特にErlang、Perl) デザイナー(サイト上のアイコン、ロゴなど) WEBデザイナー(サイトデザイン案に沿って、htmlやCSSを書ける) 他にも宣伝担当なども募集している。 ■スレ ex14.vip2ch.com/test/read.cgi/news4gep/1219068297/
525 名前:522 mailto:sage [2008/08/24(日) 15:02:24 ] 次はストラクチャ(の一部) structure Set :> SET = struct type 'a Set = 'a list; exception EmptySet; val emptyset = []; (* Compute a pair of the element of input lists and rest set *) fun elem [] = raise EmptySet | elem (x::xs) = (x,xs); (* Check whether x is an element of a set *) fun member _ [] = false | member x (y::ys) = (x = y orelse member x ys);
526 名前:522 mailto:sage [2008/08/24(日) 15:05:15 ] (続き) (* Add an element to a set *) fun add a A = if member a A then A else a::A; val map = List.map; (* Compute {(a,A \ {a}) | a \in A} *) (* where A is an input set *) fun allelem A = let val (b,B) = elem A in add (b,B) (map (fn (c,C) => (c, add b C)) (allelem B)) end handle EmptySet => emptyset; fun fromList l = l; fun toList l = l; end;
527 名前:522 mailto:sage [2008/08/24(日) 15:09:53 ] で,以下を実行するとエラーが出ます. (SMLでは大丈夫だった) Set.toList (Set.allelem (Set.fromList [1,2,3,4,5])); エラーは以下のとおりです. Diagnoses: stdIn:12.1-12.49 Diagnosis(typecheckExp 12): expression type and annotation don't agree expression type: (int * int Set.Set) Set.Set -> (int * int Set.Set) list annotation: (int * int Set.Set) Set.Set -> (int * int Set.Set) list stdIn:12.1-12.49 Diagnosis(typecheckExp 16): opetator and operand don't agree operator type: (int * int Set.Set) Set.Set -> (int * int Set.Set) list operand types: (int * int Set.Set) Set.Set stdIn:12.1-12.51 Diagnosis(typecheckExp 12): expression type and annotation don't agree expression type: (int * int Set.Set -> expression) -> (int * int Set.Set) list -> expression annotation: (int * int Set.Set -> expression) -> (int * int Set.Set) list -> expression stdIn:12.1-12.51 Diagnosis(typecheckExp 16): expression type and annotation don't agree expression type: int * int Set.Set annotation: int * int Set.Set stdIn:12.1-12.51 Diagnosis(typecheckExp 12): expression type and annotation don't agree expression type: int Set.Set -> expression annotation: int Set.Set -> expression
528 名前:522 mailto:sage [2008/08/24(日) 15:11:46 ] (エラー続き) stdIn:12.1-12.51 Diagnosis(typecheckExp 16): expression type and annotation don't agree expression type: int * int Set.Set annotation: int * int Set.Set stdIn:12.1-12.51 Diagnosis(typecheckExp 16): opetator and operand don't agree operator type: int Set.Set -> expression operand types: int Set.Set stdIn:12.1-12.51 Diagnosis(typecheckExp 16): opetator and operand don't agree operator type: (int * int Set.Set -> expression) -> (int * int Set.Set) list -> expression operand types: int * int Set.Set -> expression
529 名前:522 mailto:sage [2008/08/24(日) 15:13:41 ] (さらに続き) stdIn:12.1-12.51 Diagnosis(typecheckExp 16): opetator and operand don't agree operator type: (int * int Set.Set) list -> expression operand types: (int * int Set.Set) list stdIn:12.1-12.51 Diagnosis(typecheckExp 12): expression type and annotation don't agree expression type: (int * int Set.Set) list -> expression annotation: (int * int Set.Set) list -> expression stdIn:12.1-12.51 Diagnosis(typecheckExp 16): opetator and operand don't agree operator type: (int * int Set.Set) list -> expression operand types: (int * int Set.Set) list BUG :invalid type
530 名前:デフォルトの名無しさん [2008/08/25(月) 02:01:56 ] 数学における記法の話です 大学入試の問題文の冒頭で 「f(x)=x^3+3x^2とする」とあるのですが この=はC言語と同様に、右辺の関数にfという名前を付けるという 意味での=つまり;=のことでしょうか?
531 名前:デフォルトの名無しさん [2008/08/25(月) 02:06:58 ] C言語では関数に名前をつけるときに=を使わないのでは?
532 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 02:59:26 ] >>530 関数型言語MLについて語るスレッドです。
533 名前:デフォルトの名無しさん [2008/08/25(月) 04:08:36 ] >>532 すみません、これだけでいいので分かる方いたら教えてください
534 名前: mailto:sage [2008/08/25(月) 05:21:23 ] WindowsでOCamlを使うには、「MinGW」もしくは「Microsoft Visual C++ and Microsoft Assembler」が必要になります って読んだんだけどOcamlのコンパイラってCへのトランスレーターなの?
535 名前:デフォルトの名無しさん [2008/08/25(月) 07:18:20 ] アセンブラでsho
536 名前: mailto:sage [2008/08/25(月) 16:19:07 ] アセンブラですか。どうもありがとう。
537 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 17:17:37 ] >>530 夏休みも終わりだねえ
538 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 23:17:08 ] >>522 閑古鳥の鳴いてるメーリングリストを活性化するために話題を投げてくれ
539 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 20:17:38 ] >>522 SML#のバグじゃないかな・・・? 次回アップデートに期待としか。
540 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 08:46:12 ] eigenclass.org/hiki/fp-ocaml-koans
541 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 08:51:16 ] warota
542 名前: 061123251194.cidr.odn.ne.jp mailto:sage [2008/09/19(金) 18:58:37 ] よいコンパイラの教科書(当然関数型)があれば紹介してください。和英こだわりません。
543 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 19:00:51 ] まずはnavi2chのスレをみたほうがいいかもしれない
544 名前: 061123251194.cidr.odn.ne.jp mailto:sage [2008/09/19(金) 19:05:21 ] そのようですね。
545 名前:542 [2008/09/19(金) 19:29:56 ] おさわがせしました。昔の navi2ch がパスに残っていた、、、ダサいな
546 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 19:31:39 ] ところで、 ・処理系を関数型言語で書きたい ・関数型言語の処理系を書きたい どっち?
547 名前:542 [2008/09/19(金) 19:38:53 ] コンパイラを書きたい、ですね。(多分書かないけど)
548 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 19:44:24 ] ワラ
549 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 20:24:30 ] や、だから ・コンパイラを関数型言語で書きたい ・関数型言語のコンパイラを書きたい のどっちなのかということですよ
550 名前:デフォルトの名無しさん [2008/09/19(金) 21:16:48 ] MLでコンパイラの教科書って有名なの1冊しかないんじゃないの? いいかどうかは知らない。
551 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 21:25:48 ] 洋書で青い表紙で虎のやつのこと?モダンなんちゃらだっけ? EOPLはschemeでML処理系を作るやつだったよね
552 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 21:27:18 ] 「Modern Compiler Implementation In ML」かな… 持ってるけど、読んでない…
553 名前:デフォルトの名無しさん [2008/09/19(金) 22:41:49 ] まだモダンなのかなぁ
554 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 23:00:15 ] 近代はずっと近代。もっと新しいのは現代。
555 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 11:27:06 ] 計算機の本で「コンテンポラリー」を名乗ったものって記憶にないなぁw なんかあったっけ?
556 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 11:54:33 ] まだポスト・モダンが出現してないから。
557 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 12:10:11 ] 学会のサブタイトルなら見たことある。
558 名前:デフォルトの名無しさん [2008/09/20(土) 17:03:51 ] GODIがインストールできない。bootstrap_stage2で失敗する。 ~/Desktop/godi-rocketboost-20080630$ sudo ./bootstrap --prefix /usr/local/godi ... Bootstrap was successful! ... Selected GODI section: 3.10 ... ~/Desktop/godi-rocketboost-20080630$ PATH=/usr/local/godi/bin:/usr/local/godi/sbin:$PATH ~/Desktop/godi-rocketboost-20080630$ export PATH ~/Desktop/godi-rocketboost-20080630$ sudo ./bootstrap_stage2 .: 1: godi_confdir: not found Error: Command fails with code 2: /bin/sh Failure! ~/Desktop/godi-rocketboost-20080630$ なんでだろう。 ttp://d.hatena.ne.jp/keita_yamaguchi/20080313/1205419732 の言う通り3.10に対応してないのだろうか? それとも根本的なところを勘違いしてる? OCaml初心者ですが、GODIが必要です。
559 名前:デフォルトの名無しさん mailto:sage [2008/09/23(火) 09:30:04 ] > OCaml初心者ですが、GODIが必要です。 この前提が、なんか、もう。
560 名前:デフォルトの名無しさん mailto:sage [2008/09/27(土) 19:06:57 ] NumとかBig_intのプリンタが欲しいとか?
561 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 10:13:03 ] たかがそんなもののために GODI が必須で、 GODI がインストールできないから使えない、というのは間違ってますね。 逆に、GODI 依存ユーザからお前のライブラリ GODI にポートしろとか 当然のように言われるのも迷惑です。
562 名前:デフォルトの名無しさん [2008/09/29(月) 21:15:32 ] OCamlってライブラリ関連でコミュニティの足並みそろってないせいで言語の良さがかすんじゃってる感ある。
563 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 11:52:19 ] 足並み揃えて大きな標準ライブラリ作ればって話は昔からあるし、今もOCamlForgeとかでやってるけど、なかなか成果が出ない。 なんでだろう?
564 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 13:34:01 ] これからはHaskellだから
565 名前:デフォルトの名無しさん [2008/10/01(水) 16:14:10 ] windowsXPを使っていて、ML言語を使えるようにしたいので、インストール方法をどなたか教えていただきたいのですが・・・
566 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 16:17:28 ] じゃ、f# がいいんじゃない? インストーラーがあるよ
567 名前:デフォルトの名無しさん [2008/10/01(水) 19:53:20 ] OCamlにだってWindowsのインストーラくらいはさすがにある。
568 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 23:00:11 ] >>567 コンパイルできないやつか コンパイルしても動かないやつしかない
569 名前:デフォルトの名無しさん [2008/10/02(木) 08:45:56 ] >>565 cygwin入れれば標準でocaml入ってるよ。
570 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 14:34:32 ] cygwin入れるならデュアルブートか仮想化するなぁ…
571 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 04:07:14 ] SML#はプロジェクトのページにインストールから簡単なプログラミングまでチュートリアルがあったはず
572 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 12:52:15 ] >>565 こーゆー時のためにocaml.jp/ です。 OCamlのインストール方法からチュートリアルまで揃ってますよ。
573 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 15:53:52 ] 相変わらずマルチバイト扱いにくいね
574 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 17:01:09 ] 使い方がさっぱりわからないunicodeライブラリならあるよ
575 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 00:03:39 ] >>574 それ扱いやすいって言わないよ〜 orz 普段使いで文字列扱うせいでこまるんだよな、言語自体好きなのに。
576 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 09:44:20 ] 日本語でおk
577 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 11:30:36 ] ocamlのコンソールの使いにくさは異常。 pythonならC-b, C-fでカーソルの移動ができたり、 emacsの標準的なキーが使えるから気軽にコンソールでためせる。
578 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 11:58:55 ] >>577 ledit使え、と思ったらなんか終わってるらしい。 どうしたものか...
579 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 12:01:10 ] rlwrap
580 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 12:14:31 ] inf-caml使えばいい
581 名前:577 mailto:sage [2008/10/06(月) 13:12:12 ] みなさんありがとうございます。 ためして見たところrlwrapを使うことにしました。 すごいです!!ありがとう!
582 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 21:34:32 ] >>578 >ledit使え、と思ったらなんか終わってるらしい。 え、終わってるって、どういうこと? 俺、ledit 使ってるけど
583 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 12:19:07 ] >>582 ledit終了 でぐぐるとトップに出てくるブログに書かれてる情報絡みのことじゃないかと
584 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 11:03:05 ] 3.11 のブランチ release311 が ocaml-cvs に出来ました。おそらくもうすぐリリースですね。 3.11 の目玉 * native判のモジュールの dynamic link * private abbreviation type * Printexc.print_backtrace 等、デバッグに役立ちそうな backtrace 系関数数種 * ocamlnat: native の toplevel (デフォルトでは作らないそうな)
585 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 12:12:17 ] >native判のモジュールの dynamic link これって既に10で出来るようになったんじゃなかったけ? と思ったら、今は dynlink.cmxa をリンクしないといけないのか これは便利だな
586 名前:デフォルトの名無しさん [2008/10/10(金) 12:01:15 ] 法政大学の児玉先生の所におかれている yk.i.hosei.ac.jp/library/hosei/seminar/caml/miniml/minicaml.sml をいまどきのSMLNJで動かすにはどう変更したらよいでしょうか. ord(#"0")はすぐわかりましたが,lookaheadなどがcharを期待してして いるのが仕様変更になったようで,elem をどうやってやればcharで 使えるのかが判然としません.
587 名前:デフォルトの名無しさん [2008/10/15(水) 09:18:45 ] OCamlの次世代デファクトスタンダードライブラリを目指すBatteriesがα1をリリースしたらしい。 dutherenverseauborddelatable.wordpress.com/2008/10/11/ocaml-batteries-included-version-alpha/ 一応前から内容は見ていて、OCamlのベースライブラリをモダンな階層構造に再編集しているのはすばらしいと思う。 ただ、ちょっと既存の外部ライブラリに頼りすぎていて、枝葉になるほど寄せ集め感が否めないのが気になる。 将来これに一本化されていくのかなー?私もこれに乗るのかどうか、今悩み中。
588 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 15:52:01 ] 過疎ってるからって hatena からそのままコピペするのはよそうよ
589 名前:osiire mailto:sage [2008/10/15(水) 19:04:27 ] 誰ですか、私のエントリーをコピペしたのは。 別にいいですけど、一人称くらい変更してくれてもいいのに。
590 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 21:49:05 ] 3.11の目玉の一つの、private abbreviation type って何でしょか? private typesでもなくprivate row typesでもない、なにか?まぎらわしー。
591 名前:デフォルトの名無しさん [2008/10/26(日) 20:54:39 ] 過疎ってるから 俺がocaml勉強日記を書いてあげようか? わからないことがあったら答えて下さいね!
592 名前:デフォルトの名無しさん [2008/10/26(日) 23:04:30 ] 断る
593 名前:デフォルトの名無しさん [2008/10/26(日) 23:12:42 ] 面白くなりそうだったらいいよ。
594 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 23:21:06 ] >>591 おう、かいてたらいいよ。
595 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 10:53:31 ] module M : sig type nat = private int val nat_of_int : int -> nat val int_of_nat : nat -> int end = struct type nat = int let nat_of_int n = (assert (n >= 0)); n let int_of_nat n = n end
596 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 15:21:06 ] >>595 レスどうも。 この例は、signatureでtype natとして隠蔽した場合と何が違うのでしょう? 試してもprinterが<abstr>になるかどうかくらいしか違い分かりませんでした。 どういう利用法があります?
597 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 15:53:58 ] ぐぐったらあったorz ↓ ttp://d.hatena.ne.jp/camlspotter/20081027/1225076108 subtypingとは気づかなかった。
598 名前:デフォルトの名無しさん [2008/11/01(土) 12:46:43 ] nullとnilの違いを教えてください。
599 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 13:20:42 ] null:物の表面に液や塗料をなすりつけること。 nil:食物を、水または調味料を加えた汁に入れて加熱し、食べられる状態にすること。
600 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 14:51:15 ] >>599 ttp://pc11.2ch.net/test/read.cgi/tech/1203474071/l50
601 名前:デフォルトの名無しさん [2008/11/02(日) 02:49:24 ] SMLにおいて、nullとnilの違いを教えてください。
602 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 02:53:01 ] nilは空のリスト。 nullはListストラクチャーの、リストを受け取りnilかどうかをboolで返す関数。
603 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 03:21:30 ] nullp
604 名前:デフォルトの名無しさん [2008/11/02(日) 03:35:53 ] >>599 ウケ狙いなら、残念。もう一ひねりホシイ。
605 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 07:43:26 ] ウケ狙いならって・・・ 他に何があるというのか小1時間(ry
606 名前:デフォルトの名無しさん [2008/11/04(火) 06:30:51 ] 独学でSMLの本を使いながら関数言語を学んでいるのですが、上手くできない問題があり困っています。 replicate(4); と打つと、 val it = [1,2,2,3,3,3,4,4,4,4] : int list といった感じに1を一つ,2を二つ、3を三つ、4を四つといったリストを 出力されるSMLのリカーシブメソッドを書きたいのですが、上手く行きません。分かる方教えていただけると助かります。
607 名前:デフォルトの名無しさん [2008/11/04(火) 07:09:08 ] うまくいかなかったやつを載せてみてよ。
608 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 08:14:40 ] >>606 リカーシブメソッドっていうのが何を差してるのか分からないけど、 入力: 自然数n 出力: 要素が全てnで長さnのリスト とするサブ関数使えばいいんじゃない?
609 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 08:21:09 ] n [1,2,3,...,n] [1,22,333,...,n,n,n,n,] の二行目から三行目で>>608 使えばいいな。
610 名前:デフォルトの名無しさん [2008/11/04(火) 09:16:29 ] recursive 再帰だな。
611 名前:608 mailto:sage [2008/11/04(火) 09:29:59 ] とりあえず作ってみた。 >>609 のやりかたとは違います。 ↓にあっぷしてみたので、ご参考までに。 ttp://www2.uploda.org/uporg1765562.txt.html (パスは sml です) 入力は自然数(0以上)を仮定しています。
612 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 12:47:57 ] あー、答えちゃったの?どう読んでも宿題なんだから、自分で考えさせてあげなきゃ。
613 名前:608 mailto:sage [2008/11/04(火) 18:17:23 ] >>612 やっぱそうだよねぇ。 「独学で」なんて書いてるから、 にっちもさっちも行かなくなったと思っちゃったんだよね。 やっぱ、寝ないとだめだな。
614 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 23:34:42 ] >>612 >>613 良く寝て頭を休めろ。
615 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 00:11:55 ] SMLならメソッドじゃなくてファンクションだろ、とどうでもいい突っ込み。 再帰関数はn-1番目からn番目を導出する定義をそのまま書くのがコツ。 もう>>606 は見てないだろうけど。
616 名前:デフォルトの名無しさん [2008/11/05(水) 00:43:05 ] 宿題でも独学でもどっちでもいいのでは。
617 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 00:55:48 ] xy.yu.to/ 始終荒れまくりの海外サーバ絵チャだ 一人の神プログラマーが強すぎてマクロ荒しが全く太刀打ちできてない。 荒しプログラマーは全員退散!! 誰か倒してくれwwwwww
618 名前:デフォルトの名無しさん [2008/11/05(水) 01:15:09 ] >>611 わざわざお答え頂ありがとうございます。 一応こちらもパターンマッチングでない、if - elseの方法で出来ました。ネストしたループのfunctionの前にletが抜けていただけでした。 参考になりました。
619 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 04:09:40 ] >>618 こういう課題は論理型の方がすっきりした定義になるね。
620 名前:デフォルトの名無しさん [2008/11/09(日) 12:02:17 ] すんません教えてください。 (int -> int -> int) -> int という関数の定義例が分かりません。 (int -> int) -> int -> int なら たとえば let func = fun f x -> (f 2) * x;; でいいことが分かるのですが、 (int -> int -> int) -> int だとわからなくなります。 『二つのintを引数とし、intを返す関数』を一つの引数としてとり intを返す関数というふうに理解してます。 コードはどのように考えればよいんでしょうか?
621 名前:デフォルトの名無しさん [2008/11/09(日) 12:48:12 ] なんでもいいけど let func f = (f 1 2) + 3;;
622 名前:デフォルトの名無しさん [2008/11/09(日) 14:05:34 ] >>621 ありがとうございます。 理解しました。
623 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 03:10:20 ] ふと気づいたらOCaml3.11.0キテター
624 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 10:16:58 ] おお。 Mozartの64bit版も来ないかなぁ・・・クリスマスプレゼントに
625 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 13:35:35 ] mac leopardにsmlインストールしようと長いこと奮闘しているのですが、どうにも上手くいきません。 どなたか導入に関してわかりやすいサイトありましたら、教えてください。
626 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 16:39:09 ] Macports使えよ
627 名前:デフォルトの名無しさん mailto:sage [2008/12/29(月) 12:31:58 ] >626 やっと入れられた。ありがとう。
628 名前:デフォルトの名無しさん mailto:sage [2008/12/29(月) 12:34:37 ] >>625 なんだ、お前も最近増えてきたにわかマカか
629 名前:デフォルトの名無しさん mailto:sage [2008/12/29(月) 13:04:14 ] >>628 人生にお疲れのようですね。
630 名前:デフォルトの名無しさん [2009/01/01(木) 23:05:22 ] 引く手あまたのプログラミング言語は? slashdot.jp/developers/article.pl?sid=08/04/06/2313251 --- Java(16479件)、C++(8080件)、C#(7780件)、JavaScript(6749件)、 Perl(5710件)、PHP(2641件)、Python(1408件)、COBOL(1207件)、 Ruby(769件)、Lisp(33件)といった感じらしい。 とりあえずJavaとC/C++/C#、あとJavaScriptを覚えれば、 当分仕事には困らないようである。COBOLのしぶとさも目立つ。 ちなみにHaskellやOCamlの求人は10以下だったそうだ。 ---
631 名前:デフォルトの名無しさん [2009/01/03(土) 03:15:13 ] 当然だ。HaskellやOcamlの素晴らしさを理解できる人種は 限られているからな。JavaやC++みたいな糞言語を使う糞グ ラマがいる限り日本のIT産業の生産性は低いままだろう。 今必要とされているのは我々のような高い能力をもつエンジ ニアであるにも関わらずスーツ族にはそりがわからんのですよ。 うはwテラガンダムwww俺自重www こうですかわかりません
632 名前:デフォルトの名無しさん [2009/01/03(土) 05:18:13 ] パラダイムシフトはある日突然のように起こる
633 名前:デフォルトの名無しさん mailto:sage [2009/01/03(土) 11:20:18 ] >>631 職業プログラマは免許制にすればいいんじゃね?
634 名前:デフォルトの名無しさん mailto:sage [2009/01/03(土) 11:43:11 ] >>633 情報処理技術者試験の実務への役立ち度を考えると・・・
635 名前:デフォルトの名無しさん mailto:sage [2009/01/03(土) 12:03:45 ] プログラマの能力なんて知ってる知らないでは計れない。圧倒的多数の凡グラマーとごく一部の神グラマーww
636 名前:デフォルトの名無しさん mailto:sage [2009/01/03(土) 13:21:35 ] >>634 試験は基本中の基本の事柄が出てくるだけだよ。 実務には直接関係ないかもしれないが、その程度のことも知らないようでは 応用性がなくて35歳で定年を迎えるだけ。 ソフトウェア開発を一生仕事にできるのは基本を知っている人間だけだよ。
637 名前:デフォルトの名無しさん mailto:sage [2009/01/03(土) 13:42:15 ] >>636 へえー
638 名前:デフォルトの名無しさん mailto:sage [2009/01/03(土) 16:58:45 ] ソフ開で午後八割くらい午前四割くらいのおれは生きててはだめということですね。わかります
639 名前:デフォルトの名無しさん mailto:sage [2009/01/03(土) 17:58:29 ] >>633 盲目的に試験勉強する人間はもううんざりだな。
640 名前:デフォルトの名無しさん mailto:sage [2009/01/03(土) 18:06:33 ] >>639 たとえばプログラマでも東大院卒と公立高校卒とでは、やはり東大卒のほうが優秀な奴が多いよ。
641 名前:デフォルトの名無しさん mailto:sage [2009/01/03(土) 18:59:38 ] そりゃそうだ スタートは同じでも高卒と大卒では行き着く先が違う
642 名前:デフォルトの名無しさん mailto:sage [2009/01/03(土) 19:50:26 ] で、高卒は35歳で定年退職です
643 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 07:25:19 ] >>642 私のように35才でPrologを始めて、それでプログラマになれたというケースは どう考えればいいのかな。大学一年で中退してるから、高卒だけど。
644 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 08:44:37 ] 年齢といい、言語といいそれなりにレアケースかと。 まぁ35ではじめてもいけるとは思うけどね。多分それまでに理論的な思考が身についてないときついと思うが。
645 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 09:20:24 ] 論理型とか関数型を裏にある数学的な背景も併わせて押えとけば 手続き型でやるより長生きできるのかなーとか思ったり
646 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 10:09:45 ] PrologとMLがそんなに差があるわけもないのであって、 40才から始めても大丈夫って言わなくちゃいけないのではないか。 関数型のスレで高卒限定でも35才定年はないと思うよ。
647 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 12:15:36 ] >>643 辞めた理由による。 高卒と大学中退は若干違う。
648 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 18:35:36 ] 35歳でプログラミング始めるのは全然無理ではないし、 業界未経験でPrologのみ扱える35歳が職業プログラマとして入り込めるのも、この業界w かつての業界成長期にはタクシー運転手や大工から転職してきた人も珍しくなかった。
649 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 18:57:38 ] >>648 それはIT土方。アメリカ的に言えばコーダー。 ちゃんと計算機科学を勉強した人間の仕事じゃない。
650 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 20:22:11 ] >>648 今だって、エリクソンかなんかでErlangばかりやってて、日本に帰ってきて、 この言語だけは精通していますと言ったら、就職困らないでしょ。希少価値が あれば、なんとかなるのは今も同じ。
651 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:34:51 ] >>650 困る困る大いに困る
652 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:46:50 ] >>651 変だな。Erlangもそうだが、Scalaなんて、書けるって言ったら、 引く手数多だろう。
653 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:54:09 ] 俺なんかErlangもHaskellもScalaもFortranもCobolもJavaも一通り何らかのプロジェクトで携わったことがあるけどニートだよ?
654 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:58:09 ] C PHP Ruby もやったな。 ほとんどオープンソースプロジェクトと大学のTAやってたころに問題作成・採点やってたころの経験だな
655 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:02:16 ] とある大学の研究のために作られたハードウェアを制御するデバドラとかも書いたことあるし、 技術は結構あると思うんだけど 人格障害&口下手だから誰も俺なんか雇わないんです。
656 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:34:27 ] >>652 需要はあるところにはあるんだろうがどこにでもあるわけじゃない。 需要のあるところと縁がなければ(ほとんどないわけだが)どうにもならん。
657 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:46:14 ] >>656 クリーク・アンド・リバーのような所はプログラマは対象に していなのかな。アーティスト主体とは聞いたが。
658 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:52:59 ] >>657 秘密裡に話を進めたい求人っていうのは確かにあるね。
659 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 23:06:09 ] >>649 スレの流れを読め。 計算機科学を勉強した人間を前提とした話じゃないだろ。
660 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 23:25:33 ] >>657 その会社ググってみたが、HP何ともセンスねぇな・・・
661 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 05:14:07 ] Erlangにしても、Scala、ML、どれもヘッドハンティングの対象になる 案件ではないかな。ところで話は変わるが、高齢者向きの関数型言語 というと何になるのかな。Windowsアプリを書きたいなんて言わない 人達。
662 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 09:00:13 ] 1977年に論文発表のFPでいいと思うよ
663 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 09:12:48 ] 検索すれば、60歳からhaskellを始めたって人の日記とか見つかるよ
664 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 12:05:06 ] >>659 IT土方というのは専門性を持たずに手を動かすのが仕事の作業員のことで、 呼び名こそプログラマでも、専門知識を携えたプログラマとは大きく異なる。 土掘りしようがレンチ握ろうがキーボード叩こうが一緒の連中。 主に派遣。
665 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 12:50:14 ] >>664 「頭寒足熱腹八分」。翻訳すると「気取らず、怠けず、欲張らず」くらいになるかな。 1970年代以降の社会では専門知識は現場で帰納的に身につけるもの。仮に前身が、 タクシー運転手であろうと、大工であろうと、あるいは雲助であってもね。
666 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 12:54:21 ] 頭破七部
667 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 15:50:42 ] ML言語で書かれた数式処理ソフトってあるのでしょうか? 今はmaximaをcommon lispから使ってるのですが maximaよりも機能が豊富だったりするのでしょうか?
668 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 16:22:17 ] maximaに勝てるフリーのものなんてないよ
669 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 17:44:34 ] >>665 それは好景気の浮かれた古い時代、どんどん経営拡大して人材が追いつかなかった時代の話。 現代は人材にもっとシビアになってきている。 それに〜1995年ごろまではソフトウェア的にはそれほど目覚しい進歩がなかったから、 覚えた知識や技術の劣化が遅かったから専門基礎教育を受けない現場叩き上げだけでも何とかやっていけた。 ところが1995〜1999年ごろに爆発的に情報技術が進歩しはじめ、 それまで現場でソフトウェア開発に携わってきた"叩き上げプログラマ"は新技術についていけずに、 プログラマ35歳定年説の元になったわけだ。 現在の大学の情報学科や情報工学科などはそういった経験を元にして教育カリキュラムを組んでいるわけだよ。
670 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 17:55:04 ] >>669 もっともらしい大嘘乙 プログラマ35歳定年説ってもっと前からあったろうに。
671 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 18:04:39 ] CSで学んだようなことが生きるようなタイプの「開発現場」って日本にあんの? 日本のSIとかがやってるのは、今でも右から左にデータを動かすだけの ユーザプログラミングの代行であり、コンサル業務でしょ 上流にいる奴は業務知識や営業力、調整力が重要で 下流にいる奴は、SQLだの5年も経てば古びるようなフレームワークだの 製品だのの泡沫知識、アジャイルだのデザパタだのについていける程度の オツムを持っていることだけが重要で、 そこには本物のCSなど影も形も無いように思えるよ
672 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 18:11:34 ] >>671 あるよw それがなかったら日本のIT沈没w
673 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 18:14:11 ] >>672 それって研究所系でなくて? 不景気だと、すぐゼニカネにつながらないところは切られがちだよね? ゲーム屋は、まだSIよりはまともに「開発」だろうとは思うが
674 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 18:56:13 ] SIだってソフトウェア工学とかを無視して仕事はできん。 無視して沈没した例もあるし。
675 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 19:45:20 ] ソフトウェア工学なんて学問じゃないだろ。 残念だけど、その道の人からは下に見られてるよ。
676 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 20:12:15 ] ふざけんな。計算機科学の立派な一分野です。
677 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 20:19:30 ] ソフトウェア工学なんて俗学だよ。 数学やらないようなものは科学じゃないよ。
678 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 23:14:37 ] おいおいScienceとEngineeringの違いが解ってないのがいるのかよ…
679 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 23:22:33 ] >>678 明確な違いはないよ。 特に情報工学と計算機科学の間には。
680 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 12:56:26 ] 違いはあるが、境界が曖昧。 二つ合わせるとそのくらい幅が広くなる。
681 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 14:45:40 ] FP の話をしてくれ
682 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 17:15:02 ] FP?興味ないね
683 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 07:03:14 ] 関数型プログラミングのことじゃないの?
684 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 09:18:11 ] バッカスのFPじゃないの?
685 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 12:49:43 ] Floating Point
686 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 12:54:32 ] FPでぐぐると上の方に出てくるのはfinancial plannerばかりだな function pointというのもある
687 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 13:57:12 ] 下着のサイズッて後ろのフォックで分るんだって!!! 知ってた? A~Bだとフォックが1個 C~Dだと2個 F~だと3個なんだって... ホント? 自称アゲチンが言ってたんだ。
688 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 14:44:08 ] 俺FP2級持ってるぞ
689 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 19:09:13 ] >>678 ,679 情報工学と計算機科学はEngineeringとScienceと言うより EngineeringとMathmaticsと言うべきではなかろうか。 MathmaticsをScienceには含まないとした場合だが。 計算機科学はScience即ち自然科学や社会科学と比較して研究対象と 研究行為の相対位置が異なると言える。 >>675-677 また、所謂"ソフトウェア工学"はソフトウェアではなくソフトウェア開発 という人の営みを研究対象にしている点で情報工学と異なると言える。 むしろ既存のソフトウェアおよびその開発過程を"観察"するという点で ソフトウェア工学は上に挙げたScienceに近いとも言える。
690 名前:osiire [2009/01/09(金) 11:33:59 ] ML(主にocamlだけど)で仕事したい人はうちの会社(www.itpl.co.jp)に来てくださーい。 computer science分かってる人も歓迎ですよぉ。 お給料はご相談ですが。
691 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 11:46:44 ] >>687 飯島愛乙!
692 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 12:09:20 ] >>690 61才でもいいかい?
693 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 12:28:52 ] >>690 理学博士のニートですがいいですか
694 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 12:35:02 ] 年寄りがITに疎いって? 「世界最速のインターネット回線を持っているのは75才のおばあちゃん」なんだぜwwwww111111”!!!W
695 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 12:43:13 ] 年寄りってコンピュータもろくにさわれない人も多いし、そもそもコンピュータの存在にすら気づいていない人も多いよね。 パソコンってなに?みたいな
696 名前:osiire [2009/01/09(金) 12:57:01 ] >>692 年齢による差別はしませんので、大丈夫です。 >>693 理学博士と言う時点でかなりポイント高いと思います。
697 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 13:50:11 ] >>690 給料悪いし待遇悪いじゃん さらにページにヒラギノフォント指定ってのがウザ過ぎる Winにヒラギノ入れてる人のブラウザでヒラギノ表示したら悲惨なことになるの分かっててやってるのか?
698 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 14:11:49 ] OCamlってのがな・・・オブジェクト指向で開発させられそう ほのかに香るブラック臭
699 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 14:46:44 ] ニートって掘り出し物多いんじゃないかなって最近思うよ オープンソースプロジェクトの大半はニートがいないと成り立たないらしいし、 技術力は下手な職業プログラマ以上だったりするんだよな。 おまけに他の企業色に染まっていない。 もしその気にさせることができれば質の高い人材が発掘できそうだね。
700 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 19:24:56 ] FX とかこええええええええええええええええええええええ
701 名前:osiire [2009/01/09(金) 21:38:20 ] >>697 まぁ、給料・待遇についてはご相談という事で。ヒラギノは改善してみます。 >>698 OCamlを使いながらオブジェクト指向を強制する事は無いですよ。 >>700 FXとはいえ相手が大手ばかりなので普通です。ご安心を。
702 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 22:58:03 ] >>700 質問です FXはどうして怖いんですか?
703 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 09:41:42 ] ちなみにOCamlマスターだとしてどのぐらい払うつもり?
704 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 10:37:47 ] >>690 なぜ、MLなの? ここではそれが訊きたい。
705 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 11:13:24 ] ページに書いてあるじゃん
706 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 11:17:00 ] いままで、おっかむるって呼んでたw
707 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 11:18:38 ] なるほど。Webページは読まなかったw 読んでみたけど、答えは得られなかったW
708 名前:osiire mailto:sage [2009/01/10(土) 11:28:38 ] >>703 具体的な金額までは答えられませんが、OCamlマスターなら即戦力として迎えたいと思います。 >>704 ビジネス的には色々と理由があるのですが、どれも後付けです。 要するに、型安全や代数的データ型やパターンマッチや高階関数といった特徴ゆえに、開発効率がよくて不具合が少なくなるからです。 特にOCamlはライブラリが揃っていて楽です。それ以上でもそれ以下でもないです。
709 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 11:44:02 ] 海外の求人にはOCamlは結構あるらしいけれど、国内にもあるというのは 朗報だ。
710 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 11:51:33 ] >>708 F#じゃあかん?
711 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 14:55:57 ] >>708 所謂ベンチャーですか?
712 名前:osiire mailto:sage [2009/01/10(土) 16:15:46 ] >>710 F#で具体的な案件をこなした事はまだありません。だた、今後VisualStudioに標準搭載されてくれば、案件によってはF#を選択するかもしれません。 >>711 うちも小さい会社なのでよくベンチャーと言われるのですが、実質的にはベンチャーではなくスモールビジネスです。
713 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 19:11:57 ] >>690 OCAMLコミュニティで知名度のある社員はいますか?
714 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 19:15:05 ] >>713 それ重要だな
715 名前:osiire mailto:sage [2009/01/11(日) 01:13:37 ] >>713 知名度は計りかねますが、「入門OCaml」という本を執筆した著者が在籍しています。また、OCaml.JPというサイトの運営に係わっていたり、ocaml-nagoyaという勉強会を開いたりしています。 ,ocaml.jp/ ,www.itpl.co.jp/ocaml-nagoya/
716 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 10:27:39 ] >>715 その本良くなかったわ。 プログラミング in OCamlは良かった。
717 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 12:25:30 ] >>715 店頭で見たけど、五十嵐淳さんの授業ページと本家ドキュメントだけで十分だと思ったから買わなかった。 言語解説書なんて今日日はやらないと思うなぁ。
718 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 12:30:28 ] Haskellの時だって言語解説書ほしがってわめいていたのって少数派だったんじゃねーの? Haskell覚えようとするような奴が英語読めないとも思えないし、英語読めるなら本家ドキュメントぐらい読めるだろうし。 読んで理解できないような難しい文書でもないしな。
719 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 13:08:34 ] まとまったいい本あれば英語だろうが日本語だろうが買いますが
720 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 14:41:19 ] >>718 英語読めないけどHaskell覚えようとするような奴ですが何か?w
721 名前:osiire mailto:sage [2009/01/11(日) 15:04:05 ] 私の力不足にしてお役に立てなかったのは申し訳なく思います。 ただ、とにかく私はMLのようなすばらしい言語をもっと開発現場に普及させていきたいのです。 書籍の発行はそのための具体的な行動の一つです。
722 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 16:07:03 ] >>720 Haskell本出せっていう要求は5〜6年ぐらい前の話。
723 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 17:15:33 ] >>722 言語解説書も出版されないような言語は消え去る他ないだろう。 そういう意味でOCamlはクリアできてるんだから結構ではないか。
724 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 17:19:10 ] >>723 OCamlにも不満はあるんだけどねぇ。 かといって言語を作る気はない。作った時点で満足して宣伝する気まで起こりそうにないから。
725 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 17:29:46 ] LISP本は百冊以上。Prolog本も五十冊以上。 OCamlもHaskellも一般人にとっては決定的に情報不足。
726 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 17:33:44 ] 英語も分からないような人はプログラミングなんかしなくていいよ
727 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 17:37:26 ] なんか変な人がいるなwwww欲求不満なのかww?
728 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 17:43:44 ] OCamlはなー、もう少しメタプログラミング能力があればいいんだが・・・
729 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 17:47:35 ] よくしらんけどocamlp4とかでやるんじゃないの
730 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 17:48:50 ] ocamlp4じゃねえや camlp4だった
731 名前:デフォルトの名無しさん [2009/01/11(日) 18:36:02 ] なんでここ急に盛り上がってんの
732 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 18:50:19 ] >>726 ゴメンなさいね 英語わからんけど飯の種なんでやめられないですw
733 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 19:31:10 ] >>732 お前みたいな質の低いプログラマがいるからこの業界なめられるんだよ。 分かったら土堀りでもやってろ。
734 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 19:34:51 ] >>733 「五十嵐淳さんの授業ページと本家ドキュメントだけで十分」なんていう人が いるから関数型がなめられるんでしょ。
735 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 19:37:18 ] >>708 素朴な疑問だけど、Lisp系のマクロのような機能が無いOcamlじゃ 作成時間と共に開発効率が上がるようには思えないけど・・・ ある程度の腕があればライブラリーなんて持ってると思うし、 Gaucheとかと競合したら負けそうな希ガス…
736 名前:733 mailto:sage [2009/01/11(日) 19:51:19 ] >>734 俺じゃねーしw てか、入門Ocamlだっけ?あの程度の言語解説書ならいらねーよ。 俺が関数型言語を使うようになったのはMLを大学の授業で知ったのがきっかけだが、 別に参考書なんて一冊も買ってないぞ。立ち読みはするが。 初心者向きの言語解説書にはもはや価値がない。 ネット情報だけで十分なんだよね。 >>735 マクロがそんなに重要な機能には思えない。 大して作業効率にも反映されない。 Lisp系なら価値があるかもしれないが、ML系にはさほど意味はないだろうな。
737 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 19:59:24 ] >>736 そうか、別人か。そんな気もした。それはともかく、 君はそれで学べたかも知れないが、それでは普及は しないということ。
738 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 20:00:18 ] >大して作業効率にも反映されない。 オマエがマクロを知らないのは分かったから黙ってろw
739 名前:733 mailto:sage [2009/01/11(日) 20:07:21 ] >>737 ゴミ本いくら増やしても普及はしないと思うね。 優れた海外の本の翻訳なら価値があると思うがね。 だからプログラマには英語が必須なわけだけど。
740 名前:733 mailto:sage [2009/01/11(日) 20:10:31 ] >>738 ここで書いても仕方ないが、俺はとあるSchemeライブラリ作者だ。 Lisp系にある程度精通している。 MLでマクロを実装してもあまり価値はないよ。
741 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 20:10:52 ] MLに普及の目なんて無いだろ つーか、普及してほしいの? MLが普及するぐらいならとっくにLispが世界を制覇してるよ
742 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 20:14:19 ] あえて関数型言語を比較するなら Haskell > SML > Scheme > Common Lisp
743 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 20:15:31 ] >>740 底の浅い知ったかだねw マクロで開発効率を上げるといえばライブラリなんか関係ないんだよ。
744 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 20:21:24 ] マクロ使うとコードが煩雑になるじゃん Haskellのポイントフリースタイルならそもそもマクロは必要ないと思えると思うんだがね
745 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 20:22:10 ] >>741 Haskellなんかが評価されてるのって 参照透明だからマルチコア当り前の時代のプログラミングに向いてるっていうか、 Lispとは勝負所が違う気がする
746 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 20:27:24 ] >>745 勝負どころの振り分けはどのように?
747 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 20:27:45 ] >>745 え?俺にレス? そういう方向でも、やはりMLに目は無いよね 素直にErlang使っとけって話になるじゃん
748 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 20:32:01 ] Erlangはサーバ専用だと思ったほうがいい。 Erlangでプログラミングしてて分かったわ。
749 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 20:32:58 ] >マクロ使うとコードが煩雑になるじゃん タコ!マクロ生成マクロに煩雑もクソもあるかw
750 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 20:41:24 ] クライアントはWindowsとC++のゲットーだったりするので 鯖で強いErlangは勝ち組
751 名前:デフォルトの名無しさん [2009/01/11(日) 20:41:33 ] >>733
752 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 20:44:24 ] マクロ生成マクロは黒魔術じゃねw 使うけど。 それはさておき、まぁLispのマクロそのものということじゃなくて、 それ相当のものがあるかってことでしょ。 たとえばRubyは、eval とかその他動的な機能でALGOL系の 言語での 「マクロ相当」 を導入しようという試みだと思うけど (それがどれくらい成功といえるかは意見が分かれるとして) Ocamlとかはそれ相当の機能や試みとしてはなにがあるの? camlp4を知らないで書いてるけど。
753 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 20:45:57 ] camlp4でHaskel風のList comprehensionとかは出来る っつーか、デフォでそういうオモチャがついてる
754 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 20:48:28 ] >>753 オモチャっていうのは、実用に堪えないっていうニュアンス?
755 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 20:49:29 ] >>754 いや、オマケ&デモって意味 本気で使わせたいんなら、最初からそれを言語仕様にするか トップレベルに組み込むんじゃね? まあ、単に俺がそう思っただけで、詳しいことは白根
756 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 20:59:17 ] >>742 Scheme > Common Lisp > Haskell > SML/OCaml
757 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 21:37:10 ] おまえらのいう「開発効率」って所詮個人の趣味プログラムでの話だろ? >>690 のように仕事で使う上での「開発効率」を考えたことある?
758 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 21:47:05 ] >>757 ゲームやGUIアプリの類に関数型は正気とは思えんし ドカタ仕事の類にも向いてねえだろ ド汚くてもいいから仕事を簡単にやっつけられるってのが「開発効率」じゃねえの?
759 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 22:02:41 ] LispのマクロはS式があって始めて便利なもの。 だから他の言語にはない。
760 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 22:12:55 ] つ Dylan
761 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 00:41:18 ] >>757-758 >>735 >>760 Dylanはscheme/Lispとの差別化が出来なかったんだよね。むしろ劣化版。 最終的にObj-Cでいいやってことになって中止になったし。
762 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 00:41:42 ] >>733 むしろ、あなたのような人が人間の質として低い気がしますが? 英語ができた方がいいとは思いますが、必須とは思いませんね。
763 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 00:48:25 ] >>758 ところがどっこい、Unreal Engineの開発者がHaskellに注目してたりするんだ。 確か国内のゲーム開発者が、関数型に注目してるという記事も以前見かけた。 正気じゃないと言うほどでもないと思うけど。 それと、汚い仕事をやっつけ、って、割と関数型のフィールドじゃない? 関数こねくり回すのが本領の訳だしさ。
764 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 00:52:03 ] MONADIUSみてHaskellに対する印象が変わったな
765 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 01:16:12 ] >>762 英語必須ですよ。 英語ドキュメント避けて日本語ドキュメント探しているうちに日が暮れるような非効率な奴は3流
766 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 07:49:20 ] 安定した仕様の言語だと、プログラマがドキュメントを探す ことは稀だと思いますよ。通信規格のようなものは参照しま すが。
767 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 08:49:25 ] 洋書も持ってるけど、どうしても意味が汲み取れない ところとかあると挫折しそうになる。
768 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 08:54:54 ] 英語読めない奴の為に翻訳までしないと一流とは言えないな
769 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 08:59:00 ] 300ページくらいで文章とコードが半々くらいだと何とかいけるんだが、 700ページとか厳しい。
770 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 08:59:14 ] じゃぁ二流でいいです。
771 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 09:41:39 ] >>761 >>>757-758 > >>735 お前は何が言いたいのだ?
772 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 12:09:39 ] >>766 documentって英単語は書き物全般を指すと思うんだが?w 最新の論文はもちろんのこと、RFCの一部なども日本語に訳されていないこともあるから、 やっぱり英語ができなきゃ支障がでるね。 特にアルゴリズムの論文は読むことも多いんじゃないかな。
773 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 12:18:14 ] >>772 私もあなたも同じだと思うけど、このム板に書き込んでいるような 奇人プログラマでないかぎり英文のドキュメントなんて読まないと いうことです。研究者は別ですよ。
774 名前:772 mailto:sage [2009/01/12(月) 12:22:02 ] 俺は職業プログラマではない。 どっちかっつーと天文台に住んでる実験系の物理屋だ。 プログラミングもするからプログラマで通してる。
775 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 12:29:37 ] つまんね
776 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 12:29:41 ] 少し前に英文ドキュメントも読まないようなプログラマは3流だ、 という主旨の書き込みがありました。しかし、英文情報を渉猟して いる方が珍しいのであって、当然そんなことをしていない人の中に 一流の人はいっぱいいると確信できるので、ちょっと反撥してみま した。
777 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 12:32:13 ] >>776 一流なら当然名前は売れてるんだろ? 例を挙げてくれよ。
778 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 12:33:29 ] >>776 英文を読めない人間は、プログラマとしては情報弱者であることが 確定したようなものだ そんな「一流のプログラマ」などあり得ないと俺なら確信できるが 英論文を読めない研究者などあり得ないのと同じだと考えてよい
779 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 13:02:04 ] >>776 日本発の情報がウンコなので英文を読むほかないのです。
780 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 13:04:30 ] 並川さんもよくTVに向かって英語できません、なんて言えるよな。 昔と今じゃ状況が違うんだよ、馬鹿 ノーベル賞剥奪しちまえよ
781 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 13:25:37 ] 一流のプログラマになれるような頭の良さを持ちつつ英語わからないやつっていないんじゃない?
782 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 13:27:31 ] 言語マニアのファインマン先生は日本語を覚えようとして挫折した過去がある
783 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 13:27:53 ] 実際に読めるかどうかは別として、少なくとも 「英語が読めなくても大丈夫」と主張するやつは駄目だな。
784 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 13:30:28 ] >>781 中学以来英語教育を受けてる筈なんだしね まあネイティブ同然に読めなくてもそれは仕方が無いが 誰もそこまでは言ってない
785 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 13:33:47 ] >>782 何がだめだったんだろ。 言語体系の違いか?
786 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 13:36:45 ] >>785 日本語をファインマンに教えていたのが朝永の研究室の連中だったんだよね。 日本語の教え方がへたくそだったんじゃないかな。 それで、ファインマンもうんざりして日本語習得あきらめたんじゃないかと思うね。
787 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 13:41:14 ] そろそろ関数型言語の話をしようぜ
788 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 13:51:09 ] >>786 この馬鹿が。 日本語は世界でも最も難しい言語の一つなんだよ。 英語みたいに単純明解ではないのだよ。
789 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 14:00:26 ] 英語:主語+述語を主体とした前置型(Lispチック) 日本語:述語を中心とした後置型(Forthチック) だとオモ。と無理矢理スレに繋げてみる。
790 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 14:04:48 ] >>780 並川じゃなくて益川 漢字も読めないようじゃ現場では使えないな
791 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 14:57:09 ] >>788 俗説
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++ と勝負できる位置にいるのはなんで?
893 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 20:17:02 ] >>892 関数型言語は手続き型言語より最適化しやすいよ 関数型は中間表現で CPS 使ってる奴が多いから、 気合いが入って なくても SSA 使ってる手続き型言語程度のコードは吐き出しそうな 気がする fortran を除くと、手続き型言語のコンパイラの内部表現に SSA を 使うのが一般的になったのは、わりと最近じゃなかったっけ? gcc だと 4 系列から SSA だっけか?
894 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 20:46:10 ] とりあえずF#からいじり始めてる新参者なんですが、immutableなデータの取り扱い教えてくんなまし immutableにするとMapReduceみたいにナイスに並列化も出来てクールだぜというのはわかったんですが、その結果とかで何処かにステートのチェンジが起きますよね? Haskellのゲームかなんかでキャラの移動とかされた結果のそのシーンの状態を新しいWorldとして作っていくことでimmutableを維持してるとか言ってたんですが、業務アプリとかだと同なるんざんしょ。 別の記事か何かで、全体のデータ構造をobject-oriented西といて、その間の処理とかをfunctionalにするのが現実的だとかも言ってたんですが。 教えてエロイ人
895 名前:デフォルトの名無しさん [2009/04/29(水) 00:17:23 ] smlって実行結果が長いとき#で省略されちゃいますよね?あれを最後まで表示 させたいときって、どうすればいいんですか?printの引数はstring型でsring にするにはInt.toString(a)などとすればできますが、intとchar型くらいしかできませんよね? 新しくつくった型には使えないのでどうすればよいかわからなくて・・・ 誰か教えて下さい。
896 名前:デフォルトの名無しさん [2009/04/29(水) 07:05:49 ] 別にデータをimmutableにするのにゲームも業務アプリも変わんないんじゃん
897 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 09:25:16 ] データ毎回全部作り直すの?
898 名前:デフォルトの名無しさん [2009/04/29(水) 22:16:45 ] そうしてもいいけど、、、 普通は関数的なデータ構造では更新後と更新前が「ある程度共有される」。 たとえばリスト構造の先頭のほうを作り直す場合とかそうでしょ。 なおかつ共有されちゃっててもこまらないのはデータがimmutableだからこそだともいえる。 そしていろいろなデータ構造でimmutableでありながらも空間効率や時間効率のいいアルゴリズムが開発されてる。 Haskellのゲームかなんかで云々っていうのもデータを毎回全部作り直すという話じゃないと思うよ。
899 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 20:03:46 ] 「プログラミングの基礎」浅井健一という本は、 他の言語経験が無くOCamlがわからない人でもついていけますか?
900 名前:デフォルトの名無しさん [2009/05/01(金) 20:24:05 ] >>899 どのように考えながらプログラミングをしていくかが丁寧に書いてあるのでお勧めです。 もう少し高度な機能が知りたくなったら「プログラミング in OCaml」。
901 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 01:25:00 ] >>895 ぱっと思いついたのは、print関数自作かSMLFormat使う
902 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 19:04:23 ] 質問です ML系またはHaskell系言語でGUI開発に便利なRAD環境が充実している言語って何でしょうか? できれば個人的なお勧め開発環境も教えていただければうれしいです。
903 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 19:22:56 ] VBに匹敵するようなものはないなぁ
904 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 19:37:35 ] F#でよくね?
905 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 22:12:06 ] OCaml にありそうな気がす
906 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 22:30:47 ] ここまでGUIプログラムを開発した人なし
907 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 11:28:08 ] LablGtk の glade インターフェースを 5 年前に使ったけど、まあ、glade だったよ。
908 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 14:22:49 ] GUIイラネ
909 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 15:00:29 ] >>908 で?
910 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 15:01:42 ] 別にGUIイランやつはイランで結構だろ。 誰も強制なんかしてないんだし。 ここでそんなこと表明する意味がわからん。
911 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 16:25:14 ] GUIイラネの人じゃないけど、言語処理系をパッケージシステムで インストールするとき、最近はGUIツールキットまで一緒に入れようと するのが結構あってうざいんだよね。幸いML関連でそういうのにあたった ことはないけど、こないだMacPortsでSWI-PrologとErlangを入れたら いろいろ勝手に入って来て大変だった。オプションでも外せないし。 将来lablgtkなんかを強制されるようになったらOCaml捨てたくなる。 こっちは今後もコマンドラインだけでひっそり生きていきたいんだから ほっといてほしい。
912 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 16:42:41 ] そんなもん、自分でコンパイルすりゃ良いんじゃねーの? GUI無きゃないで、 「今時、言語側でdefaultでGUIぐらいつけろ。」 とか言う人出そうだし。 オメーン所の、パッケージ作成者に言うことだろうが。
913 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 16:50:45 ] デフォルトでついていても使わなきゃいいだけの話。 もしデフォルトで付いていればインストールの手間もなくなるし、 公式お墨付きということでヒューマンインターフェースが共通化されて利用者にとって便利になる。 どうしてもそれに不満があれば別のライブラリをインストールすればいいだけのことだし。 言語にGUIライブラリがくっついていたら何が不満なのかわからん。 容量にしてもインストール時間にしても対して違わない。 処理系を自前でコンパイルしてるやつは多少コンパイル時間が長くなるが、些細な問題だよな。
914 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 17:53:25 ] >>913 たとえば、SWI-Prologのインストールで入ったライブラリのために、 別の言語のインストールでエラーになるということはあるよ。
915 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 17:56:07 ] ディスク容量が限られてる環境なので、依存するライブラリをあれこれ 入れられるとうっとおしい、とか、サーバサイドアプリで、サーバには あれこれ入れたくないとか、パッケージ管理システムがバイナリベース じゃなくてゴリゴリコンパイルするのでやってられない、とか。 (パッケージのメンテナが)簡単に分離できるような構成にしておいて ほしい、という要望はありなんじゃないか?
916 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 18:10:00 ] つGentoo
917 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 18:20:41 ] >>911 MacPortsならパッケージ作成者がGUI無しのvariantsを用意すればいいだけの 話だよな。それが嫌だったらパッチ書いて送るしかないだろ。
918 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 18:21:16 ] >>915 > (パッケージのメンテナが)簡単に分離できるような構成にしておいて > ほしい、という要望はありなんじゃないか? それはアリだな
919 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 18:28:08 ] 似たような文句のある人っているんだね。 X関連をいろいろ入れろと要求するのは勘弁してほしいよね。 あくまで言語を入れたいんだからGUIはあくまでオプションにしていてほしい。 こっちはGnomeみたいなリッチなデスクトップじゃなくてまだtwmなんだよ。
920 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 19:12:50 ] >>919 twmって割と重くて使いにくいと思ってたんだがまだ使ってる人いたんだww みんなawesomeとかfluxboxとかに移行しちゃったと思ってた。
921 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 19:24:48 ] 基本的にUIに興味ないもんでいろいろ試すのが面倒で。 言語は片っ端から使ってみているのだけど。 # 言語もある意味UIの一種だというツッコミを受けそうだ :-)
922 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 19:39:25 ] コンピュータを何につかってんの? どうせ論文にもならないような研究ごっこやって妄想して遊んでるだけだろ。
923 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 21:38:30 ] たぶん>>921 さんみたいな人はWindows(メイン)ともう一台(実験用)みたいな構成だと予想。
924 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 21:44:55 ] まぁ2chよりでくだらない煽りを書いてるよりは有意義なことかと
925 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 22:25:07 ] >>922 俺は自宅で10台ぐらいのクラスタで論文にできる研究やってるよ
926 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 22:27:37 ] ただ並列化して測定しました、という類の論文は勘弁してくれ 査読するたびにうんざりする
927 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 22:35:02 ] >>925 InfiniBandか10GbEか分からんけど、電気代凄そうだな
928 名前:925 mailto:sage [2009/05/11(月) 22:44:36 ] >>926 そんなどこかの高校生じゃあるまいしw
929 名前:925 mailto:sage [2009/05/11(月) 22:48:01 ] >>926 頼まれたこともないくせにw
930 名前:925 mailto:sage [2009/05/11(月) 22:49:09 ] >>927 家庭用だぜ? 1GbEに決まってるだろ
931 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 22:58:29 ] これは推して知るべしだな
932 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 00:46:29 ] 10台ぽっちでクラスタって…
933 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 12:42:55 ] >>911 macports使ってるけど、Xがからまないと確かに気楽だなあ。 macportsだったら、swi-prolog-liteがおすすめ。
934 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 13:12:16 ] 関数型言語の話題になっていない件について。 ライブラリが豊富なのが魅力で最近やっとSML/NJからOCamlに移行したんだが、 SMLで書いたコードを書き換えるのが結構面倒。 文法的にもOCamlって面倒臭く感じるんだけど、単なる慣れの問題?
935 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 13:20:43 ] let fun や let val とか tuple には必ず括弧を書いていた癖に、 何が面倒なのかわからんが、camlp5 には pa_sml があるのでそれを使ってみ?
936 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 14:15:41 ] 再帰関数の定義がlet recだったり関数引数のパターンマッチングを let funcName = function ... | ... のように書くのが面倒に思えたんで。 確かにSMLにも冗長な部分はあるし、慣れだとは思うんだが。 何らかのトランスレータはあると思っていたのだが、camlp5なんて便利なものが あったとは。2000行程のSMLコードをうまく変換出来たよ。どうもありがとう。
937 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 14:50:17 ] >>932 どうでもいいけど、計算そのものの研究ならクラスタであれば台数は関係ないのでは?
938 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 16:03:34 ] >>936 ホントに変換できたんだ!知らずに教えといてすまんが、使ったことなかったんで。
939 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 16:45:46 ] >>938 camlp5 pa_sml.cmo pr_o.cmo -impl MyModule.sml で変換できた。printをprint_stringに置換する必要はあったけど。 まじで助かった。
940 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 17:41:59 ] それはよござんした
941 名前:デフォルトの名無しさん [2009/05/12(火) 23:47:13 ] 関数型言語って、常微分方程式の初期値問題の数値解を求めたりするのには向いてますか? 科学技術計算を中心にした関数型言語の入門書でなにかいいのありますか?
942 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 00:31:28 ] f# for scientists
943 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 14:36:30 ] >>925 なぜ自宅で? まともな研究じゃないな
944 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 14:37:24 ] 粘着乙
945 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 14:38:10 ] >>944 早ッ!!
946 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 14:39:01 ] >>942 Harrop の本なんか読むなよ、頼むから。
947 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 14:57:42 ] >>943 大学にいる人間じゃないから、そういう研究は自宅でしかできないんだよ。
948 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 22:16:09 ] >>946 その著者が書いた唯一の本のようだが。
949 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 22:52:58 ] >>947 計算機科学の研究は分野によってはPC1台でも十分に出来るのが良い所。 ぜひ成果を出して論文投稿してくれ。
950 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 22:56:19 ] 成果が出なくても rm するだけというのも良い所。
951 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 08:42:20 ] >>948 その著者が書いたSpamは山程ある。
952 名前:デフォルトの名無しさん [2009/05/14(木) 22:02:27 ] うまいこといいやがって
953 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 19:01:26 ] >>946 >>951 kwsk
954 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 09:43:34 ] john harrop troll でググレカス
955 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 14:26:16 ] John Harropってtrollすぎてワロタ