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

■ このスレッドは過去ログ倉庫に格納されています
2009/06/15(月) 07:15:21
関数型言語MLについて語るスレッドです。

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

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

前スレ
関数型言語ML(SML, OCaml, etc.), Part 5
http://pc12.2ch.net/test/read.cgi/tech/1186292994/
2013/04/20(土) 01:56:05.49
>>597
よくわからないけど、型環境に intかつfloat みたいなのが積めないからだめなんじゃない?
確かこういうときはヴァリアントを使えばよかったはず
type intfloat = E | I of int | F of float
let check b (f: intfloat -> intfloat -> bool) = if b then f (I 1) (I 1) else f (F 1.0) (F 1.0)
2013/06/09(日) 21:47:36.26
OCaml のはなしです。

module type IO =
sig
 type 'a t
 val write: string -> unit t
 val read: string t
 val run: 'a t -> 'a
 val bind: 'a t -> ('a -> 'b t) -> 'b t
end

module MyIO : IO =
struct
 type 'a t = unit -> 'a
 let read = read_line
 let write str = fun () -> print_string str
 let run m = m ()
 let bind m f = fun () -> (run (f (run m)))
end

で Haskell の IO monad 風にできるのはわかったけど、
'a t を x -> b という関数の形じゃなくて、バリアント型で実現したい。
read に対応したアクションまたは write に対応したアクション、という感じで。
けど、どうやってもうまくいかない。誰か教えてくださいませ。
2013/06/16(日) 21:34:59.42
opamを導入して適当なモジュール(今回はextlib)をインストールして
ソースコードにopen Extlibと書いたところExtlibが見つからないと言われてしまいました
何かパス通しのようなものが必要なのでしょうか
OSはmacでhomebrewを使っています
2013/06/16(日) 22:08:09.11
よくわかりませんがOCamlFindを使えば良いのですね
ocamlfind ocamlc -package extlib -linkpkg test.ml
で通りました
2013/06/16(日) 23:27:52.03
あとopen ExtLibがタイポしてました
2013/07/23(火) NY:AN:NY.AN
Coqもここでいいの?
2013/07/23(火) NY:AN:NY.AN
そういえば、Coqスレ昔あったけど今はないのか。
定理証明支援のスレのないのかな?
Coqスレ
http://toro.2ch.net/test/read.cgi/tech/1300017923/
2013/08/13(火) NY:AN:NY.AN
活気が無いように見えるのはきっと皆コーディングに夢中なんだ。きっとそうだ。
2013/08/13(火) NY:AN:NY.AN
MLに限った事じゃないけど、関数型言語を学び始めて思ったのは、なんで一次元(線形)リストベースに作られてるのかなって。

一番シンプルな一次元から始めたとして、その先にn次元、までは行かなくても2次元・3次元にして言語体型を考えてみるとかやった人いないのかな。
既にトライして無意味と分かったとか、今まさに挑戦中とか、そう言う話はあるのかい?
メモリ空間が一次元空間だから、やるだけ無駄なんだろうか?
2013/08/13(火) NY:AN:NY.AN
>>606
因果が逆。再帰がベースにあるのでリストが使いやすい。

特定のデータ構造をベースにした言語ってSQLくらいしか思いつかない。
2013/08/13(火) NY:AN:NY.AN
>>606
Linked List は一次元じゃないと思う。
2013/08/13(火) NY:AN:NY.AN
>>607
だったら再帰の考え方も拡張すればいい。別にデータ構造をベースにする意図ではない。
考え方の向きは相互に変わって良いし、そうする事で何が見えてくるか、こないとしたら何故なのかを考えるきっかけにすればよい。
2013/08/13(火) NY:AN:NY.AN
>>609
考え方の向きが一方向なのは、関数(写像)が集合間における一方向のn:1関係だから。
もし双方向やn:m関係を扱いたいのなら、述語論理をベースにした言語にすればいい。
論理型言語であれば、リストも順序性がある一方向関係として自然に扱える。
2013/08/13(火) NY:AN:NY.AN
そう言う話じゃなく、考えたかの向きってのは再帰→リストと発想する考え方の逆向き、と言う意味です。
これ以上の議論は無意味のようですね。終わり
2013/08/13(火) NY:AN:NY.AN
消えてくれてありがとう
2013/08/13(火) NY:AN:NY.AN
>>609
関数型言語を学び始めてどれくらいだ。第一印象でリストベースなのかと感じても3日もすればそんなことないって分かるだろうに。
きっと俺と同じように慣れない酒で益体もないことを考えているんだろうけど。
n次元のリストを捉えるのに再帰が不十分なら拡張とか考えるけどさ、n-1次元のリストを再帰的に処理すればいいだけの話であって、拡張なんて必要ない。
再帰という概念の拡張に1次元->n次元の拡張は使えない。何の需要も喚起しない。
2013/08/14(水) NY:AN:NY.AN
>>613
なれない酒で頭がいかれてるお馬鹿さんさようなら
2013/08/21(水) NY:AN:NY.AN
ひどいなこりゃ。
2013/08/21(水) NY:AN:NY.AN
「ひどい」と不平を言うよりも、進んでネタを振りましょう。
2013/08/27(火) NY:AN:NY.AN
正直関数型言語がどんなところで優位を持っているのかわからん
618デフォルトの名無しさん
垢版 |
2013/08/31(土) NY:AN:NY.AN
リスト内包表記ってOCcamlでできるの?
2013/08/31(土) NY:AN:NY.AN
Camlp4でできる
2013/09/02(月) 01:13:00.20
OCaml でのゲームプログラミングに興味がわいて
MLGame http://mlgame.sourceforge.net/
ってライブラリを導入しようと思ったのですが
準備段階であるSDL, OCamlSDL の cygwin への導入で
もうよくわからなくなってしまいました。

http://sourceforge.net/projects/mlgame/files/mlgame/cross-platform%20devel%20util/
cygwin ごと入ってるらしいパックもためそうとしましたが
cygwin コンソールの起動ができません。

あきらめてCで初心者向けのDXLibrary でもつかって
適当にやってればいいのでしょうか?
2013/09/02(月) 01:55:09.13
やる前から自分が興味を持ったことを投げ出すなよ
やってみて、思っていたのと違ったらそのときに別の方法を考えればいい

要は関数型言語でゲームプログラミングをしたいんだろ?
ならF# + DirectXを試してみたら?

もしくはCygwinを捨ててLinux環境でMLGameに挑戦してみるとか
MLGameなんて地雷臭がするから、いろいろと苦労しそう。その分、力は付くかもしれないけど。

どんな方法をとるにせよ、まずはある程度のところまで突き詰めたほうがいい
2013/09/02(月) 01:59:44.29
「プログラミングする」という観点においては
Windowsはウンコということを肝に命じた方が良い
2013/09/02(月) 02:33:30.43
なんで?.NETは便利だぞ
2013/09/02(月) 02:47:12.09
>>621-622
素早い返答ありがとうございます。
とりあえず OCaml + cygwin + へんなの は捨てて
F# + DirectX をためしてみます。
windoes はプログラム書くのにうんこなのですね?
Ubuntu いちおう VMware でつかえるけど
とりあえず win に F# インストールしてねます
明日
http://www.codeproject.com/Articles/121194/Managed-DirectX-via-F
でもよもう
625デフォルトの名無しさん
垢版 |
2013/09/02(月) 09:36:30.13
そっか F#だとAPIが叩けるんだな
プログラム自体を関数型言語から入ると
なかなかできない発想だなと思った
2013/09/03(火) 01:42:29.15
let foo () =
let bar = baz () in begin
(* fooを使ってunitを返すような処理がいくつか *)
bar
end

個人的にこれはダサいと思うんですけど他の書き方が思いつきません
何かありませんか?
2013/09/03(火) 08:33:35.63
何がダサいと感じるのかよくわからんので何も言えない
2013/09/03(火) 10:22:05.74
endの直前にbarをもう一度書かないといけないところがダサいと思うのです
2013/09/03(火) 13:34:18.83
tap や finally で書けない?
2013/09/04(水) 19:54:28.33
#load "dynlink.cma";;
#load "camlp4o.cma";;
#load "Camlp4Parsers/Camlp4ListComprehension.cmo";;


[x | x <- [1;2;3] ];;
- : int list = [1; 2; 3]

できた! すげー感動
2013/09/04(水) 20:04:23.38
[(x,y,z)|x<-[1;2;3;4;5;6;7;8;9;10];y<-[1;2;3;4;5;6;7;8;9;10];z<-[1;2;3;4;5;6;7;8;9;10];x*x+y*y=z*z;x+y+z=24];;
haskellの すごHの問題もできた! うおー俺は猛烈に感動している
ところでhaskellの[1,2..10]って書いて[1;2;3;4;5;6;7;8;9;10]のリストを一瞬で作る機能は流石にないよな
2013/09/04(水) 20:10:09.50
>>631
残念ながら出来ない

それにしても楽しそうだねw
2013/09/04(水) 20:16:21.51
うん 楽しい
関数型言語は最高やでぇぇ
2013/09/04(水) 20:45:29.31
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10103970335

こんな問題もサクっと4つの組
(85,71,59,50)が出てくる
凄いよぉぉぉ マヂで小学生からプログラムやるべきだな
2013/09/04(水) 21:02:36.14
日本語が理解できない
自然数の集合から無作為に選んだ4個の数が存在して、この4つの中から、さらに無作為に3個を選んで和を取り、それを4回試行したところ、
 180, 194, 206, 215
になった、ってことでいいの?
2013/09/04(水) 21:18:35.37
こいつこの調子でずっと喋り続ける気?
2013/09/04(水) 22:22:27.90
>>612==>>614==>>636
2013/09/04(水) 22:47:24.97
>>637
うむ
正しい == の使い方だ
2013/09/05(木) 01:56:06.71
camlp4で今ある文法を制限することって出来ますか?
括弧無しのタプルを排除してリストの区切りをコロンにしたいのですが。
2013/09/07(土) 03:15:14.14
>>629
batteriesの関数ですよね?まさにそういうのを探していました
batteriesは何となく名前が気に入らなくてスルーしてましたが食わず嫌いは良くないですね
2013/09/07(土) 03:56:00.85
OCamlのクロージャはそれなりにコストがあって、最適化もしてくれないので
>>626ぐらいならそのままにするなあ
642デフォルトの名無しさん
垢版 |
2013/09/09(月) 15:49:15.59
初めての言語に関数型選んでしまったから
Objectで詰んだ!
さっぱりわからん
2013/09/09(月) 17:10:04.82
OCamlのobjectは忘れるんだ、そうすればお前は強くなれる
っていうかfirst class moduleが入って、ただでさえ継子扱いだったobject/classに存在価値は無くなった
644デフォルトの名無しさん
垢版 |
2013/09/09(月) 17:38:01.62
おっとwikiみたらCoqの日本語版が登場してた
俺がCoqネタつぶやいたから誰か追加してくれたんだな
645デフォルトの名無しさん
垢版 |
2013/09/10(火) 10:39:57.58
CoqIDEでCtrl+Alt+↓ってやると
画面が上下さかさまになってビビったw
どんなバグなんだよwww
2013/09/10(火) 13:04:29.50
coqideってのが何かしらんが俺のWindowsでもそうなる
647デフォルトの名無しさん
垢版 |
2013/09/10(火) 13:15:41.31
>> 644
Coqのwikiってどこですか?私も気になります。
2013/09/10(火) 23:47:36.91
ディスプレイドライバの機能をCoqのせいにするなよ
2013/09/11(水) 00:25:24.14
CoqIDEの正当性はCoqで証明されておらんの?
650デフォルトの名無しさん
垢版 |
2013/09/11(水) 18:00:49.24
http://www.cis.upenn.edu/~bcpierce/sf/
http://proofcafe.org/sf/
Coq自身はしらんが
Coqの元のOCamlの正しさは証明されてるっぽい
2013/09/11(水) 19:05:49.78
型システム入門って読むべき?
2013/09/11(水) 19:35:45.08
よみなさい
2013/09/11(水) 19:54:09.22
>>651
入門書なんて読まなくていいよ
654デフォルトの名無しさん
垢版 |
2013/09/11(水) 20:41:01.16
入門って書いてあるけど
パラパラっと見たら全然入門じゃないんだけど・・・
大学受験数学参考書の
やさ理みたいな・・・全然優しく無いじゃんって
2013/09/11(水) 21:34:52.86
そもそも対象読者はどこを想定してるんだw
2013/09/11(水) 21:50:49.86
とりあえず英語できない人でしょ
2013/09/12(木) 14:07:31.89
スレ違いも甚だしいが、お前らの英語力ってどんくらい?今まで技術書は大体は読めるからいいもんと思っていたのだが、
ttp://www.readingsoft.com/
ここで測ったらwords per minuteが115とかいうとんでもない数値だった。
英語ネイティブの人間と同じ量の本を読むのに数倍の差をつけられてて、マジで不安になった。
同じ時間を費やして得られる知識が圧倒的に少ないのは如何なものか。全然読めないじゃないか。
658デフォルトの名無しさん
垢版 |
2013/09/12(木) 14:36:25.22
http://www.zynas.co.jp/genius/sokudoku/sokutei.html
日本語でどのぐらいよ
俺で1400字/分 
英語だと20letter(s)/minぐらいだろなw 1ページ読む頃には熟睡モードだぜ
659657
垢版 |
2013/09/12(木) 14:52:35.79
1025文字/分だった。日本語読むのは速い方だけどトップには及ばない。
自分は視力が矯正入れて0.7くらいだし、これ以上速くしようと思ったら怪しげな速読メソッドに手を出すしか無いのではと思っている。
というか1400って速すぎじゃね?すげーな。
2013/09/12(木) 15:10:15.73
103wpmに1080文字/分だった。
http://www.readingsoft.com/ は英文が平易すぎて、英語の小説読むより数倍速く読めたが……
2013/09/12(木) 15:19:20.14
>>657
73 wpm
理解優先で後戻りしまくったからな
テストと見せかけて宣伝文句を熟読させる手口とすぐに分かったw
2013/09/12(木) 15:29:49.44
>>660
読み易いように心を砕いて書いた文章と思った
2013/09/12(木) 16:23:13.27
146/wpm 100%だった
もうちょっと早く読めそうだ
2013/09/12(木) 18:20:09.98
思いきり話の腰を折ってすまないが、
日本語英語に関わらず、知識やイディオム仕入れておいて、
理解速度自体を上げる方のが遥かに重要だから、
ページ送りが遅くても気にするなよ。
2013/09/12(木) 20:00:36.43
いやいやその知識やイディオムを仕入れる速度にもかかってくるのよ。読み書きの速度ってさ。
これ以上はスレ違いだし荒らしになるからやめるけど、上で挙げられてたSoftware Foundationsの和訳をして公開したCoqスレの住人達には感謝してもしきれん。
2013/09/13(金) 10:05:08.46
ホントこんなに価値ある情報を無料で提供してくれるって凄いよね
2013/09/13(金) 10:13:47.96
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円になる組み合わせを考えてみました

ネストすればアイテム数をいくらでも増やせそうですが
もっとスッキリ書く方法はありませんか?
2013/09/13(金) 12:38:34.63
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)
669デフォルトの名無しさん
垢版 |
2013/09/13(金) 14:05:17.63
batteriesってどうやってつかうの?
2013/09/13(金) 15:13:13.02
>>665
どういう意味?
和訳してた人が速読を推奨してたの?
2013/09/13(金) 21:10:35.73
>>669
opamやocamlfindの使い方分かる?
その辺の設定済んでれば、ソースの最初でopen Batteriesするだけ
672デフォルトの名無しさん
垢版 |
2013/09/14(土) 01:13:42.13
>>671
わかんない
ググったらlinuxならできそうだけど
これwindowsで行けるの?cygwinってのが要る?
673デフォルトの名無しさん
垢版 |
2013/09/14(土) 03:59:21.98
batteries-2.1.tar.gz をダウソしてきて
cygwinってのから

$ tar zxvf batteries-2.1.tar.gzすればええんやな
2013/09/14(土) 21:13:00.38
>>622
んなわけねえだろ
コンパイラ作ってる奴がクソなだけだ
675デフォルトの名無しさん
垢版 |
2013/09/14(土) 21:17:30.82
やはりwindowsでOCamlならF#行った方がいい?
2013/09/14(土) 21:21:47.50
プラットフォームがWindowsに限定できるのなら、あえて茨の道を選ぶこともあるまい
2013/09/15(日) 03:38:59.44
F#ってべつにwindowsじゃなくても動くでしょ
2013/09/15(日) 04:18:36.52
動くけど、monoを入れる羽目になるし、.NET Frameworkが無いから旨さ半減
2013/09/15(日) 06:47:38.91
F#とOcamlって実行速度ちがってくるものなの?
2013/09/15(日) 08:16:48.29
OCamlはネイティブ
2013/09/15(日) 09:50:20.17
.NETはJITコンパイルされるし、OCamlのネイティブコンパイラの最適化は最低限だし
2013/09/15(日) 10:45:01.28
F#は.NETでも遅い方だろ
2013/09/15(日) 10:52:12.02
はいはい荒れるからこれで終わり
http://benchmarksgame.alioth.debian.org/u64q/benchmark.php?test=all&;lang=all&data=u64q
2013/09/15(日) 22:25:53.10
Real World OCaml読もうぜ!OCamlSpotterの人も評価してたがAppendix A: installationでopam + core + utopをいきなりインストールさせるのはびっくりした。
こいつらガチでOCamlを普段使いにしてやがる。
685デフォルトの名無しさん
垢版 |
2013/09/15(日) 22:30:57.96
日本語版早く
2013/09/15(日) 23:00:17.64
>>684
実際、実務でOCaml使っている人たちが書いてるからね
687デフォルトの名無しさん
垢版 |
2013/09/15(日) 23:02:44.61
って英語版も12月発売な上に
日本語版ってそれから1年後ぐらいになるのか
688デフォルトの名無しさん
垢版 |
2013/09/15(日) 23:05:28.42
普段使いってどういうこと?
スクリプト言語みたいに
ちょこちょこっとのコーディングもOCamlって事?
689デフォルトの名無しさん
垢版 |
2013/09/15(日) 23:15:21.68
あー やっぱLinuxかぁ
2013/09/16(月) 00:03:20.35
プログラミング演習のようなの実装させるより
Coreの拡張モジュールやp4使わせてるし
標準でやれることでもJane系にもっと便利なのあれば使ってる
691デフォルトの名無しさん
垢版 |
2013/09/16(月) 16:10:19.60
opamってlinuxの64bit専用?!
2013/09/17(火) 01:27:30.95
あー opam installで途中で止まるー
もう寝る 
2013/09/17(火) 03:26:52.06
アパーム!!
2013/09/17(火) 09:53:15.37
>>692 エラーメッセージはなんて出てますか? #opam
695デフォルトの名無しさん
垢版 |
2013/09/17(火) 12:09:35.38
>>694
寝て起きたら終わってた


エラーメッセージらしきものが出てたら
まだググればなんとなく解決の糸口を探せるんだけど
止まったように見えるのは勘弁してほしい・・・
2013/09/17(火) 12:15:30.59
Ubuntuだと入ってるのかもしらんが
Lubuntu入れたからm4ってのが足りなくて進まないのに難儀したわぁ
2013/09/17(火) 12:36:12.34
とりあえず opamからutopとcore入れたけど
他に入れといた方がいいってのある?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況