1 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 07:15:21 .net] 関数型言語MLについて語るスレッドです。 MLは、確固とした理論的背景を持つ言語でありながら、 現実的なソフトの開発にも使用できる実用性を備えた言語です。 また、プログラミングの初心者が最初に学習する言語としても優れています。 総本山 Standard ML www.smlnj.org/ Objective Caml caml.inria.fr/ocaml/ 前スレ 関数型言語ML(SML, OCaml, etc.), Part 5 pc12.2ch.net/test/read.cgi/tech/1186292994/
657 名前:デフォルトの名無しさん mailto:sage [2013/09/10(火) 23:47:36.91 .net] ディスプレイドライバの機能をCoqのせいにするなよ
658 名前:デフォルトの名無しさん mailto:sage [2013/09/11(水) 00:25:24.14 .net] CoqIDEの正当性はCoqで証明されておらんの?
659 名前:デフォルトの名無しさん [2013/09/11(水) 18:00:49.24 .net] www.cis.upenn.edu/~bcpierce/sf/ proofcafe.org/sf/ Coq自身はしらんが Coqの元のOCamlの正しさは証明されてるっぽい
660 名前:デフォルトの名無しさん mailto:sage [2013/09/11(水) 19:05:49.78 .net] 型システム入門って読むべき?
661 名前:デフォルトの名無しさん mailto:sage [2013/09/11(水) 19:35:45.08 .net] よみなさい
662 名前:デフォルトの名無しさん mailto:sage [2013/09/11(水) 19:54:09.22 .net] >>651 入門書なんて読まなくていいよ
663 名前:デフォルトの名無しさん [2013/09/11(水) 20:41:01.16 .net] 入門って書いてあるけど パラパラっと見たら全然入門じゃないんだけど・・・ 大学受験数学参考書の やさ理みたいな・・・全然優しく無いじゃんって
664 名前:デフォルトの名無しさん mailto:sage [2013/09/11(水) 21:34:52.86 .net] そもそも対象読者はどこを想定してるんだw
665 名前:デフォルトの名無しさん mailto:sage [2013/09/11(水) 21:50:49.86 .net] とりあえず英語できない人でしょ
666 名前:デフォルトの名無しさん mailto:sage [2013/09/12(木) 14:07:31.89 .net] スレ違いも甚だしいが、お前らの英語力ってどんくらい?今まで技術書は大体は読めるからいいもんと思っていたのだが、 ttp://www.readingsoft.com/ ここで測ったらwords per minuteが115とかいうとんでもない数値だった。 英語ネイティブの人間と同じ量の本を読むのに数倍の差をつけられてて、マジで不安になった。 同じ時間を費やして得られる知識が圧倒的に少ないのは如何なものか。全然読めないじゃないか。
667 名前:デフォルトの名無しさん [2013/09/12(木) 14:36:25.22 .net] www.zynas.co.jp/genius/sokudoku/sokutei.html 日本語でどのぐらいよ 俺で1400字/分 英語だと20letter(s)/minぐらいだろなw 1ページ読む頃には熟睡モードだぜ
668 名前:657 mailto:sage [2013/09/12(木) 14:52:35.79 .net] 1025文字/分だった。日本語読むのは速い方だけどトップには及ばない。 自分は視力が矯正入れて0.7くらいだし、これ以上速くしようと思ったら怪しげな速読メソッドに手を出すしか無いのではと思っている。 というか1400って速すぎじゃね?すげーな。
669 名前:デフォルトの名無しさん mailto:sage [2013/09/12(木) 15:10:15.73 .net] 103wpmに1080文字/分だった。 www.readingsoft.com/ は英文が平易すぎて、英語の小説読むより数倍速く読めたが……
670 名前:デフォルトの名無しさん mailto:sage [2013/09/12(木) 15:19:20.14 .net] >>657 73 wpm 理解優先で後戻りしまくったからな テストと見せかけて宣伝文句を熟読させる手口とすぐに分かったw
671 名前:デフォルトの名無しさん mailto:sage [2013/09/12(木) 15:29:49.44 .net] >>660 読み易いように心を砕いて書いた文章と思った
672 名前:デフォルトの名無しさん mailto:sage [2013/09/12(木) 16:23:13.27 .net] 146/wpm 100%だった もうちょっと早く読めそうだ
673 名前:デフォルトの名無しさん mailto:sage [2013/09/12(木) 18:20:09.98 .net] 思いきり話の腰を折ってすまないが、 日本語英語に関わらず、知識やイディオム仕入れておいて、 理解速度自体を上げる方のが遥かに重要だから、 ページ送りが遅くても気にするなよ。
674 名前:デフォルトの名無しさん mailto:sage [2013/09/12(木) 20:00:36.43 .net] いやいやその知識やイディオムを仕入れる速度にもかかってくるのよ。読み書きの速度ってさ。 これ以上はスレ違いだし荒らしになるからやめるけど、上で挙げられてたSoftware Foundationsの和訳をして公開したCoqスレの住人達には感謝してもしきれん。
675 名前:デフォルトの名無しさん mailto:sage [2013/09/13(金) 10:05:08.46 .net] ホントこんなに価値ある情報を無料で提供してくれるって凄いよね
676 名前:デフォルトの名無しさん mailto:sage [2013/09/13(金) 10:13:47.96 .net] let goukei = 720;; let aa = 100 and bb = 350 and cc = 620 and dd = 705 ;; List.concat (List.map (fun a -> List.concat (List.map (fun b -> List.concat (List.map (fun c -> List.concat (List.map (fun d -> if a+b+c+d = goukei then [(a,b,c,d)] else []) [0;aa])) [0;bb])) [0;cc])) [0;dd]);; こんな感じでaa商品100円 bb商品350円 cc商品620円 dd商品705円があって 720円になる組み合わせを考えてみました ネストすればアイテム数をいくらでも増やせそうですが もっとスッキリ書く方法はありませんか?
677 名前:デフォルトの名無しさん mailto:sage [2013/09/13(金) 12:38:34.63 .net] batteriesありなら List.n_cartesian_product [[0;aa]; [0;bb]; [0;cc]; [0;dd]] |> List.filter (fun [a;b;c;d] -> a+b+c+d = goukei)
678 名前:デフォルトの名無しさん [2013/09/13(金) 14:05:17.63 .net] batteriesってどうやってつかうの?
679 名前:デフォルトの名無しさん mailto:sage [2013/09/13(金) 15:13:13.02 .net] >>665 どういう意味? 和訳してた人が速読を推奨してたの?
680 名前:デフォルトの名無しさん mailto:sage [2013/09/13(金) 21:10:35.73 .net] >>669 opamやocamlfindの使い方分かる? その辺の設定済んでれば、ソースの最初でopen Batteriesするだけ
681 名前:デフォルトの名無しさん [2013/09/14(土) 01:13:42.13 .net] >>671 わかんない ググったらlinuxならできそうだけど これwindowsで行けるの?cygwinってのが要る?
682 名前:デフォルトの名無しさん [2013/09/14(土) 03:59:21.98 .net] batteries-2.1.tar.gz をダウソしてきて cygwinってのから $ tar zxvf batteries-2.1.tar.gzすればええんやな
683 名前:デフォルトの名無しさん mailto:sage [2013/09/14(土) 21:13:00.38 .net] >>622 んなわけねえだろ コンパイラ作ってる奴がクソなだけだ
684 名前:デフォルトの名無しさん [2013/09/14(土) 21:17:30.82 .net] やはりwindowsでOCamlならF#行った方がいい?
685 名前:デフォルトの名無しさん mailto:sage [2013/09/14(土) 21:21:47.50 .net] プラットフォームがWindowsに限定できるのなら、あえて茨の道を選ぶこともあるまい
686 名前:デフォルトの名無しさん mailto:sage [2013/09/15(日) 03:38:59.44 .net] F#ってべつにwindowsじゃなくても動くでしょ
687 名前:デフォルトの名無しさん mailto:sage [2013/09/15(日) 04:18:36.52 .net] 動くけど、monoを入れる羽目になるし、.NET Frameworkが無いから旨さ半減
688 名前:デフォルトの名無しさん mailto:sage [2013/09/15(日) 06:47:38.91 .net] F#とOcamlって実行速度ちがってくるものなの?
689 名前:デフォルトの名無しさん mailto:sage [2013/09/15(日) 08:16:48.29 .net] OCamlはネイティブ
690 名前:デフォルトの名無しさん mailto:sage [2013/09/15(日) 09:50:20.17 .net] .NETはJITコンパイルされるし、OCamlのネイティブコンパイラの最適化は最低限だし
691 名前:デフォルトの名無しさん mailto:sage [2013/09/15(日) 10:45:01.28 .net] F#は.NETでも遅い方だろ
692 名前:デフォルトの名無しさん mailto:sage [2013/09/15(日) 10:52:12.02 .net] はいはい荒れるからこれで終わり benchmarksgame.alioth.debian.org/u64q/benchmark.php?test=all&lang=all&data=u64q
693 名前:デフォルトの名無しさん mailto:sage [2013/09/15(日) 22:25:53.10 .net] Real World OCaml読もうぜ!OCamlSpotterの人も評価してたがAppendix A: installationでopam + core + utopをいきなりインストールさせるのはびっくりした。 こいつらガチでOCamlを普段使いにしてやがる。
694 名前:デフォルトの名無しさん [2013/09/15(日) 22:30:57.96 .net] 日本語版早く
695 名前:デフォルトの名無しさん mailto:sage [2013/09/15(日) 23:00:17.64 .net] >>684 実際、実務でOCaml使っている人たちが書いてるからね
696 名前:デフォルトの名無しさん [2013/09/15(日) 23:02:44.61 .net] って英語版も12月発売な上に 日本語版ってそれから1年後ぐらいになるのか
697 名前:デフォルトの名無しさん [2013/09/15(日) 23:05:28.42 .net] 普段使いってどういうこと? スクリプト言語みたいに ちょこちょこっとのコーディングもOCamlって事?
698 名前:デフォルトの名無しさん [2013/09/15(日) 23:15:21.68 .net] あー やっぱLinuxかぁ
699 名前:デフォルトの名無しさん mailto:sage [2013/09/16(月) 00:03:20.35 .net] プログラミング演習のようなの実装させるより Coreの拡張モジュールやp4使わせてるし 標準でやれることでもJane系にもっと便利なのあれば使ってる
700 名前:デフォルトの名無しさん [2013/09/16(月) 16:10:19.60 .net] opamってlinuxの64bit専用?!
701 名前:デフォルトの名無しさん mailto:sage [2013/09/17(火) 01:27:30.95 .net] あー opam installで途中で止まるー もう寝る
702 名前:デフォルトの名無しさん mailto:sage [2013/09/17(火) 03:26:52.06 .net] アパーム!!
703 名前:デフォルトの名無しさん mailto:sage [2013/09/17(火) 09:53:15.37 .net] >>692 エラーメッセージはなんて出てますか? #opam
704 名前:デフォルトの名無しさん [2013/09/17(火) 12:09:35.38 .net] >>694 寝て起きたら終わってた エラーメッセージらしきものが出てたら まだググればなんとなく解決の糸口を探せるんだけど 止まったように見えるのは勘弁してほしい・・・
705 名前:デフォルトの名無しさん mailto:sage [2013/09/17(火) 12:15:30.59 .net] Ubuntuだと入ってるのかもしらんが Lubuntu入れたからm4ってのが足りなくて進まないのに難儀したわぁ
706 名前:デフォルトの名無しさん mailto:sage [2013/09/17(火) 12:36:12.34 .net] とりあえず opamからutopとcore入れたけど 他に入れといた方がいいってのある?
707 名前:デフォルトの名無しさん mailto:sage [2013/09/17(火) 14:31:45.87 .net] asyncとか?
708 名前:デフォルトの名無しさん [2013/09/17(火) 20:04:07.17 .net] open Core.Std しても ウンともスンとも言わないのはどうして?
709 名前:デフォルトの名無しさん mailto:sage [2013/09/17(火) 20:37:23.49 .net] toplevelなら最後に;;付けないと評価されないぞ。
710 名前:デフォルトの名無しさん mailto:sage [2013/09/17(火) 21:34:31.77 .net] 付けてもダメ
711 名前:デフォルトの名無しさん [2013/09/18(水) 10:24:04.40 .net] OSの問題か? UbuntuでbatteriesとかCore使えてる人いますか?
712 名前:デフォルトの名無しさん mailto:sage [2013/09/18(水) 10:42:31.06 .net] 違うと思うけど 標準のモジュールは使える? open List;;とか
713 名前:デフォルトの名無しさん mailto:sage [2013/09/18(水) 11:54:58.58 .net] open List;;も #load "nums.cma";; も行ける
714 名前:デフォルトの名無しさん [2013/09/18(水) 17:03:13.40 .net] #use "topfind";; #require "batteries";; open Batteries;; でバッテリーつかえたぁぁぁ 疲れた でもCoreはスーパーユーザーやないと使えないんだけど emacsからスーパーユーザーってどうするんだ?
715 名前:デフォルトの名無しさん mailto:sage [2013/09/18(水) 17:09:49.70 .net] su emacs # ?
716 名前:デフォルトの名無しさん mailto:sage [2013/09/18(水) 17:22:01.73 .net] ってかここで聞く事じゃないけど .emacsなんてなんだよ・・意味不明
717 名前:デフォルトの名無しさん mailto:sage [2013/09/19(木) 02:32:35.94 .net] 可能性1. Coreライブラリのパーミション指定がおかしいため、通常ユーザーでは読めない。(あまり現実的じゃない) 可能性2. opamをsudoで実行した。 可能性3. Ubuntuリポジトリにあるcoreパッケージをインストールした一方で、opam+findlibを個人権限で導入し、 そのため/usr/lib/ocaml/以下をfindlibが探していない。 可能性3なら、~/.opam/system/lib/findlib.confを編集することで解決する。
718 名前:デフォルトの名無しさん [2013/09/19(木) 09:33:14.80 .net] できた!ありがトン 端末たちあげたら先ず初めになんでも sudo -iしてたのがダメだったのかなぁ utopだと出来るけどemacsだと Error: Reference to undefined global Conditionsってでる うーん emacsの勉強が必要だなぁ core_kernelだと大丈夫なのはなぜなんだぜ? coreとcore_kernelって同じもの?だよね
719 名前:デフォルトの名無しさん mailto:sage [2013/09/19(木) 16:09:42.28 .net] >>709 /home/fuga/.opam/system/lib/findlib.conf ------------------------------------ destdir="/home/fuga/.opam/system/lib" path="/usr/lib/ocaml:/home/fuga/.opam/system/lib" ocamlc="ocamlc.opt" ocamlopt="ocamlopt.opt" ocamldep="ocamldep.opt" ------------------------------------ pathをちゃんとしてれば、Linuxディストリビューションが提供するocamlライブラリとopamで個人利用のライブラリが併用できる。 普通にopam導入したら/usr/lib/ocaml以下を無視して全部~/.opam以下に入れようとしてくる。 面倒だから俺もちゃんとしてない(findlibがシステムとユーザー両方にあって気持ち悪い)が、 OCAMLFIND_CONFを指定したり何だりすればいいらしい。気が向いたら試してみてください。
720 名前:デフォルトの名無しさん mailto:sage [2013/09/20(金) 02:37:57.07 .net] >>707 emacsの設定ファイルだよ。弄ってる間に学生生活が終わった。
721 名前:デフォルトの名無しさん mailto:sage [2013/09/21(土) 18:47:36.60 .net] opamの1.1.0betaが出てるね
722 名前:デフォルトの名無しさん mailto:sage [2013/09/25(水) 00:38:24.09 .net] https://twitter.com/cliffordbeshers/status/382505685084160001 ICFPの季節か
723 名前:デフォルトの名無しさん [2013/09/28(土) 08:17:20.19 .net] SML#の話題ってここでいいの?
724 名前:デフォルトの名無しさん mailto:sage [2013/09/28(土) 09:00:06.71 .net] いいよ
725 名前:デフォルトの名無しさん mailto:sage [2013/09/28(土) 18:49:36.94 .net] SML#のページにあったスライドより: SML# は,Cやデータベースとの連携を備えた「ふつうの言語」を目指すML系関数型言語です. SQLをそのまま使える「ふつうの言語」...こいつ頭がお詳しいぜ! C、SQL、MLっていうのは欲張りだな。polyglotは楽しめるのかもしれんが。
726 名前:667 [2013/09/30(月) 10:28:11.89 .net] let rec add_h a = function [] -> [] | h::t -> (a::h) :: add_h a t;; let rec powerset = function [] -> [[]] | h::t -> let pt = powerset t in pt @ add_h h pt;; let nedan_list list goukei = List.filter (fun xs -> List.fold_left (+) 0 xs = goukei) (powerset list);; nedan_list [100;350;620;705] 720;; 過去スレにいいヒントがあったのでそれを使って やりたい事を実現できました。 OCamlの素晴らしさを実感するとともに もっと良い方法があれば教えてください。
727 名前:667 [2013/09/30(月) 10:36:53.22 .net] あー 数がちょっと増えるとすぐオーバーフローしちゃう これはダメだぁ・・・
728 名前:667 mailto:sage [2013/09/30(月) 11:26:09.48 .net] let rec powerset = function | [] -> [[]] | h::t -> List.fold_left (fun xs t -> (h::t)::t::xs) [] (powerset t);; あ、自己解決 こうすれば20数個行ける
729 名前:デフォルトの名無しさん mailto:sage [2013/10/01(火) 17:56:59.75 .net] ごっちゃになってたけど print_string "hello"; print_newline ();; と print_endline "hello" が同じ意味なんだな print_string "hello\n" が普通の書き方?
730 名前:デフォルトの名無しさん mailto:sage [2013/10/04(金) 23:18:06.53 .net] その程度ならどれも意味がすぐ分かるから、特に伝統は無い。 改行コードはOS毎にLF+CRだったりLFだったりするけど、そこら辺はどう考慮されているんだろう。 Linuxだと\nで改行、\rで現在の行を消して先頭からやり直し、みたいだけど。他のOSでも統一
731 名前:されてんのかね? [] [ここ壊れてます]
732 名前:デフォルトの名無しさん [2013/10/05(土) 09:27:34.70 .net] 副作用にも色々表現方法があって迷うなぁ まぁOCamlはそれがいいんだろうけど
733 名前:デフォルトの名無しさん mailto:sage [2013/10/05(土) 14:18:01.03 .net] 文字列だけなら print_string とか print_endline とかでいいだろうけど、 数値とか含むのを出力するときはどうするのがスマートなんだろう? 俺はだいたい Printf.printf を使ってしまうのだけど。
734 名前:デフォルトの名無しさん mailto:sage [2013/10/05(土) 14:42:49.03 .net] >>721 間違ってる Windows は CR+LF すなわち現在行を消して先頭に戻してから改行するのだッ
735 名前:デフォルトの名無しさん mailto:sage [2013/10/05(土) 14:51:34.09 .net] > Linuxだと\nで改行、\rで現在の行を消して先頭からやり直し、 OSのアプリが, 慣習的に "\n" を論理改行文字として扱ってる(tty ドライバーも このように扱いやすく作ってある)だけで, 端末制御として使う CR だとか LF とは 分けて考えるべきだと思うよ. 実際に tty を raw モードに設定すると, CR - LF("\r\n") を "\n" にマップする 作業はアプリの仕事になる. 端末から見た, 各制御文字の役割は以下であってそれ以外の何者でもない CR: カーソルを行の先頭に戻す, LF: カーソルを次の行に移動する(カラムは移動しない)
736 名前:デフォルトの名無しさん [2013/10/05(土) 17:25:39.93 .net] ocamlのcryptokit使おうとしたら、エラーになるんだがなんでなんだぜ。 Fatal error: cannot load shared library dllcryptokit_stubs Reason: dllcryptokit_stubs.so: cannot open shared object file: No such file or directory
737 名前:デフォルトの名無しさん [2013/10/06(日) 08:19:42.15 .net] #ocaml #opam 自己解決したっす dllcryptokit_stubs.so はopamゆーざーなら以下の環境変数の設定が必要っぽい export CAML_LD_LIBRARY_PATH=~/.opam/system/lib/stublibs/
738 名前:デフォルトの名無しさん [2013/10/09(水) 00:18:05.42 .net] なんかopamも便利なんだか不便なんだかわからんな
739 名前:デフォルトの名無しさん [2013/10/10(木) 12:26:47.83 .net] フィボナッチ計算させるときに メモ化するのもアキュムレータ使うのも 同じ振る舞いな気がするんだが 何か違うのかな?
740 名前:デフォルトの名無しさん mailto:sage [2013/10/10(木) 13:44:52.77 .net] 複数回呼び出したら違うんじゃないの
741 名前:デフォルトの名無しさん [2013/10/10(木) 14:11:03.39 .net] それぞれの f(n)までの値をそれぞれ1回ずつ計算して テーブルに入れるかレコードに入れるかの違いだから 計算回数は同じじゃね?
742 名前:デフォルトの名無しさん mailto:sage [2013/10/10(木) 18:11:17.89 .net] fibを何回か呼ぶことを言ってるんじゃねぇの
743 名前:デフォルトの名無しさん [2013/10/10(木) 18:49:43.04 .net] 呼ぶ回数=計算回数じゃないの? どっちもO(n)っぽいんだけど
744 名前:デフォルトの名無しさん mailto:sage [2013/10/10(木) 19:24:41.41 .net] fib(n) = fib(n-1) + fib(n-2) fib(n-2)は呼ばれるが、計算済みだから新に計算はしないってことでしょ。
745 名前:デフォルトの名無しさん [2013/10/10(木) 21:27:14.82 .net] そういう二重再帰じゃない方のフィボナッチだよ
746 名前:デフォルトの名無しさん [2013/10/10(木) 21:50:36.16 .net] let fib x = let rec fib_sub (x, accumulator1, accumulator2) = if x = 0 then accumulator1 else fib_sub (x - 1, accumulator1 + accumulator2, accumulator1) in fib_sub (x, 1, 0) こういう感じでアキュムレータ使うようなフィボナッチ
747 名前:デフォルトの名無しさん mailto:sage [2013/10/10(木) 23:36:42.55 .net] 何が言いたいのかわからん 末尾再帰のアキュムレータだろうが、 fib nをm回呼び出す場合メモ化ならO(m+n)だろ
748 名前:デフォルトの名無しさん [2013/10/11(金) 01:37:05.82 .net] >>734 この 二重再帰の計算オーダーはそうじゃないだろ??
749 名前:デフォルトの名無しさん mailto:sage [2013/10/11(金) 02:57:20.14 .net] >>735 >>738 メモ化のコード書いてくれないとわからない。 あと計算オーダーはそうじゃないのそうって何?
750 名前:デフォルトの名無しさん mailto:sage [2013/10/11(金) 03:24:27.66 .net] >>738 >>734 の場合でも、f(n)はf(n-1), f(n-2)がメモ化されている場合常にO(1) メモ化していない場合(最初の一回目)は再帰計算だからO(n) これはわかるな? その後 再帰メモ化版のfib(n)は、 それまでn以上の値が呼び出されていたならO(1)であり、 fib nをm回呼び出すならO(m)、2つ合わせて O(m+n) アキュムレータだけの場合、fib(n)は "常に" O(n) つまりfib nをm回呼び出すならO(nm) わかったか?
751 名前:デフォルトの名無しさん mailto:sage [2013/10/11(金) 04:17:04.97 .net] HaMLet がまさかのニューバージョン。 www.mpi-sws.org/~rossberg/hamlet/
752 名前:デフォルトの名無しさん [2013/10/11(金) 10:20:41.62 .net] >>740 あー >>734 はメモ化の再帰バージョンの話ね 理解した とすると >>729 この違いは 使い捨てならアキュムバージョンは 簡潔に書けて早く 使いまわすならメモ化した方が 再呼び出しは早くていいって感じか
753 名前:デフォルトの名無しさん [2013/10/11(金) 19:30:47.32 .net] SMLも開発すすんでるんだな
754 名前:デフォルトの名無しさん mailto:sage [2013/10/14(月) 18:44:12.10 .net] www.pllab.riec.tohoku.ac.jp/smlsharp/docs/1.0/ja/Ch1.S1.xhtml SMLの開発って、もしかしてSML#のこと?
755 名前:デフォルトの名無しさん mailto:sage [2013/10/14(月) 18:45:23.58 .net] あ、上のhamletのことか。
756 名前:デフォルトの名無しさん [2013/10/14(月) 18:54:06.65 .net] SML#は64ビット対応せんのかな。結構期待してるんだけど。
757 名前:デフォルトの名無しさん [2013/10/15(火) 01:40:51.77 .net] SML/NJとかも