関数型プログラミング言語ML
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGMLは比較的学びやすく、関数型言語を学んでみたい人にもお奨めです。
MLの魅力に取りつかれた人も、MLをこれから学ぶ人もどうぞ。
参考:リンク集
http://www.gin.or.jp/users/daikoku/lang/func/ml.htm
0232213
NGNGサンキューでした。
0233コメント
NGNG0234age
NGNG(*'ー`*)
0235213
NGNGOcamlってかなり強力な言語みたい。SML以上かな。
0236デフォルトの名無しさん
NGNGその上にMLより速いです。
GUIも作れるようだし。
0237デフォルトの名無しさん
NGNGちょっと、そりゃないんじゃないの、って感じですが。
6. You may develop application programs, reusable components and other
software items that link with the original or modified versions of the
Software. These items, when distributed, are subject to the following
requirements:
a. You must ensure that all recipients of machine-executable
forms of these items are also able to receive and use the
complete machine-readable source code to the items without any
charge beyond the costs of data transfer.
b. You must explicitly license all recipients of your items to
use and re-distribute original and modified versions of the
items in both machine-executable and source code forms. The
recipients must be able to do so without any charges whatsoever,
and they must be able to re-distribute to anyone they choose.
c. If the items are not available to the general public, and the
initial developer of the Software requests a copy of the items,
then you must supply one.
0238デフォルトの名無しさん
NGNGhttp://camlcvs.inria.fr/cgi-bin/cvsweb.cgi/ocaml/LICENSE>>237
>>237
これは処理系そのものの制限なのでは?
「コンパイラ改造するの? いいけど、その時はソース見せてよね」といった感じの。
コンパイラはQPL、ライブラリはLGPLに手を入れたもの
(初めの方にある "As a special exception to" で始まる段を参照)
のようです。
excite翻訳ですぅ
6. オリジナルでリンクするか、ソフトウェアのバージョンを修正した適用プログラム、
再使用可能なコンポーネントおよび他のソフトウェア・アイテムを身につけてもよい。これらのアイテムは、分配された時、次の必要条件に従います:
a. さらに、これらのアイテムのマシン実行可能な形式の受取人がみなデータ・トランスファーのコストの向こうの料金のないアイテムへの
完全な機械可読のソース・コードを受け取り使用することができることを保証しなければなりません。
b. 明示的に、マシン実行可能なソース・コード形式中のアイテムのオリジナルで修正されたバージョンを使用し再度分配する許可を、
アイテムの受取人すべてに与えなければなりません。受取人は、チャージ少しでもなしでそのようにやっていくことができなければなりません、
また、それらは、選ぶ誰もに再度分配することができるに違いありません。
c. アイテムが一般大衆に利用可能でなく、ソフトウェアの初期の開発者が、アイテムのコピーを要求する場合、1つを供給しなければなりません。
0240デフォルトの名無しさん
NGNG書きまくって良いのでしょうか?
link with ってことはocamlのライブラリとか開発環境を
つくった場合にはどうなるんでしょう。
#入らぬ心配だとは言うな(笑
0241gggggggg ◆gggggggg
NGNG0242grrrrrrrrr
NGNG0243デフォルトの名無しさん
NGNGQPLの日本語訳です。
0244デフォルトの名無しさん
NGNGGPLじゃないらしい
0245デフォルトの名無しさん
NGNGOcamlのライセンスの疑惑を解決してください。
きもちわるひ。
0246デフォルトの名無しさん
NGNG238 が正解。コンパイラのライセンスの the Software って
のはコンパイラのことだから、コンパイラ自体のコードと
リンクしなければいいわけ。コンパイラの吐くコードに関し
ては言及していない。
普通にソフト開発するだけならば、標準ライブラリとしか
リンクしない。標準ライブラリは LGPL だったが(メーリング
リストでも議論されたけど)、商用ソフトの開発に Ocaml 使いた
いって人が標準ライブラリが LGPL じゃきついなーってんで
LGPL に手を入れたもの(リンクに関しての例外)になった。
あと、標準ライブラリにも一部ライセンスが違うものが含まれている
かもしれないことに注意(別ライセンスの C のライブラリを使ってた
りするらしい。Str モジュールとかだったかな)
0247238
NGNGhttp://www.gnu.org/philosophy/license-list.ja.html のQPLのところを参照。
その辺訂正。
0248213
NGNGOcamlでちょっと遊んでみました。
竹内関数。インタラクティブ、コンパイラだと
SMLの方が速いようです。
let rec f(x, y, z) =
if (x > y) then
f (f(x-1,y,z),f(y-1,z,x),f(z-1,x,y))
else
y;;
fun f(x,y,z) =
if (x > y) then
f (f(x-1,y,z),f(y-1,z,x),f(z-1,x,y))
else
y;
f(12,6,0);;
0249デフォルトの名無しさん
NGNGこんなんでいいのかな?
0250デフォルトの名無しさん
NGNGう〜む、独習書としては??です。
シリーズ0巻、、、。
(自然数を)「1から始めるのは素人です」と言っている
タジマ先生が思い浮かびました。
0251デフォルトの名無しさん
NGNG0252デフォルトの名無しさん
NGNGこのページに載っているソースが物凄く汚いと思うんですけど、
Ocamlではこの書き方が普通なんでしょうか?
なんか、萎えるなあ……。
0253デフォルトの名無しさん
NGNG> インタラクティブ、コンパイラだとSMLの方が速いようです。
ocamlの対話モードはバイトコードだけど、
sml/njのはネイティブコードにコンパイルしてるので自然かと。
0254デフォルトの名無しさん
NGNGたとえばどの辺が?(煽りじゃなくて、純粋な質問)
ちなみに、http://caml.inria.fr/FAQ/pgl-eng.htmlに「ガイドライン」がある。
個人的意見としては、確かにsyntaxは汚いかも…と思う。
0255デフォルトの名無しさん
NGNGということは、いちいちどのライブラリがどのライセンスか調べて、
それに従わないといけないってことですよね?
なんだかなあ。
MSVCの方がよっぽど気楽だなあ。
0256デフォルトの名無しさん
NGNGそれともメールで聞いたら答えてくれるのでしょうか?
OcamlのML・・じゃなくてメーリングリストに入っている人が(
ややこしい(笑))居られるみたいだから、その方なら簡単に
わかるのかな?
0257デフォルトの名無しさん
NGNGどの辺かなあ……。一行に詰め込んでいるところが沢山あるのでそう思っただけかもしれません。でもなんだか、
http://www.bagley.org/~doug/shootout/lang/smlnj/allsrc.shtml
とは違う。
>>255
そういったライブラリはどこかにリストアップされていると思います。
(そういったものの殆どがLGPLでしょうけど)
> MSVCの方がよっぽど気楽だなあ。
MSVCでライセンス関係で気にかけなければならないところってありましたっけ?
0258デフォルトの名無しさん
NGNG気にかけなくても良いから気楽なんでは?
0259デフォルトの名無しさん
NGNG「の方がよっぽど」との事なので、MSVCにも何かあるのかなあ、と。
0260デフォルトの名無しさん
NGNGSMLだろうがOcamlだろうがMSVCだろうがgccだろうが関係ないでしょ。
処理系が何だろうが、配布する時に同梱するライブラリのライセンスを確認するのは
あまりにも当然な事だと思うのだが、どうよ?
0261257,259
NGNG当然のことです。でもOcamlの場合、処理系に同梱されているライブラリすべてが同じライセンスという訳では無いのでややこしい、というそれだけの事。
Rubyの「regex.cはLGPLなんで気をつけてね(これはそのうち無くなるらしい)」と同じような物です。
0262名無しさん@お腹いっぱい。
NGNG0263デフォルトの名無しさん
NGNG0264デフォルトの名無しさん
NGNG程度の差はあれ、みんな混乱してるんだと思う。特にregexp関係は
そういう問題もあって、Jeromeが独自に開発中なんじゃなかったっけ。
(情報量がなくてスマソ)
0265デフォルトの名無しさん
NGNG0266デフォルトの名無しさん
NGNG>>248
tuple 使わないで let rec f x y z = ...
と書いてあげれば少し速くなるはずです。
参考→http://caml.inria.fr/FAQ/FAQ_EXPERT-eng.html#curried
>>252
先頭のackermann関数しか見てませんが...
if-then-else を全部一行で書いてるとか言うのは置いといて
関数本体は、書きたければ、こう書くこともできます
let rec ack = function
| (0, n) -> n + 1
| (m, 0) -> ack (m - 1, 1)
| (m, n) -> ack (m - 1, ack (m, n - 1))
0267デフォルトの名無しさん
NGNGDLLにしてライセンス逃れするわけにはいかないの?
0268248
NGNGカリー化すると速くなるのですね。計測しようとプログラムを書きました。
Ocamlは初めてなので拙い点はご容赦を
let timeRun f x =
let startTime = Sys.time() in
let _ = f x in
let endTime = Sys.time() in
let time = endTime -. startTime in
time;;
# timeRun f2 (12,6,0);;
- : float = 4.717
カリー化したものを計測するにはどうすれば?
考え中です。
0269248
NGNGlet rec f x y z =
if (x > y) then
f (f(x-1) y z) (f(y-1) z x) (f(z-1) x y)
else
y;;
let f3 z = f 12 6 z;;
# timeRun f3 0;;
- : float = 2.954
20年前の8ビット機に比べると現在のパソコンは
モンスターマシンですね。
0270顔も名前も出さずに毎月100万円
NGNGFuture-Web(フューチャーウェブ)登場
なんと10,000円単位の収入
●10,000円単位の高収入
1件につき最大10、000円の高額収入。月収100万円以上も可能。
●画期的なビジネス!
インターネットを利用したこれまでにない斬新で画期的なビジネスです。
●誰でも出来ます!
インターネットが出来る環境の方なら誰でも参加可能です。
●専門的な知識は一切不要!
ビジネスに必要なツールはすべて当社で用意いたします。また、サポ
ートも万全です。
●詳細は今すぐHPをご覧ください。
http://www.future-web.tv/7823/
0271デフォルトの名無しさん
NGNGNT系版でしか使えないんですね。
ちょっと残念。
0272デフォルトの名無しさん
NGNG0273デフォルトの名無しさん
NGNG>>272
googleで調べてね
この板にも載ってるし
0274デフォルトの名無しさん
NGNG野矢茂樹先生の本ですか??
0275デフォルトの名無しさん
NGNGのってなか
0276デフォルトの名無しさん
NGNG0277デフォルトの名無しさん
NGNGそうです。
「無限論の教室」 野矢茂樹 著 講談社現代新書
0278デフォルトの名無しさん
NGNGWin98のAPIがいいかげんなので切り捨てちゃいました。
ごめんね。
0279デフォルトの名無しさん
NGNGついでに。
http://caml.inria.fr/oreilly-book/
オライリーのOcaml本。英語版。
http://groups.google.com/groups?safe=off&group=comp.lang.ml&num=200
comp.lang.ml。
0280デフォルトの名無しさん
NGNG意味あんの?
0281デフォルトの名無しさん
NGNG,} {`i;:r,;'ニ (;;;;、` , r'
. {i' i:.'ー<.・)}:ム ヾi,
キタ━━━━━━━ノ // -r /:::ミ ('ーヽ━━━━━━━━━??!!
i゙ i:/ /二./ /',=、__ノi/
ヽ ヽ! {:::} //::::''´`'7!/
ヽ、__ヽ!l::i:::::ii;;;;;;;|,ノ
`ヽ、`ー""ヽ
`'ー-'''"
0282デフォルトの名無しさん
NGNG0283デフォルトの名無しさん
NGNG型推論?
結構簡単なシステムだよ。(って知ってるか)
うざかったら型を書けば良い。
なにか問題あるか?
0284デフォルトの名無しさん
NGNGだから意味あんのか?と。
0285283
NGNGMLを使う理由って型推論があるから?
違うんじゃない?
0286デフォルトの名無しさん
NGNG0287デフォルトの名無しさん
NGNGわかっていないってことは、プログラマとしてアボーンだよ。
型推論なんかあってもなくても本質的な違いはない。それよりは、
静的型チェックがあることが重要
0289デフォルトの名無しさん
NGNGっていうものに使うんでしょうね?
型を書かない方が良い(柔軟性が高まる?)ばあいもあるのかな?
個人的には関数内で書く関数は、型を書きたくないね。
λっぽくない
0290280
NGNG0291デフォルトの名無しさん
NGNGプログラムは証明なんだろうか?
ちがうと思う。
プログラムはプログラム。型は型。
それ以上でもそれ以下でもないと思う。
0292デフォルトの名無しさん
NGNG0293デフォルトの名無しさん
NGNGどういう意味?
0294デフォルトの名無しさん
NGNG0295デフォルトの名無しさん
NGNG0296デフォルトの名無しさん
NGNG0297デフォルトの名無しさん
NGNG禿同。
MLの型推論は関数の定義において冗長な型宣言が
不要だというだけだものね。
0298280
NGNG0300デフォルトの名無しさん
NGNG要らないから無くせというのは短絡的過ぎない?
要らないものは無くせというなら自分も無くなせば?
必要不可欠な人間なんて居ないないんだから。
0301280
NGNGということでいいんだな?ちょっと便利なだけってことだな?じゃやっぱ
いらねーや。うざい。
0302デフォルトの名無しさん
NGNG他の言語使えば?
0303デフォルトの名無しさん
NGNG使ってから書け。
0305デフォルトの名無しさん
NGNG0306デフォルトの名無しさん
NGNGなぜ?
0307デフォルトの名無しさん
NGNGポインタ(MLだとref)と整数をプログラマが知らず知らずのうちに間違えてないかとか。
型システムには静的な型システムと動的な型システムがあって、
実行時(動的)に型を確かめるか、コンパイル時(静的)に型を確かめるかが違う。
MLのように静的に型を確める機能をつけると言語に対する制約が強くなるけど、
実行時の型検査がいらなくなるからプログラムは早くなる。
schemeとかperlは実行時に型検査をしなくちゃいけないから遅い。
C言語はちゃんとした型システムがないから動作が危険。
うんちくでした。
簡単にいうと安全で効率よく実行できるってのがMLの型規則の意味。
0308デフォルトの名無しさん
NGNG型安全だからといっても、プログラムが安全という訳じゃないと思う。
>schemeとかperlは実行時に型検査をしなくちゃいけないから遅い。
別に、致命的に遅いっていう訳じゃないなら問題ないのでは?
入り口の一箇所でチェックすればいいんだし。
0309デフォルトの名無しさん
NGNG安全の定義によるけど、とりあえずsegmentation faultを起こすようなメモリアクセスは回避できる。
その程度の安全の保証ってことね。無限ループの検出なんかはもっとflow-sensitiveにやんなきゃできないしね。
Cでよくあるsegmentation faultとかバスエラーなんかはC言語の外のバグでOSが検出してんだけど、そういうの
をどうにか言語の中で検出しようって感じ?
遅いのは別に問題っていってないけど、速いってのは遅いってのよりもいいでしょ。
言語の自由さよりも速さを重視してる。
あと入り口の1箇所(関数のはじめとか?)でチェックするだけじゃ駄目な場合もいっぱい。
0310308
NGNG>遅いのは別に問題っていってないけど、速いってのは遅いってのよりもいいでしょ。
たしかに。
コンパイル時にチェックできるのが型だけっていうのが寂しいねー。
コンパイル時に表明がチェックできれば良くなるような気が。
誰か表明の推論エンジン作ってくんないかな?
小規模の言語で無いと出来ないだろうけど。
0311デフォルトの名無しさん
NGNG> Cでよくあるsegmentation faultとかバスエラーなんかはC言語の外のバグでOS
> が検出してんだけど、そういうの
> をどうにか言語の中で検出しようって感じ?
その考えで出来た高級アセンブラって無い物なんだろうか?
Cを駆逐できるほどの……。
0312デフォルトの名無しさん
NGNGなんかTAL(typed assembly language)っていう型付きのアセンブラ言語があった気が。
Javaのバイトコードも一種の型付きマシン語と見なすこともできると思う。
表明ってなんですか?
0313デフォルトの名無しさん
NGNG便利と思ってます。
0314デフォルトの名無しさん
NGNGEiffelの表明のことです。
JavaのAssert文でも良いです。
プログラムが正しく動く条件を外部に表明すること。
0315デフォルトの名無しさん
NGNG型に情報を付加してそれをflow解析する論文があったような。
File型からreadするときにちゃんとread用にopenされてるかどうか
コンパイル時にチェックできるやつが。
0316デフォルトの名無しさん
NGNGどんな論文?
タイトルとか書いた人とかURLとか教えてくれるとうれしーなー。
型に情報を付加するというのは良いアイデアだと思う。
多相型かたに型以外のものが付加できるようにするというのも
面白いかもしれない。
0317デフォルトの名無しさん
NGNGFlow-Sensitive Type Qualifiers
Jeffrey S.Foster, Tachio Terauchi, Alex Aiken
でも落ちてるとこが見つからない。なんでだろ?
僕はどこから落としたんだろう?
ごめんなさい。
0318デフォルトの名無しさん
NGNG0319316
NGNGgoogleで検索かけたら
Jeffrey S.Fosterさんとnecのページに載ってました。
これから落として読んでみます。
ttp://www.cs.berkeley.edu/~jfoster/
ttp://citeseer.nj.nec.com/492179.html
0320305じゃないけど
NGNG型推論が無いとコンパイラは型エラーだしてくれないのでは?
もしくは片っ端から型を宣言するか。
0321デフォルトの名無しさん
NGNGこれでいいじゃないか?
0323デフォルトの名無しさん
NGNG多相型を捨てるのか?
たとえ明示的に型を宣言しても、
型変数を使うかぎりは型推論のお世話にならざるを得ないだろ。
0324デフォルトの名無しさん
NGNGえっ?
型変数に型推論は必要ないでしょ?
C++やEiffelは総称(型変数)があっても型推論は無いでしょ?
型変数も変数なんだから、外部から型を与えてあげればイイ。
0325デフォルトの名無しさん
NGNG0326デフォルトの名無しさん
NGNG0327デフォルトの名無しさん
NGNG要は実用上の問題ということ
0328デフォルトの名無しさん
NGNG(a) MLでは、型推論を使わないで明示的に型を書く「こともできる」
(b) C++では、型を明示的に書か「なければならない」
よって必然的に、少なくとも (a) >= (b)
で、C++のテンプレートライブラリとかをヘビーに使ってればすぐにわかるが、
総称型なんかを明示的に書くのは超激うざい。
よって (a) > (b)
で、型推論がいらないと言ってる今までのカキコはすべて
根本的な事項を誤解してるので、勉強してから出直してきてよし。
もっとまともな批判なら、みんなも真摯に対応すると思われ。
(今でも十分に真摯だが)
終了〜
0329デフォルトの名無しさん
NGNG> 型推論がいらないと言ってる今までのカキコ
試験の○×問題に採用しようYO!
0330デフォルトの名無しさん
NGNG# let id (x : 'a) = x ;;
val id : 'a -> 'a = <fun>
とか
# let id : 'a -> 'a = fun (x : 'a) -> x ;;
val id : 'a -> 'a = <fun>
とか。
>>328
確かに型推論がないと、これだけでもすでにうざい気が…
誰かC++で同じこと書いてみて
0331デフォルトの名無しさん
NGNGど素人です。北野さんのHPで勉強は十分でしょうか?
■ このスレッドは過去ログ倉庫に格納されています