関数型言語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/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
2012/07/29(日) 12:34:47.25
岡村4.00.0
2012/07/30(月) 17:15:20.50
OCaml
コンパイルして、nativeなコード吐いて、不思議な実行のさせかたしてるのね
2012/07/30(月) 22:50:31.73
どのへんが不思議なんだ?
547デフォルトの名無しさん
垢版 |
2012/08/12(日) 14:06:23.13
わからない?
2012/08/12(日) 23:04:07.50
わからない。教えて下さい。お願いします。
2012/08/13(月) 00:04:10.53
#!/usr/bin/ocamlrun
2012/08/13(月) 01:29:14.36
nativeの意味を取り違えてない?
2012/08/13(月) 03:03:42.64
スクリプトじゃないのはdumpすればわかるでしょ
2012/08/13(月) 11:53:42.11
http://www002.upp.so-net.ne.jp/mamewo/ml.html#compile
2012/08/29(水) 23:04:20.96
ねんがんのLittle MLerをてにいれたぞ

OCamlの場合の読み替え方法も載ってるけど、素直にSMLでやった方が良いのかな
てか読んでる人はいるんだろうか・・・
2012/09/02(日) 03:59:59.39
以下の関数でprint_int x という文を入れると構文エラーになってしまうのですが、何がいけないのでしょうか?

let hoge x =
print_int x ← これ
if x=0 then 0
else x + 10

let test1 = hoge 0 = 0
let test2 = hoge 10 = 20


# #use "printtest.ml";;
File "printtest.ml", line 3, characters 4-6:
Error: Syntax error ← 原因は?
2012/09/02(日) 08:57:34.05
print_int x;
2012/09/02(日) 10:39:53.93
>>555
Thx!出来ました
セミコロンを使うのはインタプリタだけなのかと思っていました
調べてみたら、配列の区切りでも使われるんですね
2012/09/02(日) 10:47:02.65
ocamlか。おかのコードはごみごみしくて醜いな
2012/09/02(日) 10:53:23.84
print_string "あ、OCamlです。言ってませんでしたね。すいません¥n";
2012/09/02(日) 15:19:34.02
>>556
インタプリタの文の区切りは ;; (セミコロンが2つ)
逐次実行は ; (この場合セミコロンの前の式の型が unit でない場合警告が出る)
配列の区切りも ; (これは配列の括弧 [ ] の中でのみ出現する)
2012/09/28(金) 23:37:26.16
.net におけるOcamlがF#ですが、
JVM上でのOcaml相当のものはないのでしょうか?
2012/09/29(土) 11:26:57.28
OCaml-Javaは? http://ocamljava.x9c.fr/
2012/09/30(日) 17:21:46.18
>>561
おお、これってチラ見したときは単なるライブラリレベルでのサポートかと
思ってましたが、完全なJVM実装なんですね。
2012/10/03(水) 00:49:32.12
http://www.lexifi.com/ml2012/
今年のMLワークショップでもocaml-javaの紹介してたみたい。
どのぐらい出来てるんだろう。
パフォーマンスの話も載ってた。
1/3ぐらい?
2012/10/12(金) 11:22:15.18
# type t = int * t;;
Error: The type abbreviation u is cyclic
# type t = { x: int; y: t };;
type t = { x : int; y : t; }

# type u = u option;;
Error: The type abbreviation u is cyclic
# type u = Some of u | None;;
type u = Some of u | None

だれか解説してくれ。
2012/10/12(金) 12:17:07.41
>>563
http://shootout.alioth.debian.org/
の中くらいのサイズのやつを8つベンチマーク。
0.96倍から7.14倍の実行速度。
3倍内に収まったのが6つあるぜ。

intを扱うベンチが遅い。boxingされちゃうから。
そういうベンチを省くと平均で倍は遅くない。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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