関数型言語ML (SML, OCaml, etc.), Part 6
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2009/06/15(月) 07:15:21MLは、確固とした理論的背景を持つ言語でありながら、
現実的なソフトの開発にも使用できる実用性を備えた言語です。
また、プログラミングの初心者が最初に学習する言語としても優れています。
総本山
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/
0045デフォルトの名無しさん
2009/06/23(火) 17:28:56そうだとするとあまりに漠然としていて多少の窮屈感が欲しくなるな。
ノーパンでスカートを穿いているような、あるいは力戦になって次に
なにを指せばいいのかわからない、そんな感じ。
そのうちそういうのがまとめられればいいなぁ。
0046デフォルトの名無しさん
2009/06/23(火) 17:29:56>>44が正解
0047デフォルトの名無しさん
2009/06/23(火) 17:58:00おっしゃる事があまりに漠然としていて多少の具体感が欲しくなるな。
ノーパンでスカートも穿いてないような、あるいは序盤なのに次に
なにを指せばいいのかわかってない、そんな感じ。
そのうちそういうのをまとめられるようになってくれ。
0048デフォルトの名無しさん
2009/06/23(火) 18:23:04関数型が嫌いor慣れてない人の多くは純粋関数型の副作用の無い世界を
非常に窮屈だと感じるわけで。不感症になったのも慣れということだなw
0049デフォルトの名無しさん
2009/06/23(火) 18:37:21そのまんま、関数型スタイルだろ。
0050デフォルトの名無しさん
2009/06/23(火) 21:34:35ありがとん参考になった!
ベンチマークだけみて速いなーとか思っただけなんで、
そんな背景があったとはまったく知らんかったyo
0051デフォルトの名無しさん
2009/06/24(水) 09:15:16GC なしで早いよーと叫ばれてもね。
普通にMLのプログラムがコンパイル出来るようになったら
ベンチを見てみてもいい。
0052デフォルトの名無しさん
2009/06/24(水) 09:18:35デザインパターンってぶっちゃけてみれば、バッドノウハウのことでしょ。
関数型言語にそんなのないよ。
0053デフォルトの名無しさん
2009/06/24(水) 09:23:490054デフォルトの名無しさん
2009/06/24(水) 19:11:49関数型言語にデザインパターンがないということはないだろう。要は「あるあるネタ集」(の粒度がある程度あるもの)のことなんだから。
オブジェクト指向でのデザインパターンは関数型言語ではバッドノウハウになり得るというのは同意。
0055デフォルトの名無しさん
2009/06/24(水) 19:16:04バッドノウハウはアンチパターン
0056デフォルトの名無しさん
2009/06/24(水) 21:07:530057デフォルトの名無しさん
2009/06/24(水) 21:30:130058デフォルトの名無しさん
2009/06/24(水) 21:36:15特に関数型言語が好きだからとかではなく。客観的事実。
0059デフォルトの名無しさん
2009/06/24(水) 21:37:58スレッドで動いてるガベコレも時々挙動がおかしくなるからうんこ。
0060デフォルトの名無しさん
2009/06/24(水) 22:47:46C・Y・C第1巻は、発売未定です。夢野カケラ
OCaml : チクショオオオオ!くらえC++!ガベージコレクション!
C++ : さあ来いOCaml!実はオレは一回不正なメモリ操作しただけで死ぬぞオオ!
(ガッ)
C++ : グアアアア!こ、この地上でもっともバカな言語と呼ばれる四天王のC++が…
こんな不純粋関数言語に…バ…バカなアアアアアア
(ドドドドド)
C++ : グアアアア
Delphi : C++がやられたようだな…
VB : フフフ…奴は四天王の中でも最弱…
C# : MLごときに負けるとは手続き型言語の面汚しよ…
OCaml : くらええええ!
(ズサ)
3言語 : グアアアアアアア
OCaml : やった…ついに四天王を倒したぞ…これでJavaのいるWindowsのWindowが開かれる!!
Java : よく来たなObjective Caml…待っていたぞ…
(ギイイイイイイ)
OCaml : こ…ここがWindowsだったのか…!感じる…Javaの魔力を…
Java : OCamlよ…戦う前に一つ言っておくことがある。お前は私を倒すのに
『オブジェクト指向』が必要だと思っているようだが…別になくても倒せる
OCaml : な 何だって!?
Java : そしてお前の入門書は増えてきたので最寄りの本屋へお取り寄せしておいた。
あとは私を倒すだけだなクックック…
(ゴゴゴゴ)
OCaml : フ…上等だ…オレも一つ言っておくことがある。このオレに生き別れたF#が
いるような気がしていたが別にそんなことはなかったぜ!
Java : そうか
OCaml : ウオオオいくぞオオオ!
Java : さあ来いOCaml!
OCamlのnative codeが世界を救うと信じて…! ご愛読ありがとうございました!
0061デフォルトの名無しさん
2009/06/24(水) 23:13:22ワロタ
0062デフォルトの名無しさん
2009/06/25(木) 00:05:560063デフォルトの名無しさん
2009/06/25(木) 00:40:01F#スレにこんなのあったよ
553 名前:デフォルトの名無しさん[sage] 投稿日:2009/06/01(月) 22:32:37
>>552
OCamlのみ
多相ヴァリアント、ファンクタ、注釈ありで型がつく箇所では省略しても必ず型推論できる性質
Camlp4/5、ビルド関係のツール(F#はしょぼい)
オブジェクト指向部分は根本的に違う(nominal/structural)
0064デフォルトの名無しさん
2009/06/25(木) 00:47:26ありがとう。なんか半分以上わからないけど。わかった事にしとく。
0065デフォルトの名無しさん
2009/06/25(木) 02:30:58ワロタw
WindowsのWindowにやられたww
0066デフォルトの名無しさん
2009/06/25(木) 11:26:18caml-list で Harrop が
New HLVM examples!
というサブジェクトで騒いでるから、それ見て、判断して。
0067デフォルトの名無しさん
2009/06/25(木) 11:37:09ここで聞くのもアレだけど
型推論が残念なことになったのは演算子のオーバーロードのせい?
0068デフォルトの名無しさん
2009/06/25(木) 21:23:16そうかってwww
どんだけスルー
0069デフォルトの名無しさん
2009/06/26(金) 03:32:33を通そうとしたところ
This expression has type int but is here used with type int * 'a
といわれてしまいます。うまい方法はないのでしょうか?
0070デフォルトの名無しさん
2009/06/26(金) 04:50:58高階関数の引数が順番逆なだけじゃね
フォールドライトならそれでおkかも
0071デフォルトの名無しさん
2009/06/26(金) 11:43:480072デフォルトの名無しさん
2009/06/26(金) 12:25:05ちゃんと型を確認しだしたほうがいいね。
0073デフォルトの名無しさん
2009/06/28(日) 22:06:11↑ここを読んでいて、LablGLをインストールしようとして失敗しました。
どうしたらいいか教えてください。
OSはWindowsXPです。
・lablgl-1.04-win32.zipをObjective Caml以下のディレクトリに直接展開しました。
・Microsoft Visual C++ 2008 Redistributable Package (x86).をインストールしました。
・glut-3.7.6-bin.zipをダウンロードし、glut32.dllをsystem32フォルダにコピーしました。
・コマンドプロンプトを開き、
C:\Program Files\Objective Caml\lib\lablGLまで移動し、
ocaml build.mlをコマンドプロンプトから実行しました。
途中までは走っていたのですが、以下のようにエラーが出ました。
C:/Tcl/lib tk84.lib tcl84.lib gdi32.lib user32.lib " togl.cmo
ocamlc.opt -w s -I +labltk -a -o lablglut.cma -cclib -llablglut -dllib -llablglu
t -cclib "glut32.lib " glut.cmo
ocamlopt.opt -w s -I +labltk -c raw.ml
'ml' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
File "raw.ml", line 1, characters 0-1:
Error: Assembler error, input left in file C:\DOCUME~1\****<※ユーザ名>\LOCALS~1\Temp\camla
smd25ac5.asm
Native build failed: error 2
You can still use the bytecode version
Now ready to use on an OCaml MSVC port
※ここまで
またコマンドプロンプトから > lablglut を実行した際にもエラーが出ました。
Cannot load required shared library dlllablgl.
Reason: C:\Program Files\Objective Caml\lib\stublibs\dlllablgl.dll: このアプリケ
ーションの構成が正しくないため、アプリケーションを開始できませんでした。アプリケ
ーションを再度インストールすることにより問題が解決する場合があります。
※ここまで
0074デフォルトの名無しさん
2009/06/28(日) 22:25:15labltkはインストールしてるか
ocamlはネイティブコンパイラまでインストール済か
Activetclはバージョン8.5系だと動かなかったので8.4を入れる
build.mlを実行した際に
cygwinのlink.exeが使われるとエラーになるので
環境変数からcygwinのパスをはずす
glutはそれと同じバージョンで動いたよ
0075デフォルトの名無しさん
2009/06/29(月) 03:11:27レスありがとうございます。
ですがどうも上手く行かないので、悩んでいます。
どこかで薦められてOCamlは
"Self installer (3.11.0) for the port based on the MinGW toolchain"
が入ってますが、Cygwin入れてないんです。これが原因なのかなぁ。
Cygwin以前入れたのですが今は外してしまってます。
近いうちに再度Cygwinをインストールしてみることにします。
読み進めたいので、このまま>>73の第五回は一応読むだけ読んで、
次に行きたいと思います。
0076デフォルトの名無しさん
2009/06/29(月) 13:21:200077デフォルトの名無しさん
2009/06/29(月) 13:34:48OCamlSDL でサポートしてなかったら自作して公開よろ。
0078デフォルトの名無しさん
2009/06/29(月) 13:40:59だって、作るとしたらWin32APIとかOSSとかALSAとかいろいろサポートして、なおかつメンテもしないといけないんでしょう?
嫌ですよ。
0079デフォルトの名無しさん
2009/06/29(月) 16:08:25うわなんかヘタレられた。
自分のやりたいAPIのインターフェースだけ作りゃいいじゃん。
メンテもしたけりゃするだけでいいじゃん。
初期化とかは何かのライブラリ関数呼ぶだけだし。
やりたいことはほとんどデバイスから
ノンブロッキングに読んだり書いたりするだけで大抵出来るっしょ。
0080デフォルトの名無しさん
2009/06/29(月) 17:35:00そんな俺しか使わないライブラリを公開するぐらいなら、公開せずに手元に持っておいて、作り溜めしときますよ。
0081デフォルトの名無しさん
2009/06/29(月) 20:12:55俺もなんかそうなる。
OCamlは3.10.2でLablGLは1.03にもどしたら上手くいった
0082デフォルトの名無しさん
2009/06/29(月) 21:04:21ありがとうございます。1.03にしたら "OCaml build.ml"は上手く行ったようです。
しかし
「ocamlrun.exe - コンポーネントが見つかりません
ocamlrun.dll が見つからなかったため、このアプリケーションを開始できませんでした。」
となってしまいまたもや失敗。
>>73のリンク先を見るとLablGLのインストールが失敗してるというのですが
インストールしなおしても同じエラーメッセージが出ます。はてさて。
OCaml本体は"ocaml-3.11.0-win-msvc.exe"をインストールしなおしました。
0083デフォルトの名無しさん
2009/06/29(月) 22:06:31OcamlSDL関連のビルドで上手くいなかくてビルドを諦めた。
OCaml自体はプログラミング入門者にも比較的優しいと
思うけど環境は若干敷居が高めだと思う。
んでWindows使うのが悪いとかいわれちゃうとしょんぼりする。
そもそもLinux系を使うこと自体、本職でない人にとっては
普通ではないわけで。
0084デフォルトの名無しさん
2009/06/29(月) 22:14:49勉強不足を棚に上げた愚痴>>83を書いてみたら・・・。
ごめんなさい。反省しています。
0085デフォルトの名無しさん
2009/06/29(月) 22:15:430086デフォルトの名無しさん
2009/06/29(月) 22:17:230087デフォルトの名無しさん
2009/06/29(月) 22:17:580088デフォルトの名無しさん
2009/06/29(月) 22:18:10>>86
うん。わかってはいるんだ。あんな書き込みをしてしまってごめんとしかいいようがない。
0089デフォルトの名無しさん
2009/06/29(月) 22:29:170090デフォルトの名無しさん
2009/06/29(月) 23:16:11(いまさらだが)OCamlのReadmeを見ると MinGWの場合は
Do *not* install the Mingw/MSYS development tools from www.mingw.org:
these are not compatible with this Caml port (@responsefile not
recognized on the command line).
って書いてあるからCygwinが必要なんだと思われる。
英語は雰囲気で読んでいるので間違っていたら誰かやさしく叱ってくれ。
0091デフォルトの名無しさん
2009/06/29(月) 23:40:30> あれぇ?書き込めた。どうせアク禁の巻き添えで書き込めないだろうと
> 勉強不足を棚に上げた愚痴>>83を書いてみたら・・・。
この精神でビルドがんばれ。
どうせビルドできないと思ってもできるかも。
0092デフォルトの名無しさん
2009/06/30(火) 00:26:310093デフォルトの名無しさん
2009/06/30(火) 03:36:38そんなこと言ってるから関数型はいつまでたってもドマイナーなんだよ
0094デフォルトの名無しさん
2009/06/30(火) 04:59:310095デフォルトの名無しさん
2009/06/30(火) 12:32:440096デフォルトの名無しさん
2009/06/30(火) 12:45:460097デフォルトの名無しさん
2009/06/30(火) 12:50:27それは、ずいぶん、どい なか です ね
0098デフォルトの名無しさん
2009/06/30(火) 13:13:58009982
2009/06/30(火) 17:56:45結局Cygwinなんか入れるよりもお勉強用のLinuxマシンを用意した方が早そうですね。
レス頂いてありがとうございます。
0100デフォルトの名無しさん
2009/06/30(火) 18:50:55完全にスレチだが、別にマシンを用意しなくても仮想環境を使えば楽なのに。
010182
2009/06/30(火) 18:57:35Knopixとかならできるのかな?
0102デフォルトの名無しさん
2009/06/30(火) 23:12:27virtual boxでdebianがおすすめです。
かなり低スペックでも動いて、何よりaptーgetでocamlも含め、たいていのライブラリが簡単にインストール出来ます。
0103デフォルトの名無しさん
2009/07/01(水) 00:05:15@を使わずにquick_sortを書き換えよ
ヒント:引数を一つ増やして整列済みのリストを受け取る
ってやつが解けまへん。。
教えて、偉い人
0104デフォルトの名無しさん
2009/07/01(水) 01:27:12まじっすかー!ありがとうございます。
今Ubuntuのデュアルブート環境作成厨…orz
ウブンツ重かったらそちらを試してみます。
0105デフォルトの名無しさん
2009/07/01(水) 01:35:56本読んでないけど末尾再帰じゃないすかね。
0106デフォルトの名無しさん
2009/07/01(水) 08:39:57apt getはububtuもdebianもほぼ同じなので、ububtuでも大丈夫ですよ。
0107デフォルトの名無しさん
2009/07/01(水) 16:48:02Windows上では動かないん?会社がWindowsだから・・・。
動くなら今すぐそっちの環境に移行したい。
0108デフォルトの名無しさん
2009/07/01(水) 16:55:45当然動く訳無い。
大体Linux上で生成されるオブジェクトファイルはELFフォーマットだし。
0109デフォルトの名無しさん
2009/07/01(水) 21:24:540110デフォルトの名無しさん
2009/07/02(木) 09:07:04憶測で物を言うな。吐かない。終わり。
0111デフォルトの名無しさん
2009/07/02(木) 09:15:480112デフォルトの名無しさん
2009/07/02(木) 12:14:41終わったところすまないが、>>109は吐ける!と断定しているわけではないから
もう少し生暖かくてもいいと思うんだ。
0113デフォルトの名無しさん
2009/07/02(木) 12:49:21>>110はいい加減なこと言う奴にうんざりしてるんだろうな。
この板はそんな奴ばかりだから、せめてソースくらい示さないと。
0114デフォルトの名無しさん
2009/07/03(金) 05:15:370115デフォルトの名無しさん
2009/07/03(金) 08:55:56しーっ!そういうこと言うと
憶測で(ry
とか言われちゃう
0116デフォルトの名無しさん
2009/07/03(金) 12:38:28「書き換えよ」とか「引数を一つ増やして」といわれても元々のコードがないと
答えられないぜよ。
0117デフォルトの名無しさん
2009/07/03(金) 17:08:590118デフォルトの名無しさん
2009/07/03(金) 18:05:20そういえばOcaml-nagoyaの連中(有限会社ITプランニング)ってどうなったの?
なんか公式サイトにつながらないんだけど。
0119デフォルトの名無しさん
2009/07/03(金) 19:23:03SMLのコードを移植していてはまった
0120デフォルトの名無しさん
2009/07/04(土) 11:16:05練習でちょっとしたものを作ろうとしたけど、ライブラリの少なさでたちまち不便で止まってしまった。
0121デフォルトの名無しさん
2009/07/04(土) 11:52:020122デフォルトの名無しさん
2009/07/04(土) 12:10:390123デフォルトの名無しさん
2009/07/04(土) 12:19:32HaskellならMonad IOがスタンダードだが、OCamlにはないからね。
IOはどうしても副作用になってしまう。
0124デフォルトの名無しさん
2009/07/04(土) 12:32:250125デフォルトの名無しさん
2009/07/04(土) 13:37:39どんなライブラリが欲しかったのん?
0126デフォルトの名無しさん
2009/07/04(土) 13:58:47憶測(ry
じゃなくて、本が違う。
ITplan は知らんけど、一日ぐらいサイトが落ちてていいだろ。週末だし。
0127デフォルトの名無しさん
2009/07/04(土) 14:19:25どうでも良いけど、365日接続できないサイト運営してる時点で技術力を疑う。
0128デフォルトの名無しさん
2009/07/04(土) 14:34:190129ogasawara
2009/07/04(土) 17:30:22恐縮です。うちが契約してるデータセンター屋さんの電源障害だそうで、何ともならなくて。
そろそろ復活するらしいのですが、うーん。
0130ogasawara
2009/07/05(日) 09:28:07The Caml Hump(http://caml.inria.fr//cgi-bin/hump.en.cgi)という
ところがあって、ここでライブラリを探すとかなり見付かりますよ。
CGI、DB接続、GUI、UTF-8、アルゴリズム色々など有ます。
0131デフォルトの名無しさん
2009/07/05(日) 15:57:43これは文法の慣習みたいなものかなと思うんですがどうなのかなぁと。
リストを受け取って何かを返す関数の場合、リストの要素が組やレコードだと
match文の中にmatch文を書くことがありますが、match文ではなく直接パターンマッチさせる書き方の方が
良いのでしょうか?
>>83
vmwareを使ってxp上でubuntuを動かして、ocaml勉強してます。
0132デフォルトの名無しさん
2009/07/05(日) 16:48:01質問をするときはサンプルコードを示したほうが回答してもらいやすいよ。
この文章だと
>match文ではなく直接パターンマッチさせる書き方の方が良いのでしょうか?
あたりがわかりづらいと思われ。
0133デフォルトの名無しさん
2009/07/05(日) 17:28:04kekkonっていう関数で、anataというレコードが要素のリストを引数にして
条件に合う人数を返すとかいう場合に・・・
let rec kekkon anata = match anata with
[] -> 0
| first :: rest -> (match first with
{name = n; toshi = t; syunyu = s; tyotiku = t; sisan = s; youshi = y}
-> 0
とかと書かずに、以下のように書くほうがいいのかなぁという質問です。
let rec kekkon anata = match anata with
[] -> 0
| {name = n; toshi = t; syunyu = s; tyotiku = t; sisan = s; youshi = y} :: rest ->
0134デフォルトの名無しさん
2009/07/05(日) 17:44:47お好きな方を。ただ、
let rec kekkon anata = match anata with
は
let rec kekkon = function
の方が簡潔。
0135デフォルトの名無しさん
2009/07/05(日) 17:46:330136デフォルトの名無しさん
2009/07/05(日) 18:49:38このサンプルコードのようにレコードであれば直接アクセスするっていう手も
あるよ。タプルの場合は状況にもよるけど2番目の方法が多いんじゃないかな。
0137デフォルトの名無しさん
2009/07/06(月) 09:38:23pattern match でワザワザ意味不明な変数に束縛するスタイルはおかしい。
そんなことするから s が二回束縛されてるヨ。
136 の言うように r.name とかでアクセスするほうが普通。
0138デフォルトの名無しさん
2009/07/10(金) 16:02:51ttp://en.wikipedia.org/wiki/VList
のVlistというものを見つけたのですが、これはリストを使った
動的配列のようなものでしょうか。(英語が苦手のためよくわかりませんでした)
また、OCamlで書くとどのようになるのでしょうか。
分かる方がいたら教えてください。
0139デフォルトの名無しさん
2009/07/10(金) 20:09:46答えが欲しいの?それとも一緒に考えてほしいの?
Okasaki には載ってないね。
0140(* 〜 *)
2009/07/10(金) 22:04:04英語が読めなくても図は見えますよね。
構造はこんな感じでいいんじゃないの(図のまんま)。
type 'a vlisti = VLNil | VLCel of 'a vlisti * int * 'a array
type 'a vlist = 'a vlisti * int
操作は自分で考えませう。
0141デフォルトの名無しさん
2009/07/10(金) 22:38:27ありがとうございます。コードのおかげでなんとなくですが
イメージできました。(とはいってもこのデータ構造が
どんな風にありがたいのかは、まだ理解できてはいないのですが・・・)
0142139
2009/07/11(土) 08:49:39type 'a vlisti = VLNil | VLCel of 'a vlisti * int * 'a option array
のほうが良いです。
140 だと埋まって無いトコを埋める値が必要ですね。(Obj.magic 0 などで埋めるのはダメ絶対。)
0143デフォルトの名無しさん
2009/07/12(日) 20:12:390144143
2009/07/12(日) 20:52:01■ このスレッドは過去ログ倉庫に格納されています