関数型言語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/
2011/07/30(土) 20:08:56.47
>>443
こーいうやつはプログラミングの勉強自体が目的だろ。
2011/07/30(土) 20:16:25.35
>>444
プログラミングの勉強自体が目的ならhaskell一択
2011/07/30(土) 20:42:08.59
>>444
はい、その通りです。
PHPとJavaとJavaScriptはある程度書けますが、関数型言語をなにかひとつみにつけようと思います。

>>445
よろしければ理由を教えてください。
ぐぐった感じでは、haskellはモナドというのが難しくて多くの人が挫折しているようので、OCamlに傾いてます。
2011/07/30(土) 20:52:58.37
>>446
勉強ってことだし、関数な考え方を得ようってなら純粋なHaskellの方を推奨
448デフォルトの名無しさん
垢版 |
2011/07/30(土) 20:54:22.93
勉強自体が目的ならなんで両方やらないのっていう
2011/07/30(土) 20:56:02.64
あと入門用に、英語読めるなら、比較的平易な英文で書いてある

http://learnyouahaskell.com/

を挙げておきます。下の方にあるonlineを選ぶと、売っているものに近い内容が読めますよ。
2011/07/30(土) 21:05:00.48
OCamlの入門書が1冊、Haskellの入門書が数冊出てるからどれか1つ、
とりあえず借りるか買うかして、それぞれ第1章ぐらいやってみなさい。
2011/07/30(土) 21:05:33.97
>>446
関数型言語の特徴が余す事なく取り入れられてる
モナドは使う分には難しくない
使う分にはシンプル イズ ベストな書き方がやり易い言語

モナドを分からないと使えるようにならないと勘違いして脱落する人多いけど、モナドの理論的背景を理解する必要は無い
気になるなら気長に勉強しなされ

OCamlはループも有るし、副作用対策諦めてるし、手続き型言語に限りなく近い関数型言語って感じ

速いコード吐けるけど、昨今の関数型言語の特徴取り入れた手続き型言語が多い時代に勉強する意味は薄い
2011/07/30(土) 21:07:10.73
手続きばっかだっし、古典のschemeでいいんじゃねーの?
2011/07/30(土) 21:10:08.69
Lisp族はLisp族で悪くないけど、関数型プログラミングを今時勉強するならその選択はない。
2011/07/30(土) 21:16:22.99
>>452
カリー分と遅延評価がデフォルトで付いてない
自分で同じ事を再現とかは出来るけど、それじゃ関数型言語の学習とは違う
2011/07/30(土) 21:20:58.25
>>449
haskellスレで翻訳中って聞いたぞ
あと、kindleでサンプル読んだ限りじゃプログラミングhaskellの内容を砕けた言葉とイラストで書いてるだけに見える
内容的にはすでに翻訳されてるプログラミングhaskellで十分
2011/07/30(土) 21:28:52.08
みなさん、ありがとうございます。
OCamlスレなのにHaskell勧める人ばかりなので、OCamlに未練はあるけど、思い切ってHaskellやってみようと思います。
2011/07/30(土) 21:34:22.91
>>456
いや。。。
haskellもMLの子孫なんだが。。。
2011/07/30(土) 21:36:14.27
>>456
俺はHaskell→OCamlと来た。
どっち先でもいいし、両方やればいいんじゃないだろうか。
片方しかやっちゃいけない決まりはないんだし。
面白いことは何でもやるべきだよ。
ミニ四駆だって、マグナムセイバーを買う傍ら、ソニックセイバーも買っただろ。それと同じ。
2011/07/30(土) 22:15:41.84
そんなことはどうでもいい。OCamlのサイトが404だ。
http://caml.inria.fr/ocaml
2011/07/30(土) 23:17:43.26
げ、ほんとだ
2011/07/30(土) 23:23:32.07
すごいタイミング
>>456にはOCamlと縁が無かったんだな。。。
2011/07/30(土) 23:29:26.27
ついにオワコンか
2011/07/30(土) 23:50:18.39
OCamlがOCamlとして生まれ変わった際のゴタゴタだそうだよ
2011/07/31(日) 21:38:50.21
http://twitter.com/#!/camlspotter/status/97519093602717696
>描いたのは俺!
>RT @y_echo
>RT @kinaba: なにがあったのwww
>RT @kikx これは変わりすぎだろ!
>RT @yoshihiro503 ちょ、 OCaml のサイトが激しくイメチェンしてる caml.inria.fr
2011/08/01(月) 08:56:35.19
OCamlってもう手に入らないん?
2011/08/01(月) 10:15:28.29
>>465
http://twitter.com/#!/camlspotter/status/97683309177475073
>一つだけ皆さんに言っておきます。毎年この時期には OCaml には何かが起きます。
>それはリア充関係者がバカンスに行ってしまって連絡が取れなくなるからです。
> RT @ytomino ocamlがついに滅んだと聞いて(遅い
http://twitter.com/#!/camlspotter/status/97685810127716353
>てか週末にサーバ不調になったら48時間止まるのあたりまえやろ?人間として。
http://twitter.com/#!/camlspotter/status/97686190618181632
>と haskell.org が落ちたときには wktk してた人が言っても説得力ありませんな

とりあえずフランスの月曜日昼(日本時間21時ごろ)まで待ちましょう。
それまでに復旧しなければ長期化確定ですね。
2011/08/01(月) 10:34:00.78
http://proofcafe.co.cc/ocaml/
468デフォルトの名無しさん
垢版 |
2011/08/01(月) 22:02:08.55
>>466
直らんね。もうしばらく待つか。
2011/08/01(月) 22:10:14.76
復活したね
2011/08/02(火) 18:02:01.87
Lisp族はいいぞ。でもclojureを触っているとhaskellの影響がかなり大きい。

ocamlも触ってみたいけど、いまHaskell勉強中なんだ。たぶん、来年くらいには
やれればな。HaskellってLispと同じでプログラム作成までの抽象化も含めた
戦略を練るのに時間がかかる言語って感じがしました。Ocamlも同じなんだろうね。
2011/08/02(火) 20:08:11.41
haskellはデータ構造を作るプログラミングになるって、山本和彦さんが言ってた
2011/08/02(火) 20:23:02.98
>>470
Haskell影響は並列周りでしょ。
そもそもSTMはHaskell由来じゃないし。
他はもろLisp直系じゃん。
2011/08/02(火) 21:58:52.67
>>472
見た目だけで話してるでしょ?
実際に触ってみればわかるけど、無限ストリーム近辺の関数はHaskellと
かなり近いよ。takeとかその辺のことね。common lispでも自作する方法は
あってもこの手の物は標準でないしね。
だから、リストの取り扱いってがhaskellに近くなってる。
>>471
なるほど
2011/08/02(火) 23:33:03.74
takeはHaskell以前からある。
2011/08/03(水) 02:04:20.65
>>472
> そもそもSTMはHaskell由来じゃないし。

でも中興の祖はHaskellの人(Tim Harris)じゃないっけ?
2011/08/03(水) 02:21:43.19
それはそう。Monadの経験が役に立った。
2011/08/03(水) 09:37:38.27
>>474
ミランダとかなの?よくしらないけど(wikiでちょっと見たけど、
haskellの親玉っぽかった。)
それはともかく、Clojureが関数型の大きな影響をかんじるのは
イミュータブルなところかも。あれのお陰で、副作用をもたせようと
思ったら基本的にSTMの部分を活用しなきゃならない。(java固有の
ライブラリは例外的なんだけど。)それと遅延評価言語だって
ところがcommon lisp を触ってる時よりhaskellの影響を感じやすいのかも。
あとは内包表記かな。wikiにはlisp,ML, haskell erlangが影響を受けた言語
とかかれている。
478デフォルトの名無しさん
垢版 |
2011/08/19(金) 10:50:16.31
R診たいなことが全部できるMLないのかよ。
2011/09/19(月) 21:56:29.91
卒業研究でOCamlのライブラリ作ってます。
おもしろいことありますでしょうか?
2011/09/19(月) 23:59:49.52
SML#の新verがひっそり出てた
2011/09/24(土) 23:23:23.61
>>479
どんなライブラリでしょうか?
2011/09/25(日) 11:44:54.04
>>479
どんなライブラリをつくったら面白いでしょうか?
なのか
ライブラリを作ることはテーマとして面白味があるでしょうか?
なのか。
2011/09/27(火) 20:28:58.48
^^;
2011/09/27(火) 20:52:03.96
OpenFlow コントローラのライブラリなどはいかが?
比較的、ホットなトピックだと思うけど。

http://www.google.co.jp/search?q=functional+reactive+programming+openflow
2011/09/29(木) 14:23:07.44
MLの型推論の部分だけ「俺言語」の中に取り込みたい
型推論の部分だけ分かりやすくコンパクトにまとめられたコードどこかにないでしょうか
2011/09/29(木) 15:11:00.44
>>485
http://en.wikipedia.org/wiki/Hindley%E2%80%93Milner
2011/09/29(木) 15:56:30.36
>>485
このテキストの17章
http://www.scala-lang.org/docu/files/ScalaByExample.pdf
タイガー本の16章
http://www.cs.princeton.edu/~appel/modern/ml/
488365
垢版 |
2011/09/29(木) 18:07:57.87
>>485
Prolog で型チェック:Rainy Day Codings:So-net blog
 http://rainyday.blog.so-net.ne.jp/2008-06-16

題名は型チェックだけど、コードはまぎれもなく型推論
2011/09/29(木) 19:09:02.35
ああPrologだから単一化で型推論が起きるのか。
2011/10/04(火) 18:43:07.61
prologで型推定が一番楽にできそう
しかし返値しか推定してないね
2011/10/06(木) 15:33:53.10
SMLやろうと思うんだけど、関数書いたファイルはどこ入れときゃいいの?
2011/10/06(木) 19:31:29.68
WinにもOCaml3.12.1きてるー
ttp://gallium.inria.fr/~protzenk/caml-installer.html
493sage
垢版 |
2011/10/06(木) 20:07:16.49
>>492
SML/NJの場合だと、適当なファイル(例えばhoge.sml)に保存して、保存した
フォルダでNJの対話環境を起動して、
use "hoge.sml"
とすればよい。useはカレントディレクトリからソースを読み込む関数で、
カレントディレクトリの取得/変更は、
OS.FileSys.getDirとOS.FileSys.chDirでできる。




2011/10/06(木) 21:24:34.13
>>493
ありがとう!
2011/10/11(火) 22:10:01.73
http://queue.acm.org/detail.cfm?id=2038036

これみるとC#とかやってられんな
2011/10/13(木) 22:44:28.70
型推論があるから簡潔になるのか
パターンマッチがあるから簡潔になるのか
2011/10/13(木) 22:47:43.98
両方
2011/10/13(木) 23:19:58.73
高階関数とカリー化も簡潔に書くのに一役買ってる
2011/10/14(金) 07:40:42.96
>>495
ひどいよな。C#じゃ複雑なデータ構造を扱おうなんてすると沼じゃないか!
今Haskellの勉強をしててOcamlは読んだことはなかったんだけど
読めるもんだなとも思った。
2011/10/14(金) 07:48:35.09
The C# code, while functionally equivalent, looks cluttered,
with the real structure obscured by syntactic noise.

事実だけど、辛辣だな。
2011/10/14(金) 11:38:18.36
>>499
関数型言語群はMLの影響が強いからね。
C言語系という言い方では、ML系と言ってしまってもいい。
2011/10/14(金) 21:38:01.24
>>501
なるほど、ML系かぁ。そういわれれば納得です。
2011/10/14(金) 22:41:41.95
C#とかJavaとかはジェネリックが狂ってるな
2011/10/16(日) 05:15:33.48
js_of_ocaml が面白そうだな
505デフォルトの名無しさん
垢版 |
2011/10/19(水) 21:52:08.21
ocamlてmain関数的なエントリポイントって無いの?
Pythonみたいな泥臭い方法でもいいんだけど.
2011/10/20(木) 12:56:49.09
具体的に OCaml で何をしたいのか、Python のどこがダサいのか
書いた方が答をもらいやすいよ
2011/10/20(木) 14:05:46.81
>>505
OCamlにエントリポイントはないです。__main__とかないです。
ocamlc -o a.out a.ml b.ml c.mlとしてコンパイルすると、
a.outの動きとしてはmodule A,B,Cの順番で評価されるイメージになります。
2011/11/06(日) 03:27:50.02
最近HaskellからOCamlに興味を持って少し触り始めたんですが,OCamlの対話環境にはghciの「:i 」みたいなものは無いんでしょうか?
2011/11/06(日) 06:11:24.22
「なぜ次に学ぶ言語は関数型であるべきか」
http://d.hatena.ne.jp/ymotongpoo/20111105/1320506449
原文: http://queue.acm.org/detail.cfm?id=2038036
2011/11/06(日) 22:31:50.25
toplevel の pretty printer を普通のプログラム内で使う方法ってありますか。
2011/11/07(月) 22:42:07.36
>>509
どしょっぱつの,Sometimes, が訳されていないとか,いろいろと
気になるところはあるけれど,大意は伝わった。うむうむ。
2011/11/12(土) 05:42:33.31
>>510 #install_printer のやつ?
2011/11/12(土) 05:53:40.36
>>510 言語は?
2011/11/19(土) 10:47:17.91
http://scan.netsecurity.ne.jp/article/img/2011/11/13/27625/93.html
tokuhirom、ma.la?っていう人の話だけ聞きたい
色々なスレで見かけるけどWEB業界で有名らしいね
動画ありませんか?
2011/11/23(水) 00:53:05.05
The little MLerの情報って調べたけど少ないね。大学の図書館
とかなら有りそうに思うけど、今は大学と関係ないから探せんわ。
SML中心で書いてるようだ。Ocamlへの改変の仕方ものってる
というのはgoogle booksでわかった。
使って学習した人っておらんの?
2011/11/23(水) 09:07:06.79
NACSIS Webcatで検索するか買えば?
面白いよ。
2011/11/23(水) 14:49:34.72
NACSIS Webcatか
http://webcat.nii.ac.jp/cgi-bin/shsproc?id=BA3501073X
意外とおいてるところ少ないね。今学習してる本が片付いたら
購入検討するわ。
2011/11/23(水) 15:07:11.14
http://www.d12k.org/tso/intro.html
2011/12/10(土) 10:15:38.86
age
2011/12/18(日) 01:18:07.20
MLってCACHEに使われてるんだっけ?
RDBでないDBに興味を持ったので調べ始めたんだけど、 ML、CACHEとも事例が中々見つからない...
521デフォルトの名無しさん
垢版 |
2012/01/02(月) 00:09:12.82
OCaml のモジュールについて質問です.
たとえば
A.B
A.C
A.D
みたいにネストしたモジュールをそれぞれ分割されたファイル(a/b.ml, a/c.ml, a/d.ml など階層化されたディレクトリに分けられる?)に書くには OCaml ではどういう方法が一般的でしょうか?
2012/01/19(木) 07:56:03.89
ocamlc -pack
2012/03/29(木) 00:44:48.75
SML#
http://partake.in/events/f04706e0-0eac-4751-901f-41707bdfb1ef
524デフォルトの名無しさん
垢版 |
2012/04/22(日) 14:29:24.78
MLの無名関数 (fn x => x + 1 みたいなの)って再帰的な定義をする記法はないのですか?
fn n => n * (fn n-1) みたいな感じで。
2012/04/22(日) 17:17:03.18
>>524
どうしてもやりたいならY combinatorを定義して使うとか:
let rec y f x = f (y f) x;;
(y (fun f x -> match x with 0 -> 1 | n -> n * f (n-1))) 10;;
2012/04/23(月) 08:12:58.62
>>524 そのため(名前を付けて循環定義にするため)に let rec があるので
let rec と組み合わせればいいと思うんだけど、let rec と組み合わせたくない
理由とかある?
2012/04/23(月) 20:37:41.35
SML/NJでdatatype 'a tree = Empty | Node of 'a * 'a tree * 'a treeとかやっといて、適当な深い木を定義してやると
表示が"Node #"と出てきて省略されてしまうんだけど、略記せずに全部出力させる方法があれば教えて。
2012/04/23(月) 21:20:09.21
自分でプリンタ書けよ
2012/04/27(金) 00:54:20.88
camlp4 使った奴でよくみる pa_* な名前の奴の pa って何の略なんだ?
2012/04/29(日) 02:59:34.92
PArsing
http://mjambon.com/extend-ocaml-syntax.html
2012/04/30(月) 15:05:27.19
>>530
おお、ありがとう!
532デフォルトの名無しさん
垢版 |
2012/05/08(火) 20:26:45.44
>>527
以下2つに適当に大きな数字を書き込む。
Control.Print.printLength;
Control.Print.printDepth;
あと、
Control.Print.out
も便利。何もしない関数に置き換えると、エコーバックを消せる。
2012/06/07(木) 13:35:08.25
ttp://www.amazon.co.jp/Modern-Functional-Programming-Chris-Reade/dp/0201648644/ref=sr_1_2?s=english-books&ie=UTF8&qid=1339043582&sr=1-2

www
2012/06/07(木) 13:40:40.11
どこからつっこめばいいの…w
2012/06/07(木) 17:40:09.00
> 掲載画像とお届けする商品の表紙が異なる場合があります。ご了承ください。

とあるけど、どういうことだろう
2012/06/07(木) 21:01:28.02
オリンピックをもう一回
2012/06/11(月) 15:25:00.19
300?
2012/07/25(水) 19:10:23.62
>>534
>出版社: Addison-Wesley (2017/11/20)

2017年・・・
539デフォルトの名無しさん
垢版 |
2012/07/25(水) 20:56:09.52
OCamlで
 int_of_float -0.7;;
がエラーになるんですが、どうして?

Error: This expression has type float -> int
but an expression was expected of type int

ちなみに、、
# int_of_float 0.7;;
- : int = 0

# -0.7;;
- : float = -0.7

-0.7はfloatじゃないの?何がダメなの?
2012/07/25(水) 21:13:02.20
中置関数 (-) : int -> int -> int
ががっつり int_of_float を引数に取っているわけで。
int_of_float (-0.7) で使ってください。
2012/07/25(水) 22:13:31.14
>>540
そういうことでしたか!
ありがとうございます
2012/07/28(土) 13:56:10.63
>>541
~-.0.7 と書いても良いね
2012/07/29(日) 11:24:50.70
いつの間にか OCaml4.00.0
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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