関数型言語ML(SML, OCaml, etc.), Part 5at TECH
関数型言語ML(SML, OCaml, etc.), Part 5 - 暇つぶし2ch293:デフォルトの名無しさん
08/04/23 21:40:54
関数型言語は、変数への代入もforループも使わずにプログラムできるって聞いたけど
どういうこと???
ここにきても全然わからん。

294:デフォルトの名無しさん
08/04/23 21:42:19
再帰すればループできるじゃん。

295:デフォルトの名無しさん
08/04/23 22:03:38
SML#0.40マダー?チンチン(AA略

296:デフォルトの名無しさん
08/04/24 13:36:36
>>154
# let ( *.. ) a b = range a b;;
val ( *.. ) : int -> int -> int list = <fun>

# 1 *.. 10;;
- : int list = [1; 2; 3; 4; 5; 6; 7; 8; 9; 10]

297:デフォルトの名無しさん
08/04/24 21:59:44
>>293
関数の戻り値を次の関数へ放り込んだり、戻り値の一部だけ次の関数に放り込んで、残りをさらに次の関数に放り込んだりするのだ。


298:デフォルトの名無しさん
08/04/24 22:40:38
>>293
ちょっと富豪的だが、ループは>>296のようなリストで置き換えると
最初は考えやすいと思う。
大雑把な説明だが
for(int i=1;i<=10;++i){printf("%d\n",i);}は
高階関数mapを使ってこう。
List.map print_endline (1 *.. 10)

299:デフォルトの名無しさん
08/04/24 23:05:54
えーintとstringの型あってないし、そこはmapじゃなくてiterじゃないの用途的に

300:デフォルトの名無しさん
08/04/24 23:39:18
うは、俺あほw

301:デフォルトの名無しさん
08/04/24 23:49:18
ちゃんと書いとこう。今Ocamlの処理系ないから部分的にF#で試したコードだけども。

List.iter (fun x -> print_endline (string_of_int x)) (1 *.. 10)



302:デフォルトの名無しさん
08/04/25 00:35:19
書籍の質問いいですか?
プログラミングinOcaml(初版1刷)を読んでるんですが
P65のNewton-Raphson法のとこでベージ下部の式変形が

y = f'(x_i) * x - {f'(x_i) * x_i - f(x_i)}
x軸と交わる点がx_i+1なのでy=0としてxについて解くと
x_i+1 = x_i - {f(x_i)/f'(x_i)} * x_i が得られます

となってるんですが
x_i+1 = x_i - {f(x_i)/f'(x_i)} じゃないですかね?

303:デフォルトの名無しさん
08/04/25 21:29:32
JavaのThread.sleepみたいな関数を探しています。
OCamlで「n秒待つ」関数みたいなのは、何ですか?

次のようなプログラムを書いています。
let rec loop count =
 print_endline (print_int count);
 (* ここで1秒待ちたい *)
 loop (count + 1)

let main =
 loop 0

304:デフォルトの名無しさん
08/04/25 21:41:38
Unix.sleepかThread.delay

305:デフォルトの名無しさん
08/04/25 22:00:51
>>302
とりあえず正誤表にはなかったよ。もっかいコード見直したら?
URLリンク(www.sato.kuis.kyoto-u.ac.jp)

306:デフォルトの名無しさん
08/04/25 22:23:27
>> 304
できました!
どうもありがとうございます!!

307:デフォルトの名無しさん
08/04/26 01:07:52
>>293
ループは再帰のときに引数を変えれば良い。
してifやパターンマッチで止める。
let rec loop i =
if i<0 then () else
(print_int i; loop (i-1));;

代入なくても書けるというのは
lambdaの引数を利用する。

代入がこんな感じなら
let i = 1 in
i + i;;
 こう書ける。
(fun i -> i+i) 1;;

308:デフォルトの名無しさん
08/04/27 01:10:46
letの方はそれ代入じゃない

309:デフォルトの名無しさん
08/04/27 08:38:49
refでやればいいのかよう

310:sakura
08/04/27 11:45:53
こうなんというか深夜亀頭から白濁色の液が滲み ぷっつん。

311:デフォルトの名無しさん
08/04/28 00:36:21
>>302
誰がどう見ても誤植です。どうもありがとうございました。

312:デフォルトの名無しさん
08/04/29 16:34:33
HaMLet v1.3.1
URLリンク(www.ps.uni-sb.de)

SML#にも対応
ベンチマーク用のSML実装としての、あるべき姿か

誰ぞ、SML#をNJ、MLtonとベンチしてたもう


313:デフォルトの名無しさん
08/05/03 13:29:42
関数型言語F#をわかりやすく解説した動画とかないの??

314:[Power of Scala]
08/05/03 16:42:43
>>313
関数型言語Scalaの動画
URLリンク(d.hatena.ne.jp)

315:デフォルトの名無しさん
08/05/03 18:03:03
>>314
関数型言語というよりもオブジェクト指向型の印象が強い言語だな。
カリー化すら出来ないし、代数的データ型すらないじゃないか。
関数型言語の特徴というべき代表的な機能が欠如しているのは関数型言語として致命的。
だから、Scalaはオブジェクト指向型言語だ。

316:デフォルトの名無しさん
08/05/03 19:28:52
制限時間関係なくこの人早口っぽいな~。



317:Objective Caml
08/05/03 20:11:11
>>313
F#じゃないけど

OCamlの動画 - YouTube
URLリンク(www.youtube.com)


318:デフォルトの名無しさん
08/05/04 00:18:19
OCamlをすこしかじってF#にも興味もったんだけど、
F#って.NETのライブラリが使えるのと、オブジェクトが使えないの以外にどんな点がF#と違うの?
文法面はほぼ同じだと聞いたんだけど。

319:デフォルトの名無しさん
08/05/04 00:28:24
F#はHaskell.NET同様その内サポートされなくなるところが違う。
MSの単なるデモンストレーションだから。


320:デフォルトの名無しさん
08/05/04 01:26:50
>>318
データの型が.NET互換になってて、演算子がオーバーロードされる。
例えば +. 演算子はなくなってて実数の足し算でも + 演算子を使う。
クラスは.NETのクラスになるので、クラス定義まわりの文法にだいぶ変更がある。


321:デフォルトの名無しさん
08/05/04 23:20:06
Jane Street Capital謹製のcoreが公開されたね。
Extlibでもcoreでもいいから標準ライブラリに取り込んでくれないかなあ。

322:デフォルトの名無しさん
08/05/05 01:08:14
>>315
いや、あるよ>カリー化&代数的データ型
単に紹介されてないだけ

323:デフォルトの名無しさん
08/05/05 01:13:40
ちゃんと説明するとScalaには代数的データ型そのものは無いけど、
case classという機能をつかってほぼ同等(以上)のことができる。こんな感じ

/* 代数的データ型 */
abstract sealed class Exp
case class Add(a :Exp, b :Exp) extends Exp
case class Num(v :Int) extends Exp
def eval(e :Exp) :Int = e match {//パターンマッチ
case Add(l, r) => eval(l) + eval(r)
case Num(v) => v
}
eval(Add(Num(1), Num(2)))

まあ、MLの代数的データ型の定義に比べて記述が冗長だけど、機能的には
問題ない。

324:デフォルトの名無しさん
08/05/10 10:05:39
>>323
つまりScalaは関数型言語であるっていうこと??

325:デフォルトの名無しさん
08/05/11 22:57:45
>>324
定義によるけど、たぶん言って良いと思う。MLが関数型言語であるというのと
同じ程度には。

326:デフォルトの名無しさん
08/05/12 06:56:30
>>325どうも

327:デフォルトの名無しさん
08/05/12 13:01:46
代数データ型があるかどうかは、関数型かどうかを左右しない。
ただ今時の関数型言語に代数データ型を持っているのが多いというだけ。

328:デフォルトの名無しさん
08/05/12 17:48:27
関数型言語という言葉に明確な定義が無い以上、ある言語が関数型かどうかは
「典型的な関数型言語」にどれくらい似ているかという尺度で測る他無いんじゃね?

329:デフォルトの名無しさん
08/05/12 19:25:20
あなたがそう思うものが関数型言語です。
ただし、他人の同意を得られるとはかぎりません。

330:デフォルトの名無しさん
08/05/12 20:02:47
無意味なレスしてんなよ noob

331:デフォルトの名無しさん
08/05/12 23:17:55
>>319
逆だよ。
F#は製品化が決まって現在仕様の取りまとめ中。

332:デフォルトの名無しさん
08/05/13 08:09:27
>>328
そんなわけないだろw
代数的データ型があるかどうかは、関数型言語かどうかの尺度にはならない。

>>331
あそこは仕様=実装って会社でしょ。
V0.9的な仕様作ってそれでおしまい。

333:デフォルトの名無しさん
08/05/13 09:58:17
もともと仕様と実装が同じ言語から派生した言語に何を求めるのか.



334:デフォルトの名無しさん
08/05/13 14:55:39
>>332
じゃあ、何が尺度になるの?もちろん、代数的データ型*さえあれば*関数型言語
だとは言うつもりは無いけど、関数型言語の定義なんて人によってかなり曖昧な
わけだ。MLとかHaskellとかのまず間違いなく関数型言語だと認定してもらえる言語と
どれだけ同じ機能を持っているかで比較するしか無いんじゃない?

335:デフォルトの名無しさん
08/05/13 16:08:24
プログラムが参照の透明性のある関数だけで構成されていること
でいいんじゃない?

336:デフォルトの名無しさん
08/05/13 16:54:44
stateがないってんじゃ駄目なの?
monadでstateは扱えるけど、
stateがあるわけじゃないよね。

stateがないってことを厳密にいうと、
「ある時にy=f(x)ならば、どんな時でもy=f(x)」ってことでいいのかな?

337:デフォルトの名無しさん
08/05/13 17:17:45
> プログラムが参照の透明性のある関数だけで構成されていること

じゃあ、MLやOCamlはNGじゃん。ref型があるわけだから。

338:デフォルトの名無しさん
08/05/13 17:54:46
>>337
関数だけで構成されていること
でいいんじゃない?

339:デフォルトの名無しさん
08/05/13 20:49:17
>>338

それだとHaskellすらNGだな

340:デフォルトの名無しさん
08/05/13 20:56:34
C++ だって関数型言語なのに!

341:デフォルトの名無しさん
08/05/13 21:44:13
>>340
ないないそれはない

342:デフォルトの名無しさん
08/05/13 21:47:37
それ有名なネタだよ

343:デフォルトの名無しさん
08/05/13 21:49:08
マクロとテンプレートを思いっきり使えば
それらしいコードは書けるかもしれない。

344:デフォルトの名無しさん
08/05/14 07:36:28
omake はええぞ。omake -P を知ったらやめられん。


345:デフォルトの名無しさん
08/05/14 11:58:34
Boost おそるべし

346:デフォルトの名無しさん
08/05/14 19:10:58
でもないw

347:デフォルトの名無しさん
08/05/17 09:53:43
今日職場で出た話題。
以下のOCamlコードが最終行でエラーには
* ならなさそうで、
* でもなりそうで、
* でもやっぱりならない理由と、
この問題の意図を考えなさい。

let id x = x
let unify x y = if true then x else y
let v = id `A
let _ = unify v `B
let _ =
match v with
| `A -> ()


348:デフォルトの名無しさん
08/05/17 10:31:08
なんでエラーになりそうなのかわからない。

349:デフォルトの名無しさん
08/05/17 11:19:41
>| `A -> ()
なんかAAぽい

350:デフォルトの名無しさん
08/05/17 13:48:50
>>349
怒ってため息をついてるね。w

351:デフォルトの名無しさん
08/05/17 15:38:52
標準で関数型プログラミングをサポートする言語=関数型言語じゃね
標準のSTLだけだと関数型プログラミングは厳しいのでC++は入らないと思う

352:デフォルトの名無しさん
08/05/17 17:10:34
Q. 関数型プログラミングとは?
A. 関数型言語が標準でサポートしているプログラミング

353:デフォルトの名無しさん
08/05/17 21:04:26
相互再帰ですか

354:デフォルトの名無しさん
08/05/17 21:44:22
>>353
無限に再帰してて、止まらないわけですね、わかります。

355:デフォルトの名無しさん
08/05/17 22:08:01
再帰なんて簡単だお。

356:デフォルトの名無しさん
08/05/17 22:32:21
>>347
>今日職場で出た話題。
どこの職場ですか?日本ですか?


357:デフォルトの名無しさん
08/05/18 00:30:58
let id x = xと
let v = id `Aと
let _ =
match v with
| `A -> ()
だけみれば`Aと`Aだからエラーにならなそうで
let unify x y = if true then x else y
let _ = unify v `B
もみるとxとyが同じ型じゃないとエラーで`Aと`Bだからエラーになりそう
でも多相バリアントだからエラーにならないみたいな。
なんか問題がわるいな

358:デフォルトの名無しさん
08/05/18 00:32:16
357は>>347へのレス 書き忘れたorz

359:デフォルトの名無しさん
08/05/18 01:16:05
type 'a 関数型言語 =
{ 変数 : 参照透過; 関数 : 高階; 型 : 代数的; } constraint 'a = 多相


360:デフォルトの名無しさん
08/05/18 08:22:31
>>351
個人的にはSTLがどれほど充実しようが、後付けのクロージャが qsort に渡せ
ない時点で除外したい。箱庭の中だけで関数プログラミングをサポートしても、
その言語が関数型とは言い難い。どんな言語でも関数型言語を「実装」する事
は出来るので。


361:デフォルトの名無しさん
08/05/18 12:09:28
std::sort に渡せりゃそれで十分じゃん。

362:デフォルトの名無しさん
08/05/18 16:41:50
qsortのほうがずいぶん遅いしね

363:デフォルトの名無しさん
08/05/18 16:49:38
>>362
プラットフォームによるとqsortの方が団地に早かったりするんですが
どのようなプラットフォームでお仕事をしておいででしょうか?


364:デフォルトの名無しさん
08/05/18 17:12:28
windows。それ、最適化してんの?

365:デフォルトの名無しさん
08/05/18 17:24:49
>>36
qsort() の呼び出しでは関数ポインタの呼び出しが多いから、インラインで置換するコードには負けてしまうと思います。

366:デフォルトの名無しさん
08/05/18 18:25:41
>>363
プラットフォームって、インライン最適化もできない糞コンパイラを使えばって話か?

367:デフォルトの名無しさん
08/05/18 18:46:20
あるいはstd::sortに関数ポインタを渡してるとか

368:デフォルトの名無しさん
08/05/18 20:41:28
おもしろいな。
関数呼び出しコスト以上に速くなる?

369:デフォルトの名無しさん
08/05/19 07:57:36
>>361
qsort はただの例。ライブラリの形で別言語を実装しておいて関数型でございっ
てのが気に入らないってだけ。関数ポインタを要求している所に渡したり、新
しい関数ポインタのインスタンスを実行時に作れないと。


370:デフォルトの名無しさん
08/05/19 08:58:50
> ライブラリの形で別言語を実装しておいて

言語内の機能で実装しているんだぜ?

371:デフォルトの名無しさん
08/05/19 21:49:06
クロージャはファーストクラスじゃないとね

372:デフォルトの名無しさん
08/05/19 22:47:50
>>370
それいうとあらゆる言語が関数型を名乗れるから。

373:デフォルトの名無しさん
08/05/19 23:02:44
>>370
それいったらアセンブラだって関数型だろwww

374:デフォルトの名無しさん
08/05/20 06:52:47
つまらんんこと言っとらんでコード書け。



375:デフォルトの名無しさん
08/05/20 08:27:19
C++のboost:lambdaみたいなのを、
言語の本来の機能で実装できるのってないんじゃねえ?

376:デフォルトの名無しさん
08/05/20 10:04:38
>>375
boost.lambda 見てないんだけど Lisp のマクロ、R6RS のマクロでも無理?


377:デフォルトの名無しさん
08/05/20 11:19:19
関数型は最初からラムダ式があるから必要ないのでは。

zip(list1, list2, _1 + _2) //←こんな感じ。

378:デフォルトの名無しさん
08/05/20 17:44:55
Boostはポリシーによるプログラミングができる
(lambda (lambda (funcname)) (funcname ...))
↑こんなイメージ。これはLISPだったらマクロなしだと実現不可能じゃない?
型システムが閉じてないことが前提だから
OcamlやF#ではこれ、実現不可能だと思う

//ちら裏:自分はBoostが関数型言語やろうと思ったきっかけ

379:デフォルトの名無しさん
08/05/20 17:52:12
>>378
マクロ書けばええやん?
言語本来の機能でっせ、Lisp のマクロは…


380:デフォルトの名無しさん
08/05/20 18:56:16
>>378
>LISPだったらマクロなしだと

その前提が間違い。何の為の S 式だか。

381:デフォルトの名無しさん
08/05/20 22:14:56
すまん、今の流れでマクロなしってのは間違ってるなw
しかし、マクロありでもポリシーによるプログラミングはLISPでは不可能なんじゃね?
ここでS式が出てくるのはなぜ?
静的な型を持つ言語じゃないとコンパイル時型チェックの利点はなくなるし
単なるダックタイピングになってしまう
現時点では閉じていない多態かつ静的な言語って
俺が知る限りC++ぐらいしかないけど他にあるのかな
Template Haskellとかどうなんだろ

382:デフォルトの名無しさん
08/05/20 22:19:20
>>381
>ここでS式が出てくるのはなぜ?

興味無いくせに聞くなよ

383:デフォルトの名無しさん
08/05/20 22:26:20
>>381
declare すりゃいい話だし、元気があればコンパイラ書き換えれば OK
型推論でも何でもできるんじゃないか?


384:デフォルトの名無しさん
08/05/20 22:28:55
ああ、コンパイラ作るのか・・その発想はなかったわw

385:デフォルトの名無しさん
08/05/21 21:52:19
>>384
つか, 処理系自体にシンタックスパーサからコンパイラまで含んでて
そいつらを自前の定義に書き換え可能な言語相手に何を戦ってるんだか


386:デフォルトの名無しさん
08/05/21 23:06:06
>>378
すまんが、このコードで何をしてるのか参考までに教えてくれ・・・

>>385
C++に脳を冒されて、そんな言語が存在することを知るよしもないんだろう

387:デフォルトの名無しさん
08/05/22 05:23:56
>>339
いや、セーフだろ

388:デフォルトの名無しさん
08/05/22 07:28:36
職場で出た話題。
O'Caml で、v == v は真なのに v = v は偽な値 v は存在するか。


389:デフォルトの名無しさん
08/05/22 08:16:39
NaN

390:デフォルトの名無しさん
08/05/22 21:55:52
>>375
>静的な型を持つ言語じゃないとコンパイル時型チェックの利点はなくなるし
OCamlは型推論で静的な型が付くからC++並にコンパイル時型チェック働くよ
型変換がらみのバグ出づらい分むしろ安全だと思うけど。
(* てかboost:lambdaコンパイル遅すぎ *)

391:デフォルトの名無しさん
08/05/22 23:38:28
>>390
OCAMLだとこれに相当することができない(STLC<U>が定義済みの場合だけOCamlでも可能)
C++では定義済みかどうかは関係なく宣言できる

STLライクなデータに対する探索コード
template <template <typename T> class STLC,typename U,typename R>
 bool has_data(STLC<U>&data,const R&value){
  typename STLC<U>::iterator it = std::find(data.begin(),data.end(),value);
  if(it!=data.end())return true;
  else return false;
}

392:デフォルトの名無しさん
08/05/23 00:30:15
begin(data)がイテレータ関数を戻すなら
find(b,v)はdataの型と関係なく定義出来る
(イテレータ関数の型には影響をうける)
クロージャ使えるって忘れてない?

393:デフォルトの名無しさん
08/05/23 01:10:33
>>391
> 宣言できる

「定義できる」かな?
宣言ももちろんできるけど。

394:デフォルトの名無しさん
08/05/23 01:17:03
念のため言っておくけど、上はあくまでどうしてもイテレータ使いたいならの話
リストは、|でパターンマッチして再帰でグルグルが普通

395:デフォルトの名無しさん
08/05/23 01:22:07
要は先に定義が必要だったりはしないので、391は間違ってると思われ

396:デフォルトの名無しさん
08/05/23 01:39:44
>>391の例自体は不適切かもしれんが、C++のテンプレートにできて他の殆どの言語にできないことがあるのは事実だよ
C++のテンプレートの顕著な特徴は
・型検査と名前解決の一部がインスタンス化まで遅延される
・特殊化(テンプレート引数に対するパターンマッチ)ができる
で、メジャーな言語でこれを備えてるのはC++の他にはDくらいしかないはず

397:デフォルトの名無しさん
08/05/23 01:55:42
SFINAE(Substitution Failure Is Not An Error)
URLリンク(en.wikipedia.org)

398:デフォルトの名無しさん
08/05/23 01:59:04
>>396
取り敢えず CL はどっちも出来るな

399:デフォルトの名無しさん
08/05/23 02:06:14
>>398
良く分からん
CLだと引数の型が確定するのは実行時だから、テンプレートみたいなことはやりようが無いんじゃね?

400:デフォルトの名無しさん
08/05/23 02:12:17
GF じゃダメなん?

401:デフォルトの名無しさん
08/05/23 02:17:12
GFって総称関数のこと?
それならやっぱり実行時ディスパッチだからテンプレートとは比較できないだろ

402:デフォルトの名無しさん
08/05/23 04:48:43
>>397
Boostじゃ結構使われてるけど英語しか記事無いのか

403:デフォルトの名無しさん
08/05/23 08:11:36
GFってgeneric functionのことだと思うけど、それだと
>>401の書いてるように、実行時の型に基づくディスパッチだから、
コンパイル時にディスパッチが行われるC++のテンプレートの特殊化
とは全然違うでしょ

404:デフォルトの名無しさん
08/05/23 08:21:47
何で同じ事を2度書く?

405:デフォルトの名無しさん
08/05/23 08:48:42
>>403
packageとcompileで頑張れば、
同じようなものを作れないこともないなあ。
おもしろいかもね。SFINAEはCLOSっぽいね。
まあC++だって総称関数族だから当たり前か。

406:デフォルトの名無しさん
08/06/02 14:56:29
patter match で、

let a = "hoge" in
match a with
a -> "this is hoge"
| "hage" -> "this is hage"
| _ -> "other"

みたいにして、a を "hoge" としてマッチさせることが出来ないのはどうしてなの

407:デフォルトの名無しさん
08/06/02 15:25:34
パタンに変数参照を書けないから。
パタン中に変数書くときは束縛になるじゃん。

408:デフォルトの名無しさん
08/06/02 15:37:05
あ、そうか。束縛と区別できないのか。
ありがとう
でもグローバルに識別子を持っているとき
例えば root_user_name = "hoge" とかあるとして
直接 "hoge" はタイプしたくない場合

match user_name with
eval(root_user_name) -> "root user"
| _ -> "normal user"

とか書きたくなるんだよね
単純なときは if else だけど、複雑なときに書きたくなる

409:デフォルトの名無しさん
08/06/02 19:00:31
つ whenキーワード

410:デフォルトの名無しさん
08/06/02 19:56:37
match user_name with
 | user when user=root_user_name -> "this is root user"
 | "hage" -> "this is hage"
 | _ -> "other"

で合ってる?

411:デフォルトの名無しさん
08/06/02 20:30:39
つ if

412:デフォルトの名無しさん
08/06/03 00:08:07
>409
ありがとー
知らなかった
すげー恥ずかしい

413:デフォルトの名無しさん
08/06/03 02:56:54
>>412
かじりかけじゃしょうがないと思うからがんばれ。


414:デフォルトの名無しさん
08/06/05 08:27:09
パターンマッチにパターンじゃなくて式を書いちゃうのは初心者にはよくあること。
入門書は振れるべきかもわからんね。


415:デフォルトの名無しさん
08/06/05 11:13:11
つ 入門OCaml

416:デフォルトの名無しさん
08/06/05 19:44:14
軸がぶれている

417:デフォルトの名無しさん
08/06/07 10:41:42
質問です、リストの文字を全部つなげるとき

List.fold_left (^) "" ["1"; "2"; "3"]

とか書くとするじゃないですか
でも例えばちょこっと関数を間に挟みたいとき、

let conv x = x ^ "!!" in
List.fold_left (fun a b -> a ^ (conv b)) "" ["1"; "2"; "3"]

とか書くのって違うのかなとか思ってるんですよ

(fun a b ->a ^ (conv b))

の部分をもっとこう関数の合成みたいな感じで短く書く方法ってないですかね

418:デフォルトの名無しさん
08/06/07 12:19:57
十分簡潔に書けていると思う。わかりやすいし。
なぜそんなに短さにこだわる?

419:デフォルトの名無しさん
08/06/07 12:31:55
質問の趣旨とずれているが、そもそも (^) を fold するのはお勧めできない。
文字列コピーが多すぎるから。String.concat とか、 Buffer を使うべし。
上の例は、

String.concat "" (List.map conv ["1"; "2"; "3"])

これで十分だろう。(^) を使うなら417で十分。無理に短く書いて喜ぶ言語ではない。


420:デフォルトの名無しさん
08/06/07 12:36:50
              ,,,,,,,,,,,,,,,,,,,,,,,,,,
             /": : : : : : : : \
           /-─-,,,_: : : : : : : : :\
          /     '''-,,,: : : : : : : :i
          /、      /: : : : : : : : i     ________
         r-、 ,,,,,,,,,,、 /: : : : : : : : : :i    /
         L_, ,   、 \: : : : : : : : :i   /  λ抽象したら
         /●) (●>   |: :__,=-、: / <   負けかなと思ってる
        l イ  '-     |:/ tbノノ    \
        l ,`-=-'\     `l ι';/       \
        ヽトェ-ェェ-:)     -r'          ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
         ヾ=-'     / /  
     ____ヽ::::...   / ::::|
  / ̄ ::::::::::::::l `─''''   :::|


421:デフォルトの名無しさん
08/06/07 14:08:51
>>417
俺だったら先にmapする

422:デフォルトの名無しさん
08/06/07 14:42:08
俺はconvを2引数にしてこんな感じにするかな
List.fold_left conv "1" ["2"; "3"]


423:デフォルトの名無しさん
08/06/07 21:29:56
ありがとうございました
Buffer は知ってたけど、String.concat は知りませんでした
map 先にやって、String.concat で書くことにします

424:デフォルトの名無しさん
08/06/07 23:34:58
OCamlでファイルIOするときUnix.lseekとかが
file_descr -> int -> seek_command -> int
でintで足りない場合が多々あるかと思うのですが、
皆さんは大きなファイルのIOをするときはどうしてますか?
オフセットの計算とかも Int64.add pos (Int64.mul index 4L)
みたいにしてやってますか?


425:デフォルトの名無しさん
08/06/08 01:20:52
Unix.LargeFile

おまいら、ライブラリ関数で迷ったらまず .mli 読むか、grep するか、
ocamlbrowser でも使えよな。



426:デフォルトの名無しさん
08/06/08 01:34:33
>>425
おお、ありがとうございます!

427:デフォルトの名無しさん
08/06/08 17:22:38
>>424
31bitがだめなら63bitがあるじゃない。

# 0xffffffff;;
- : int = 4294967295

428:デフォルトの名無しさん
08/06/09 00:54:23
>>427
つまらん



429:デフォルトの名無しさん
08/06/12 18:32:15
質問。関数型言語の特徴の一つとしてパターンマッチって出てくるけど何が利点なの?
ifの構文糖衣のようにも思えるけど

430:デフォルトの名無しさん
08/06/12 19:07:00
簡潔に書ける

431:デフォルトの名無しさん
08/06/12 19:48:17
>>429
もしパターンマッチがないとすれば、代数的データ型から値を取り出したい場合はどうする?
たとえばHaskellのMaybe型のJust 3という値から、3という値を取り出したい場合はどうする?

432:デフォルトの名無しさん
08/06/12 20:25:17
それはアクセス関数が自動生成されるようにすれば済む話じゃないか

433:デフォルトの名無しさん
08/06/12 20:39:02
>>429
構文糖には何も利点がないとでも?

434:デフォルトの名無しさん
08/06/12 22:33:33
安全なダウンキャストができることとか?

435:デフォルトの名無しさん
08/06/12 22:41:54
>>434
x + yって中間記法、よく出てくるけど何が利点なの?
(+ x y)の構文糖衣のようにも思えるけど


436:デフォルトの名無しさん
08/06/12 22:42:53
>>432
具体的に実装するとすればどうしますか?
MaybeにはNothingという値もあるんですよ。

437:デフォルトの名無しさん
08/06/12 23:11:58
>>436
入力が不適なら例外発生

438:デフォルトの名無しさん
08/06/12 23:24:50
>>437
Maybeは代数的データ型のひとつの定義に過ぎませんよ。
Just aとNothing以外にHogeという値がある別の定義があったらどうするんですか?
定義はいくらでも作れますよ。

439:デフォルトの名無しさん
08/06/12 23:37:45
>>438
言っている意味が分からん
アクセサの自動生成はHaskellが既にやってること(フィールドラベル使ったときに)だし、技術的な問題はないと思うんだが

440:デフォルトの名無しさん
08/06/13 03:16:09
パターンマッチの利点:
簡潔 - 記述しやすい (accessors (or deconstructors) for free)
安全 - non exhaustiveness check
速度 - 分岐が集約されているので最適化が楽 (ifの繰り返しを解析するのにくらべて)
以上。他にあるかな?

(というか、そもそもパターンマッチは関数型言語の特徴ではありません。
関数型言語が採用しているADTの特徴というべきでしょ。)


441:デフォルトの名無しさん
08/06/13 03:29:17
問題

パターンマッチを採用している手続き型言語を挙げよ

442:デフォルトの名無しさん
08/06/13 05:12:14
awkはパターンマッチなのかな

443:デフォルトの名無しさん
08/06/13 08:15:48
マセマティカ
項書換えシステム全般 (論理型も含む)


444:デフォルトの名無しさん
08/06/13 08:24:46
Scalaはcase classがある。
パターンマッチ渡しはできないが、match case文がある。
URLリンク(www.scala-lang.org)
Extractorはユーザ定義もできる。
URLリンク(www.scala-lang.org)

445:デフォルトの名無しさん
08/06/15 00:12:39
SML#はもう開発止まっちゃったの?


446:デフォルトの名無しさん
08/06/16 13:51:28
F#(OCAML系)があるしなあ。

JNI(Java Native Interface)の中の人は、
SML/NJのWin32対応をやっていた人だった。
Modular Monadic Semanticsの人。

447:デフォルトの名無しさん
08/06/16 17:39:37
メンバがわりと沢山ある構造体(record)がいくつか必要な時は皆さん
メンバの名前が被らないように注意してレコード作ってますか?
それともクラスにしますか?

448:デフォルトの名無しさん
08/06/16 21:15:11
>>446
何か勘違いしていると思われ


449:デフォルトの名無しさん
08/06/16 21:15:42
F#があるのとSML#関係なくね?SML.NETの存在は微妙かも知れんけど

450:デフォルトの名無しさん
08/06/16 21:18:34
>>447
モジュール名で区別でおk
OCamlでオブジェクトの濫用はお勧めできない


451:デフォルトの名無しさん
08/06/16 22:45:23
SML#の「#」は、.NETよりも歴史が長い


452:デフォルトの名無しさん
08/06/16 22:45:43
プロジェクト期間終了したから取りあえず一息つきたいんじゃないの?
O堀さんのことだからこれで終りとは思えないが。


453:デフォルトの名無しさん
08/06/17 03:18:35
>>450
おお、目から鱗ですありがとう!
このスレは勉強になります。。
俺もできるならクラスは使いたくなかったので助かりましたわ。

454:デフォルトの名無しさん
08/06/22 02:24:57
SML♯で,配列 data[](要素数 n)と int型の i,j を引数にとって,
要素 data[i] と data[j] を入れ替えた配列 を出力する関数
ってどうやればいいんかいな?

455:デフォルトの名無しさん
08/06/22 22:44:31
宿題ですか?


456:デフォルトの名無しさん
08/06/22 23:37:58
OCamlのStream便利だな。。。何でもかんでもコレ使いたくなっちゃうわ。
何かマズいことあるのかな?

457:デフォルトの名無しさん
08/06/23 01:54:09
マズいことはないけど破壊的なのがなにかと使いにくいと思う。

458:デフォルトの名無しさん
08/06/23 01:56:52
>>457
つまりHaskell最高ってことか?

459:デフォルトの名無しさん
08/06/23 02:57:29
ほとんどのデータがint縛りっていうか、31bit制限があるところがツラいと思うんですが、
色々と工夫というかテクがあるなら教えて頂きたいです。

460:デフォルトの名無しさん
08/06/23 06:54:26
>>456
人生、これストリームなり

461:デフォルトの名無しさん
08/06/23 12:22:57
[1;2;3;4]を入力すると[1;3;6;10]を返す関数sigmaを書いたんですが
sigma関数の箇所、もっと効率的なやり方があるような気がしてむずがゆい感じがしてます。
何かアドバイスいただけないでしょうか

let iota n = List.init n ((+)1) in
let sum lst= List.fold_left (+) 0 lst in
let rec take n lst =
    match n with
    0 -> []
    | 1 -> [List.hd lst]
    | _ -> (List.hd lst)::take (n-1) (List.tl lst) in
let sigma lst =
    List.rev (List.fold_left (fun x y->sum (take y lst)::x) [] (iota (List.length lst))) in
sigma [1;2;3;4;5;6];;

462:デフォルトの名無しさん
08/06/23 13:13:09
累積変数で、これまでの和を持ち運ぶ

463:デフォルトの名無しさん
08/06/23 14:45:07
ありがとう。こんな感じですかね
(途中まで同じ)
let sigma lst =
    let accum = ref [] in
    List.rev (List.fold_left (fun x y-> accum:=y::!accum; sum !accum::x) [] (iota (List.length lst))) in
sigma [1;2;3;4;5;6];;


464:デフォルトの名無しさん
08/06/23 15:38:22
えー。「ここまでの結果」を「引数で」持ちまわるんだよ。再帰終了するところでその引数をそのまま返す。

465:デフォルトの名無しさん
08/06/23 15:59:00
んー、持ち回る引数がfoldの中なので、プログラム全体の形、結構変わりますよね?
こういった変換は慣れていないので、ちょっと時間がかかりそうです

466:デフォルトの名無しさん
08/06/23 17:53:21
iotaとかsumとかtakeとかを使わないで、さらにfoldにこだわらなくて、かつ再帰を使っていいなら
こんなのはどうっすかね?

let sigma l =
let rec sigma' cur r = function
  | [] -> List.rev r
  | x::xs -> let next = cur + x in sigma' next (next :: r) xs in
sigma' 0 [] l


# sigma [];;
- : int list = []
# sigma [1;2;3;4;5;6];;
- : int list = [1; 3; 6; 10; 15; 21]

foldとかを使ったもっとElegante"~{エレガンテ}~"な方法を希望ならスマソ。

467:デフォルトの名無しさん
08/06/23 20:17:29
こんな感じ。

reverse $ snd $ foldl (\(a,xs) b -> let x = a + b in (x,x:xs)) (0,[])

Haskellの構文を使ってるがMLでも同様のはず。

468:デフォルトの名無しさん
08/06/23 20:21:41
pairにする必要ないんじゃ…

tail $ reverse $ foldl (\a b -> (head a + b):a) [0]


469:デフォルトの名無しさん
08/06/23 20:37:13
>>468
おお、こういうのがノータイムで出てくるようになりたいわ。

470:デフォルトの名無しさん
08/06/23 21:44:56
let sigma lst =
let rec sum lst =
match lst with
| [] -> []
| car :: cdr -> (List.fold_left (+) 0 lst) :: (sum cdr) in
List.rev (sum (List.rev lst));;
こんなんどうでっしゃろ?

471:デフォルトの名無しさん
08/06/23 21:48:14
>>467-468
おまいらHaskell大好きだなwwwww

472:デフォルトの名無しさん
08/06/23 22:44:06
MLの構文を知らずにこのスレを覗いてる奴が結構居ると予想

473:デフォルトの名無しさん
08/06/23 22:46:14
関数の中ですぐmatchするのってfunctionで書き直しちゃいたいんだけど。

474:デフォルトの名無しさん
08/06/23 23:08:55
let sigma l =
 let rec aux store = function
 | [] -> []
 | x::xs -> x+store :: aux (x+store) xs
 in
 aux 0 l
これでok。末尾再帰じゃないけど。な。

475:デフォルトの名無しさん
08/06/23 23:31:25
うおお、皆さんありがとう!
いろんなやり方があって勉強になります

476:デフォルトの名無しさん
08/06/23 23:39:06
let ($) g f x = g (f x)
let sigma = (fun s -> rev $ fold_left (fun ys x -> s := x + !s; !s::ys) []) (ref 0)

477:デフォルトの名無しさん
08/06/23 23:43:15
let (@@) f x = f x
let sigma l = (fun s -> rev @@ fold_left (fun ys x -> s := x + !s; !s :: ys) [] l) @@ ref 0

478:デフォルトの名無しさん
08/06/23 23:47:55
let sigma = tl $ rev $ fold_left (fun ys x -> hd ys+x :: ys) [0]

479:Haskell 修業中
08/06/24 04:32:12
すんません。まさに >>472 なんですが…。

import List

sigma = tail.(scanl (+) 0)



480:デフォルトの名無しさん
08/06/24 21:58:08
対象かアーキュムレータの頭を累積値として利用する手もある。

let rec sigma = function
  | [] -> []
  | hd::[] -> hd::[]
  | x::y::tl -> x::(sigma (x+y::tl));;

let sigma_rev l = 
  List.fold_left (fun acc hd ->
    match acc with 
    | [] -> hd::acc
    | last::_ -> hd+last::acc) [] l;;

481:デフォルトの名無しさん
08/06/24 23:31:17
>>479

tail . (scanl (+) 0)

scanl1 (+)
でおっけ

482:Haskell 修業中
08/06/24 23:48:01
>>481
おおっ!そんなのがあるんですね。

やっぱ、Haskellすごいわ
スペースを入れてもわずか10文字w

483:デフォルトの名無しさん
08/06/25 01:45:08
意味不明なライブラリ関数の海で遊んで溺れかけているHaskellianにしか見えない。
逆に、OCamlには関数なさすぎ砂漠なわけだが。


484:デフォルトの名無しさん
08/06/26 17:36:09
Haskellそこらじゅうで大人気だな。
ム板住民の半分はHaskell(かRuby)好きなんじゃないかと思えてくるわ。

OCamlはデフォルトでは関数も文法も少ないけど自分で定義しなさい、みたいな所がCっぽくて好き。

let scanl1 f = function | [] -> [] | (x::xs) -> scanl f x xs
let scanl f x y = List.rev (List.fold_left (fun a b -> (f (List.hd a) b) :: a) [x] y)

scanl1 (+) [1;2;3;4];;
ってできるし。
HaskellとOCamlの差が出てくるのはやっぱりIOとかかね。

485:デフォルトの名無しさん
08/06/26 18:20:16
refを沢山使うprogramをHaskellで書くのは大変。
Ocamlで書くのが大変なのは…特にないな。遅延計算くらいか。

486:デフォルトの名無しさん
08/06/26 18:34:02
ファイルを順々に読んでいく、みたいのはHaskellだと遅延評価だから普通のリストと同じように出来るけど、
OCamlだとバッファリングするとかストリームとか多少は副作用がある方法を使わなきゃいけないかなー。
まあ他の言語ではみんなそうしてるから特に抵抗は無いが。

487:Haskell 修業中
08/06/26 18:35:15
>>485
Streamって遅延計算じゃないんですか?

488:Haskell 修業中
08/06/26 18:37:26
あっ、かぶったw
やっぱりStream使うんですね。

489:デフォルトの名無しさん
08/06/26 18:56:37
Streamはかなり便利だけど、
Haskellでは通常のリスト操作みたいに出来るっていうのはやっぱり魅力だよな。
使い方にもよるがソースがStream.junk ();とかだらけになるのは美しくないので避けたい。


490:デフォルトの名無しさん
08/06/26 20:28:23
>>485
たとえば?
俺がHaskellですっきり書いてやるよ。

491:デフォルトの名無しさん
08/06/27 18:43:09
ocamlcってgccの-O0みたいなオプションないのかな

というかこんなことを平気で聞いてもよさげな初心者スレないのかな

492:デフォルトの名無しさん
08/06/27 22:56:35
というかこんな意味不明なこと平気で聞くなよ。
kwsk


493:デフォルトの名無しさん
08/06/28 01:38:52
>>492
ocamldebugを使ってみた
   ↓
Eventなのに止まらないだと・・・?
   ↓
きっとコンパイラが最適化してるからだ!
   ↓
ocamlのコンパイラって最適化無効にするオプションないのかな←今ここ

ocamldebugのstep実行で止まるはずのポイント飛ばされたり、
プロファイラで使われているはずの関数が未使用と判定されたり、
言語以前にツールの使い方覚えるとこで俺\(^o^)/

494:デフォルトの名無しさん
08/06/28 02:23:23
全然初心者的内容じゃねーじゃん。ocamlc (ocamloptもそうだが) は
最適化みたいなことはほとんどしてないんで。書いたとおりに実行するよ。

優秀なOCamlプログラマを大勢知っていますが、大多数はデバッガの必要を感じていません。
俺もデバッガは使わないので何ともいえんが、何か使いかたを過っているか、
camlの評価順なぞを未理解なのではないかと思われ…


495:デフォルトの名無しさん
08/06/28 03:05:49
>>490
ICFP PC 2007の問題とかどうよ?

RNA実行するだけでも副作用なしだと大変じゃないかな

496:デフォルトの名無しさん
08/06/28 05:35:04
>>494
皆使ってなかったのか・・・
ソース解析する際流れ追うのに使えるかと思ったんだが

>何か使いかたを過っているか、
>camlの評価順なぞを未理解なのではないかと思われ…
どっちも怪しいのでもちっと勉強してくる

497:デフォルトの名無しさん
08/06/28 10:30:39
>>494
そういうのって全部ログコードはいてチェックするんですか?デバッグとそういうやり方併用してるけれど全部それだとチョイきつそう。

498:デフォルトの名無しさん
08/06/28 14:39:27
コードを綺麗に書けば、printf デバッグと、十分なユニットテストで 大抵バグは潰せる。
デバッガでちまちまやる前に、assertion と Printexc.get_backtrace でかなりのことはわかるはずだが。
Cのデバッガのように必須だという認識の人は少ないと思われ。
もちろん使うなとは言わん。ocamldebugはリプレイとか強力。


499:デフォルトの名無しさん
08/06/28 23:12:07
>>498
cの場合は破壊的操作と非破壊的操作をあまり意識せずにプログラミングすることもあるから
余計に必要になってくるのではないか?それに、小さな関数の定義を作って大きくするより、
一つでまとめて操作すると言う習慣も影響してるかも。

500:デフォルトの名無しさん
08/06/28 23:45:19
Cは(普通は)インタプリタがないからっていう部分も大きいと思う。

501:デフォルトの名無しさん
08/06/29 03:08:23
ちょっとcodepadが使えるのか試してみたよ。
URLリンク(codepad.org)

502:デフォルトの名無しさん
08/06/29 03:21:42
C は REPL が無いからね

503:デフォルトの名無しさん
08/06/29 20:22:57
lisp的なREPLを備えたC環境なんてないよな。確かに…

あってもいいんだけど。

504:デフォルトの名無しさん
08/06/29 20:55:26
gdbは?

505:デフォルトの名無しさん
08/06/29 20:58:08
そういえばこんなのがあったの忘れてたわ。

C-REPL
URLリンク(neugierig.org)

506:デフォルトの名無しさん
08/06/29 20:58:59
Haskell製か

507:デフォルトの名無しさん
08/06/29 22:53:12
>>504

>Cのデバッガのように必須だという認識の人は少ないと思われ。

だから普通はそういう事なんだろうなww
まあgdbではlispとかcamlとかみたいに書いて即テストって訳にはいかないがgdbは便利だよな。

508:デフォルトの名無しさん
08/07/05 03:43:57
>>454亀だがちょうど最近覚えたので確認のために
fun swap (date,i,j)=
 let
  val a = Array.sub(date,i)
  val b = Array.sub(date,j)
 in
  Array.update(date,i,b);
  Array.update(date,j,a)
 end
localでArrayをopenしておいたほうが綺麗かも


509:デフォルトの名無しさん
08/07/22 18:35:13
すんまそん、Ocamlで日本語文字は扱えませんか?
例えば正規表現なんかでも使いたいんですが。


510:デフォルトの名無しさん
08/07/22 20:41:48
OCamlのstring型は任意のバイナリが入るので、標準入力とかファイル経由で扱うなら
日本語でもなんでもあり。
ただし、OCamlのソースコードに日本語を埋め込みたいなら、EUC_JP以外使えないと思う。
EUC_JPなら、普通にperl互換正規表現ライブラリのラッパーが使える。
URLリンク(pcre-ocaml.sourceforge.net)
データをUNICODEとして扱うなら、Camomileで日本語「文字」を扱えますね。
URLリンク(camomile.sourceforge.net)

あと、正規表現で日本語を扱う問題はOCamlに限らずどれでも一緒なので、
URLリンク(www.din.or.jp)
あたりをどうぞ。

511:デフォルトの名無しさん
08/07/22 22:03:32
最後のURLは、perlのやり方としては古くて、
(今や\p{Hiragana}という風に"script"を文字クラスとして指定できるので)
「どれも一緒」というよりも、Ocamlだとこのやり方が有効って事になると思います。

512:デフォルトの名無しさん
08/07/22 22:16:11
UTF8 で書いて pcre-ocaml の `UTF8 オプションを使え。あと camomlile。以上。


513:デフォルトの名無しさん
08/07/23 22:25:46
MLtonのFFIを使って、Cのmain関数からSMLを呼びたいのだが、これは
不可能?



514:デフォルトの名無しさん
08/08/10 15:52:08
URLリンク(www.cs.caltech.edu)
こんなのをみっけたけど、ゆうめいなん?

515:デフォルトの名無しさん
08/08/13 08:08:15
OCamlの入門記事
URLリンク(indori.blog32.fc2.com)

516:デフォルトの名無しさん
08/08/13 16:19:54
何よりもピヨが気になる

517:デフォルトの名無しさん
08/08/14 08:38:28
>>515
入門記事というより、入門している記事


518:デフォルトの名無しさん
08/08/14 08:51:30
>> 514
数ヶ月前に見たので、うろ覚えだけど、optional arguments や polymorphic variants が
かなり早期に出てくる。そういう点では、こういう新しい機能をおまけとして解説してきた、
「OCaml を使ってプログラミングを学ぶ」本とは毛色が違い、より OCaml 自体を学ぶ事に
重点が置かれている。class についても最後にかなりページ数が割かれている。


519:デフォルトの名無しさん
08/08/14 09:07:36
>> 518 続き
そういうわけで、ひととおり関数型言語のコンセプトについて理解した人には
OCaml リファレンスとしていいんじゃないかと思う。


520:デフォルトの名無しさん
08/08/14 10:11:59
>>519
解説ありがとう。なるほど他言語をやっていて、始めようとする人向きだということが
分かりました。


521:デフォルトの名無しさん
08/08/17 00:31:48
>>515
Winでパフォーマンス落ちるのはバイトコードの話でしょ?
ネイティブなら問題ない

522:デフォルトの名無しさん
08/08/24 14:59:04
smlからsml#に移行しようとしてるんだけど,
型エラー(?)が出て実行できないのがある.
誰か助けて...

次のレスにエラーが出るプログラムを貼ります.

523:522
08/08/24 15:00:46
リストを使った集合演算のプログラムです.
(他にもエラーが出るプログラムはあるのだけど,
とりあえずある中で一番小さいもの)

まずはシグネチャ

signature SET =
sig

eqtype 'a Set

exception EmptySet

val emptyset : 'a Set
val elem : 'a Set -> 'a * 'a Set
val member : ''a -> ''a Set -> bool
val add : ''a -> ''a Set -> ''a Set
val map : ('a -> 'b) -> 'a Set -> 'b Set
val allelem : ''a Set -> (''a * ''a Set) Set
val fromList : 'a list -> 'a Set
val toList : 'a Set -> 'a list

end;

524:デフォルトの名無しさん
08/08/24 15:01:24
■■学校を作ろう!■■
VIP発でサイトを作ろうと思うんだ。(詳しくはWikiを見てくれ)
パートスレになるんでパー速(GEP)に移動している。
今スタッフを募集しているから、来てくれないか?

■Wiki
URLリンク(www36.atwiki.jp)
■募集スタッフ
プログラム担当(特にErlang、Perl)
デザイナー(サイト上のアイコン、ロゴなど)
WEBデザイナー(サイトデザイン案に沿って、htmlやCSSを書ける)
他にも宣伝担当なども募集している。
■スレ
URLリンク(ex14.vip2ch.com)

525:522
08/08/24 15:02:24
次はストラクチャ(の一部)

structure Set :> SET =
struct

type 'a Set = 'a list;

exception EmptySet;

val emptyset = [];

(* Compute a pair of the element of input lists and rest set *)
fun elem [] = raise EmptySet
| elem (x::xs) = (x,xs);

(* Check whether x is an element of a set *)
fun member _ [] = false
| member x (y::ys) = (x = y orelse member x ys);

526:522
08/08/24 15:05:15
(続き)

(* Add an element to a set *)
fun add a A =
if member a A then A
else a::A;

val map = List.map;

(* Compute {(a,A \ {a}) | a \in A} *)
(* where A is an input set *)
fun allelem A =
let
val (b,B) = elem A
in
add (b,B) (map (fn (c,C) => (c, add b C)) (allelem B))
end
handle EmptySet => emptyset;

fun fromList l = l;
fun toList l = l;

end;

527:522
08/08/24 15:09:53
で,以下を実行するとエラーが出ます.
(SMLでは大丈夫だった)

Set.toList (Set.allelem (Set.fromList [1,2,3,4,5]));

エラーは以下のとおりです.
Diagnoses:
stdIn:12.1-12.49 Diagnosis(typecheckExp 12):
expression type and annotation don't agree
expression type: (int * int Set.Set) Set.Set -> (int * int Set.Set) list
annotation: (int * int Set.Set) Set.Set -> (int * int Set.Set) list
stdIn:12.1-12.49 Diagnosis(typecheckExp 16):
opetator and operand don't agree
operator type: (int * int Set.Set) Set.Set -> (int * int Set.Set) list
operand types: (int * int Set.Set) Set.Set
stdIn:12.1-12.51 Diagnosis(typecheckExp 12):
expression type and annotation don't agree
expression type: (int * int Set.Set -> expression) ->
(int * int Set.Set) list -> expression
annotation: (int * int Set.Set -> expression) ->
(int * int Set.Set) list -> expression
stdIn:12.1-12.51 Diagnosis(typecheckExp 16):
expression type and annotation don't agree
expression type: int * int Set.Set
annotation: int * int Set.Set
stdIn:12.1-12.51 Diagnosis(typecheckExp 12):
expression type and annotation don't agree
expression type: int Set.Set -> expression
annotation: int Set.Set -> expression

528:522
08/08/24 15:11:46
(エラー続き)

stdIn:12.1-12.51 Diagnosis(typecheckExp 16):
expression type and annotation don't agree
expression type: int * int Set.Set
annotation: int * int Set.Set
stdIn:12.1-12.51 Diagnosis(typecheckExp 16):
opetator and operand don't agree
operator type: int Set.Set -> expression
operand types: int Set.Set
stdIn:12.1-12.51 Diagnosis(typecheckExp 16):
opetator and operand don't agree
operator type: (int * int Set.Set -> expression) ->
(int * int Set.Set) list -> expression
operand types: int * int Set.Set -> expression

529:522
08/08/24 15:13:41
(さらに続き)

stdIn:12.1-12.51 Diagnosis(typecheckExp 16):
opetator and operand don't agree
operator type: (int * int Set.Set) list -> expression
operand types: (int * int Set.Set) list
stdIn:12.1-12.51 Diagnosis(typecheckExp 12):
expression type and annotation don't agree
expression type: (int * int Set.Set) list -> expression
annotation: (int * int Set.Set) list -> expression
stdIn:12.1-12.51 Diagnosis(typecheckExp 16):
opetator and operand don't agree
operator type: (int * int Set.Set) list -> expression
operand types: (int * int Set.Set) list
BUG :invalid type

530:デフォルトの名無しさん
08/08/25 02:01:56
数学における記法の話です
大学入試の問題文の冒頭で
「f(x)=x^3+3x^2とする」とあるのですが
この=はC言語と同様に、右辺の関数にfという名前を付けるという
意味での=つまり;=のことでしょうか?

531:デフォルトの名無しさん
08/08/25 02:06:58
C言語では関数に名前をつけるときに=を使わないのでは?

532:デフォルトの名無しさん
08/08/25 02:59:26
>>530 関数型言語MLについて語るスレッドです。

533:デフォルトの名無しさん
08/08/25 04:08:36
>>532
すみません、これだけでいいので分かる方いたら教えてください

534:
08/08/25 05:21:23
WindowsでOCamlを使うには、「MinGW」もしくは「Microsoft Visual C++ and Microsoft Assembler」が必要になります
って読んだんだけどOcamlのコンパイラってCへのトランスレーターなの?

535:デフォルトの名無しさん
08/08/25 07:18:20
アセンブラでsho

536:
08/08/25 16:19:07
アセンブラですか。どうもありがとう。

537:デフォルトの名無しさん
08/08/25 17:17:37
>>530
夏休みも終わりだねえ


538:デフォルトの名無しさん
08/08/25 23:17:08
>>522
閑古鳥の鳴いてるメーリングリストを活性化するために話題を投げてくれ


539:デフォルトの名無しさん
08/08/26 20:17:38
>>522
SML#のバグじゃないかな・・・?
次回アップデートに期待としか。

540:デフォルトの名無しさん
08/08/27 08:46:12
URLリンク(eigenclass.org)


541:デフォルトの名無しさん
08/08/27 08:51:16
warota

542:061123251194.cidr.odn.ne.jp
08/09/19 18:58:37
よいコンパイラの教科書(当然関数型)があれば紹介してください。和英こだわりません。


543:デフォルトの名無しさん
08/09/19 19:00:51
まずはnavi2chのスレをみたほうがいいかもしれない

544:061123251194.cidr.odn.ne.jp
08/09/19 19:05:21
そのようですね。


545:542
08/09/19 19:29:56
おさわがせしました。昔の navi2ch がパスに残っていた、、、ダサいな




546:デフォルトの名無しさん
08/09/19 19:31:39
ところで、
・処理系を関数型言語で書きたい
・関数型言語の処理系を書きたい
どっち?

547:542
08/09/19 19:38:53
コンパイラを書きたい、ですね。(多分書かないけど)


548:デフォルトの名無しさん
08/09/19 19:44:24
ワラ


549:デフォルトの名無しさん
08/09/19 20:24:30
や、だから
・コンパイラを関数型言語で書きたい
・関数型言語のコンパイラを書きたい
のどっちなのかということですよ

550:デフォルトの名無しさん
08/09/19 21:16:48
MLでコンパイラの教科書って有名なの1冊しかないんじゃないの?
いいかどうかは知らない。

551:デフォルトの名無しさん
08/09/19 21:25:48
洋書で青い表紙で虎のやつのこと?モダンなんちゃらだっけ?
EOPLはschemeでML処理系を作るやつだったよね

552:デフォルトの名無しさん
08/09/19 21:27:18
「Modern Compiler Implementation In ML」かな…
持ってるけど、読んでない…

553:デフォルトの名無しさん
08/09/19 22:41:49
まだモダンなのかなぁ

554:デフォルトの名無しさん
08/09/19 23:00:15
近代はずっと近代。もっと新しいのは現代。

555:デフォルトの名無しさん
08/09/20 11:27:06
計算機の本で「コンテンポラリー」を名乗ったものって記憶にないなぁw
なんかあったっけ?

556:デフォルトの名無しさん
08/09/20 11:54:33
まだポスト・モダンが出現してないから。

557:デフォルトの名無しさん
08/09/20 12:10:11
学会のサブタイトルなら見たことある。

558:デフォルトの名無しさん
08/09/20 17:03:51
GODIがインストールできない。bootstrap_stage2で失敗する。

~/Desktop/godi-rocketboost-20080630$ sudo ./bootstrap --prefix /usr/local/godi
...
Bootstrap was successful!
...
Selected GODI section: 3.10
...
~/Desktop/godi-rocketboost-20080630$ PATH=/usr/local/godi/bin:/usr/local/godi/sbin:$PATH
~/Desktop/godi-rocketboost-20080630$ export PATH
~/Desktop/godi-rocketboost-20080630$ sudo ./bootstrap_stage2
.: 1: godi_confdir: not found
Error: Command fails with code 2: /bin/sh
Failure!
~/Desktop/godi-rocketboost-20080630$

なんでだろう。
URLリンク(d.hatena.ne.jp)
の言う通り3.10に対応してないのだろうか?
それとも根本的なところを勘違いしてる?
OCaml初心者ですが、GODIが必要です。

559:デフォルトの名無しさん
08/09/23 09:30:04
> OCaml初心者ですが、GODIが必要です。
この前提が、なんか、もう。


560:デフォルトの名無しさん
08/09/27 19:06:57
NumとかBig_intのプリンタが欲しいとか?

561:デフォルトの名無しさん
08/09/29 10:13:03
たかがそんなもののために GODI が必須で、
GODI がインストールできないから使えない、というのは間違ってますね。

逆に、GODI 依存ユーザからお前のライブラリ GODI にポートしろとか
当然のように言われるのも迷惑です。


562:デフォルトの名無しさん
08/09/29 21:15:32
OCamlってライブラリ関連でコミュニティの足並みそろってないせいで言語の良さがかすんじゃってる感ある。

563:デフォルトの名無しさん
08/09/30 11:52:19
足並み揃えて大きな標準ライブラリ作ればって話は昔からあるし、今もOCamlForgeとかでやってるけど、なかなか成果が出ない。
なんでだろう?

564:デフォルトの名無しさん
08/09/30 13:34:01
これからはHaskellだから

565:デフォルトの名無しさん
08/10/01 16:14:10
windowsXPを使っていて、ML言語を使えるようにしたいので、インストール方法をどなたか教えていただきたいのですが・・・


566:デフォルトの名無しさん
08/10/01 16:17:28
じゃ、f# がいいんじゃない?
インストーラーがあるよ

567:デフォルトの名無しさん
08/10/01 19:53:20
OCamlにだってWindowsのインストーラくらいはさすがにある。

568:デフォルトの名無しさん
08/10/01 23:00:11
>>567
コンパイルできないやつか
コンパイルしても動かないやつしかない

569:デフォルトの名無しさん
08/10/02 08:45:56
>>565
cygwin入れれば標準でocaml入ってるよ。

570:デフォルトの名無しさん
08/10/02 14:34:32
cygwin入れるならデュアルブートか仮想化するなぁ…

571:デフォルトの名無しさん
08/10/03 04:07:14
SML#はプロジェクトのページにインストールから簡単なプログラミングまでチュートリアルがあったはず

572:デフォルトの名無しさん
08/10/03 12:52:15
>>565
こーゆー時のためにURLリンク(ocaml.jp)です。
OCamlのインストール方法からチュートリアルまで揃ってますよ。

573:デフォルトの名無しさん
08/10/03 15:53:52
相変わらずマルチバイト扱いにくいね


574:デフォルトの名無しさん
08/10/03 17:01:09
使い方がさっぱりわからないunicodeライブラリならあるよ

575:デフォルトの名無しさん
08/10/04 00:03:39
>>574
それ扱いやすいって言わないよ~ orz

普段使いで文字列扱うせいでこまるんだよな、言語自体好きなのに。


576:デフォルトの名無しさん
08/10/04 09:44:20
日本語でおk

577:デフォルトの名無しさん
08/10/06 11:30:36
ocamlのコンソールの使いにくさは異常。
pythonならC-b, C-fでカーソルの移動ができたり、
emacsの標準的なキーが使えるから気軽にコンソールでためせる。



578:デフォルトの名無しさん
08/10/06 11:58:55
>>577
ledit使え、と思ったらなんか終わってるらしい。
どうしたものか...

579:デフォルトの名無しさん
08/10/06 12:01:10
rlwrap

580:デフォルトの名無しさん
08/10/06 12:14:31
inf-caml使えばいい

581:577
08/10/06 13:12:12
みなさんありがとうございます。
ためして見たところrlwrapを使うことにしました。

すごいです!!ありがとう!



582:デフォルトの名無しさん
08/10/06 21:34:32
>>578
>ledit使え、と思ったらなんか終わってるらしい。
え、終わってるって、どういうこと?
俺、ledit 使ってるけど

583:デフォルトの名無しさん
08/10/07 12:19:07
>>582
ledit終了 でぐぐるとトップに出てくるブログに書かれてる情報絡みのことじゃないかと

584:デフォルトの名無しさん
08/10/09 11:03:05
3.11 のブランチ release311 が ocaml-cvs に出来ました。おそらくもうすぐリリースですね。

3.11 の目玉

* native判のモジュールの dynamic link
* private abbreviation type
* Printexc.print_backtrace 等、デバッグに役立ちそうな backtrace 系関数数種
* ocamlnat: native の toplevel (デフォルトでは作らないそうな)


585:デフォルトの名無しさん
08/10/09 12:12:17
>native判のモジュールの dynamic link

これって既に10で出来るようになったんじゃなかったけ?
と思ったら、今は dynlink.cmxa をリンクしないといけないのか
これは便利だな

586:デフォルトの名無しさん
08/10/10 12:01:15
法政大学の児玉先生の所におかれている
URLリンク(yk.i.hosei.ac.jp)

をいまどきのSMLNJで動かすにはどう変更したらよいでしょうか.
ord(#"0")はすぐわかりましたが,lookaheadなどがcharを期待してして
いるのが仕様変更になったようで,elem をどうやってやればcharで
使えるのかが判然としません.


587:デフォルトの名無しさん
08/10/15 09:18:45
OCamlの次世代デファクトスタンダードライブラリを目指すBatteriesがα1をリリースしたらしい。

URLリンク(dutherenverseauborddelatable.wordpress.com)

一応前から内容は見ていて、OCamlのベースライブラリをモダンな階層構造に再編集しているのはすばらしいと思う。
ただ、ちょっと既存の外部ライブラリに頼りすぎていて、枝葉になるほど寄せ集め感が否めないのが気になる。
将来これに一本化されていくのかなー?私もこれに乗るのかどうか、今悩み中。


588:デフォルトの名無しさん
08/10/15 15:52:01
過疎ってるからって hatena からそのままコピペするのはよそうよ


589:osiire
08/10/15 19:04:27
誰ですか、私のエントリーをコピペしたのは。
別にいいですけど、一人称くらい変更してくれてもいいのに。

590:デフォルトの名無しさん
08/10/24 21:49:05
3.11の目玉の一つの、private abbreviation type って何でしょか?
private typesでもなくprivate row typesでもない、なにか?まぎらわしー。

591:デフォルトの名無しさん
08/10/26 20:54:39
過疎ってるから
俺がocaml勉強日記を書いてあげようか?

わからないことがあったら答えて下さいね!

592:デフォルトの名無しさん
08/10/26 23:04:30
断る

593:デフォルトの名無しさん
08/10/26 23:12:42
面白くなりそうだったらいいよ。

594:デフォルトの名無しさん
08/10/26 23:21:06
>>591
おう、かいてたらいいよ。

595:デフォルトの名無しさん
08/10/27 10:53:31
module M : sig
type nat = private int
val nat_of_int : int -> nat
val int_of_nat : nat -> int
end = struct
type nat = int
let nat_of_int n =
(assert (n >= 0));
n
let int_of_nat n = n
end


596:デフォルトの名無しさん
08/10/27 15:21:06
>>595
レスどうも。
この例は、signatureでtype natとして隠蔽した場合と何が違うのでしょう?
試してもprinterが<abstr>になるかどうかくらいしか違い分かりませんでした。
どういう利用法があります?

597:デフォルトの名無しさん
08/10/27 15:53:58
ぐぐったらあったorz ↓
URLリンク(d.hatena.ne.jp)
subtypingとは気づかなかった。

598:デフォルトの名無しさん
08/11/01 12:46:43
nullとnilの違いを教えてください。

599:デフォルトの名無しさん
08/11/01 13:20:42
null:物の表面に液や塗料をなすりつけること。
nil:食物を、水または調味料を加えた汁に入れて加熱し、食べられる状態にすること。

600:デフォルトの名無しさん
08/11/01 14:51:15
>>599
スレリンク(tech板)l50

601:デフォルトの名無しさん
08/11/02 02:49:24
SMLにおいて、nullとnilの違いを教えてください。


602:デフォルトの名無しさん
08/11/02 02:53:01
nilは空のリスト。
nullはListストラクチャーの、リストを受け取りnilかどうかをboolで返す関数。

603:デフォルトの名無しさん
08/11/02 03:21:30
nullp

604:デフォルトの名無しさん
08/11/02 03:35:53
>>599
ウケ狙いなら、残念。もう一ひねりホシイ。

605:デフォルトの名無しさん
08/11/02 07:43:26
ウケ狙いならって・・・
他に何があるというのか小1時間(ry

606:デフォルトの名無しさん
08/11/04 06:30:51
独学でSMLの本を使いながら関数言語を学んでいるのですが、上手くできない問題があり困っています。

replicate(4);
と打つと、
val it = [1,2,2,3,3,3,4,4,4,4] : int list
といった感じに1を一つ,2を二つ、3を三つ、4を四つといったリストを
出力されるSMLのリカーシブメソッドを書きたいのですが、上手く行きません。分かる方教えていただけると助かります。

607:デフォルトの名無しさん
08/11/04 07:09:08
うまくいかなかったやつを載せてみてよ。

608:デフォルトの名無しさん
08/11/04 08:14:40
>>606
リカーシブメソッドっていうのが何を差してるのか分からないけど、
入力: 自然数n
出力: 要素が全てnで長さnのリスト
とするサブ関数使えばいいんじゃない?

609:デフォルトの名無しさん
08/11/04 08:21:09
n
[1,2,3,...,n]
[1,22,333,...,n,n,n,n,]
の二行目から三行目で>>608使えばいいな。

610:デフォルトの名無しさん
08/11/04 09:16:29
recursive
再帰だな。

611:608
08/11/04 09:29:59
とりあえず作ってみた。
>>609のやりかたとは違います。
↓にあっぷしてみたので、ご参考までに。
URLリンク(www2.uploda.org)
(パスは sml です)

入力は自然数(0以上)を仮定しています。

612:デフォルトの名無しさん
08/11/04 12:47:57
あー、答えちゃったの?どう読んでも宿題なんだから、自分で考えさせてあげなきゃ。

613:608
08/11/04 18:17:23
>>612
やっぱそうだよねぇ。
「独学で」なんて書いてるから、
にっちもさっちも行かなくなったと思っちゃったんだよね。
やっぱ、寝ないとだめだな。

614:デフォルトの名無しさん
08/11/04 23:34:42
>>612>>613
良く寝て頭を休めろ。

615:デフォルトの名無しさん
08/11/05 00:11:55
SMLならメソッドじゃなくてファンクションだろ、とどうでもいい突っ込み。
再帰関数はn-1番目からn番目を導出する定義をそのまま書くのがコツ。
もう>>606は見てないだろうけど。

616:デフォルトの名無しさん
08/11/05 00:43:05
宿題でも独学でもどっちでもいいのでは。

617:デフォルトの名無しさん
08/11/05 00:55:48
URLリンク(xy.yu.to)
始終荒れまくりの海外サーバ絵チャだ

一人の神プログラマーが強すぎてマクロ荒しが全く太刀打ちできてない。
荒しプログラマーは全員退散!!
誰か倒してくれwwwwww


618:デフォルトの名無しさん
08/11/05 01:15:09
>>611
わざわざお答え頂ありがとうございます。
一応こちらもパターンマッチングでない、if - elseの方法で出来ました。ネストしたループのfunctionの前にletが抜けていただけでした。
参考になりました。

619:デフォルトの名無しさん
08/11/05 04:09:40
>>618
こういう課題は論理型の方がすっきりした定義になるね。

620:デフォルトの名無しさん
08/11/09 12:02:17
すんません教えてください。

(int -> int -> int) -> int

という関数の定義例が分かりません。

(int -> int) -> int -> int なら
たとえば
let func = fun f x -> (f 2) * x;;
でいいことが分かるのですが、

(int -> int -> int) -> int
だとわからなくなります。

『二つのintを引数とし、intを返す関数』を一つの引数としてとり
intを返す関数というふうに理解してます。

コードはどのように考えればよいんでしょうか?

621:デフォルトの名無しさん
08/11/09 12:48:12
なんでもいいけど
let func f = (f 1 2) + 3;;

622:デフォルトの名無しさん
08/11/09 14:05:34
>>621
ありがとうございます。
理解しました。

623:デフォルトの名無しさん
08/12/23 03:10:20
ふと気づいたらOCaml3.11.0キテター

624:デフォルトの名無しさん
08/12/23 10:16:58
おお。
Mozartの64bit版も来ないかなぁ・・・クリスマスプレゼントに

625:デフォルトの名無しさん
08/12/25 13:35:35
mac leopardにsmlインストールしようと長いこと奮闘しているのですが、どうにも上手くいきません。
どなたか導入に関してわかりやすいサイトありましたら、教えてください。

626:デフォルトの名無しさん
08/12/27 16:39:09
Macports使えよ


627:デフォルトの名無しさん
08/12/29 12:31:58
>626
やっと入れられた。ありがとう。

628:デフォルトの名無しさん
08/12/29 12:34:37
>>625
なんだ、お前も最近増えてきたにわかマカか

629:デフォルトの名無しさん
08/12/29 13:04:14
>>628
人生にお疲れのようですね。

630:デフォルトの名無しさん
09/01/01 23:05:22
引く手あまたのプログラミング言語は?
URLリンク(slashdot.jp)
---
Java(16479件)、C++(8080件)、C#(7780件)、JavaScript(6749件)、
Perl(5710件)、PHP(2641件)、Python(1408件)、COBOL(1207件)、
Ruby(769件)、Lisp(33件)といった感じらしい。

とりあえずJavaとC/C++/C#、あとJavaScriptを覚えれば、
当分仕事には困らないようである。COBOLのしぶとさも目立つ。

ちなみにHaskellやOCamlの求人は10以下だったそうだ。
---

631:デフォルトの名無しさん
09/01/03 03:15:13
当然だ。HaskellやOcamlの素晴らしさを理解できる人種は
限られているからな。JavaやC++みたいな糞言語を使う糞グ
ラマがいる限り日本のIT産業の生産性は低いままだろう。
今必要とされているのは我々のような高い能力をもつエンジ
ニアであるにも関わらずスーツ族にはそりがわからんのですよ。
うはwテラガンダムwww俺自重www

こうですかわかりません

632:デフォルトの名無しさん
09/01/03 05:18:13
パラダイムシフトはある日突然のように起こる

633:デフォルトの名無しさん
09/01/03 11:20:18
>>631
職業プログラマは免許制にすればいいんじゃね?

634:デフォルトの名無しさん
09/01/03 11:43:11
>>633
情報処理技術者試験の実務への役立ち度を考えると・・・

635:デフォルトの名無しさん
09/01/03 12:03:45
プログラマの能力なんて知ってる知らないでは計れない。圧倒的多数の凡グラマーとごく一部の神グラマーww

636:デフォルトの名無しさん
09/01/03 13:21:35
>>634
試験は基本中の基本の事柄が出てくるだけだよ。
実務には直接関係ないかもしれないが、その程度のことも知らないようでは
応用性がなくて35歳で定年を迎えるだけ。
ソフトウェア開発を一生仕事にできるのは基本を知っている人間だけだよ。

637:デフォルトの名無しさん
09/01/03 13:42:15
>>636
へえー

638:デフォルトの名無しさん
09/01/03 16:58:45
ソフ開で午後八割くらい午前四割くらいのおれは生きててはだめということですね。わかります

639:デフォルトの名無しさん
09/01/03 17:58:29
>>633
盲目的に試験勉強する人間はもううんざりだな。

640:デフォルトの名無しさん
09/01/03 18:06:33
>>639
たとえばプログラマでも東大院卒と公立高校卒とでは、やはり東大卒のほうが優秀な奴が多いよ。

641:デフォルトの名無しさん
09/01/03 18:59:38
そりゃそうだ
スタートは同じでも高卒と大卒では行き着く先が違う

642:デフォルトの名無しさん
09/01/03 19:50:26
で、高卒は35歳で定年退職です

643:デフォルトの名無しさん
09/01/04 07:25:19
>>642
私のように35才でPrologを始めて、それでプログラマになれたというケースは
どう考えればいいのかな。大学一年で中退してるから、高卒だけど。

644:デフォルトの名無しさん
09/01/04 08:44:37
年齢といい、言語といいそれなりにレアケースかと。
まぁ35ではじめてもいけるとは思うけどね。多分それまでに理論的な思考が身についてないときついと思うが。

645:デフォルトの名無しさん
09/01/04 09:20:24
論理型とか関数型を裏にある数学的な背景も併わせて押えとけば
手続き型でやるより長生きできるのかなーとか思ったり

646:デフォルトの名無しさん
09/01/04 10:09:45
PrologとMLがそんなに差があるわけもないのであって、
40才から始めても大丈夫って言わなくちゃいけないのではないか。
関数型のスレで高卒限定でも35才定年はないと思うよ。

647:デフォルトの名無しさん
09/01/04 12:15:36
>>643
辞めた理由による。
高卒と大学中退は若干違う。

648:デフォルトの名無しさん
09/01/05 18:35:36
35歳でプログラミング始めるのは全然無理ではないし、
業界未経験でPrologのみ扱える35歳が職業プログラマとして入り込めるのも、この業界w
かつての業界成長期にはタクシー運転手や大工から転職してきた人も珍しくなかった。


649:デフォルトの名無しさん
09/01/05 18:57:38
>>648
それはIT土方。アメリカ的に言えばコーダー。
ちゃんと計算機科学を勉強した人間の仕事じゃない。

650:デフォルトの名無しさん
09/01/05 20:22:11
>>648
今だって、エリクソンかなんかでErlangばかりやってて、日本に帰ってきて、
この言語だけは精通していますと言ったら、就職困らないでしょ。希少価値が
あれば、なんとかなるのは今も同じ。

651:デフォルトの名無しさん
09/01/05 21:34:51
>>650
困る困る大いに困る

652:デフォルトの名無しさん
09/01/05 21:46:50
>>651
変だな。Erlangもそうだが、Scalaなんて、書けるって言ったら、
引く手数多だろう。

653:デフォルトの名無しさん
09/01/05 21:54:09
俺なんかErlangもHaskellもScalaもFortranもCobolもJavaも一通り何らかのプロジェクトで携わったことがあるけどニートだよ?

654:デフォルトの名無しさん
09/01/05 21:58:09
C PHP Ruby もやったな。
ほとんどオープンソースプロジェクトと大学のTAやってたころに問題作成・採点やってたころの経験だな

655:デフォルトの名無しさん
09/01/05 22:02:16
とある大学の研究のために作られたハードウェアを制御するデバドラとかも書いたことあるし、
技術は結構あると思うんだけど
人格障害&口下手だから誰も俺なんか雇わないんです。

656:デフォルトの名無しさん
09/01/05 22:34:27
>>652
需要はあるところにはあるんだろうがどこにでもあるわけじゃない。
需要のあるところと縁がなければ(ほとんどないわけだが)どうにもならん。

657:デフォルトの名無しさん
09/01/05 22:46:14
>>656
クリーク・アンド・リバーのような所はプログラマは対象に
していなのかな。アーティスト主体とは聞いたが。

658:デフォルトの名無しさん
09/01/05 22:52:59
>>657
秘密裡に話を進めたい求人っていうのは確かにあるね。


659:デフォルトの名無しさん
09/01/05 23:06:09
>>649
スレの流れを読め。
計算機科学を勉強した人間を前提とした話じゃないだろ。

660:デフォルトの名無しさん
09/01/05 23:25:33
>>657
その会社ググってみたが、HP何ともセンスねぇな・・・

661:デフォルトの名無しさん
09/01/06 05:14:07
Erlangにしても、Scala、ML、どれもヘッドハンティングの対象になる
案件ではないかな。ところで話は変わるが、高齢者向きの関数型言語
というと何になるのかな。Windowsアプリを書きたいなんて言わない
人達。

662:デフォルトの名無しさん
09/01/06 09:00:13
1977年に論文発表のFPでいいと思うよ

663:デフォルトの名無しさん
09/01/06 09:12:48
検索すれば、60歳からhaskellを始めたって人の日記とか見つかるよ

664:デフォルトの名無しさん
09/01/06 12:05:06
>>659
IT土方というのは専門性を持たずに手を動かすのが仕事の作業員のことで、
呼び名こそプログラマでも、専門知識を携えたプログラマとは大きく異なる。
土掘りしようがレンチ握ろうがキーボード叩こうが一緒の連中。
主に派遣。

665:デフォルトの名無しさん
09/01/06 12:50:14
>>664
「頭寒足熱腹八分」。翻訳すると「気取らず、怠けず、欲張らず」くらいになるかな。
1970年代以降の社会では専門知識は現場で帰納的に身につけるもの。仮に前身が、
タクシー運転手であろうと、大工であろうと、あるいは雲助であってもね。

666:デフォルトの名無しさん
09/01/06 12:54:21
頭破七部

667:デフォルトの名無しさん
09/01/06 15:50:42
ML言語で書かれた数式処理ソフトってあるのでしょうか?
今はmaximaをcommon lispから使ってるのですが
maximaよりも機能が豊富だったりするのでしょうか?


668:デフォルトの名無しさん
09/01/06 16:22:17
maximaに勝てるフリーのものなんてないよ

669:デフォルトの名無しさん
09/01/06 17:44:34
>>665
それは好景気の浮かれた古い時代、どんどん経営拡大して人材が追いつかなかった時代の話。
現代は人材にもっとシビアになってきている。
それに~1995年ごろまではソフトウェア的にはそれほど目覚しい進歩がなかったから、
覚えた知識や技術の劣化が遅かったから専門基礎教育を受けない現場叩き上げだけでも何とかやっていけた。
ところが1995~1999年ごろに爆発的に情報技術が進歩しはじめ、
それまで現場でソフトウェア開発に携わってきた"叩き上げプログラマ"は新技術についていけずに、
プログラマ35歳定年説の元になったわけだ。
現在の大学の情報学科や情報工学科などはそういった経験を元にして教育カリキュラムを組んでいるわけだよ。

670:デフォルトの名無しさん
09/01/06 17:55:04
>>669
もっともらしい大嘘乙

プログラマ35歳定年説ってもっと前からあったろうに。

671:デフォルトの名無しさん
09/01/06 18:04:39
CSで学んだようなことが生きるようなタイプの「開発現場」って日本にあんの?
日本のSIとかがやってるのは、今でも右から左にデータを動かすだけの
ユーザプログラミングの代行であり、コンサル業務でしょ

上流にいる奴は業務知識や営業力、調整力が重要で
下流にいる奴は、SQLだの5年も経てば古びるようなフレームワークだの
製品だのの泡沫知識、アジャイルだのデザパタだのについていける程度の
オツムを持っていることだけが重要で、
そこには本物のCSなど影も形も無いように思えるよ

672:デフォルトの名無しさん
09/01/06 18:11:34
>>671
あるよw
それがなかったら日本のIT沈没w

673:デフォルトの名無しさん
09/01/06 18:14:11
>>672
それって研究所系でなくて?
不景気だと、すぐゼニカネにつながらないところは切られがちだよね?

ゲーム屋は、まだSIよりはまともに「開発」だろうとは思うが

674:デフォルトの名無しさん
09/01/06 18:56:13
SIだってソフトウェア工学とかを無視して仕事はできん。

無視して沈没した例もあるし。

675:デフォルトの名無しさん
09/01/06 19:45:20
ソフトウェア工学なんて学問じゃないだろ。
残念だけど、その道の人からは下に見られてるよ。

676:デフォルトの名無しさん
09/01/06 20:12:15
ふざけんな。計算機科学の立派な一分野です。

677:デフォルトの名無しさん
09/01/06 20:19:30
ソフトウェア工学なんて俗学だよ。
数学やらないようなものは科学じゃないよ。

678:デフォルトの名無しさん
09/01/06 23:14:37
おいおいScienceとEngineeringの違いが解ってないのがいるのかよ…

679:デフォルトの名無しさん
09/01/06 23:22:33
>>678
明確な違いはないよ。
特に情報工学と計算機科学の間には。

680:デフォルトの名無しさん
09/01/07 12:56:26
違いはあるが、境界が曖昧。
二つ合わせるとそのくらい幅が広くなる。

681:デフォルトの名無しさん
09/01/07 14:45:40
FP の話をしてくれ


682:デフォルトの名無しさん
09/01/07 17:15:02
FP?興味ないね

683:デフォルトの名無しさん
09/01/08 07:03:14
関数型プログラミングのことじゃないの?

684:デフォルトの名無しさん
09/01/08 09:18:11
バッカスのFPじゃないの?

685:デフォルトの名無しさん
09/01/08 12:49:43
Floating Point

686:デフォルトの名無しさん
09/01/08 12:54:32
FPでぐぐると上の方に出てくるのはfinancial plannerばかりだな

function pointというのもある

687:デフォルトの名無しさん
09/01/08 13:57:12
下着のサイズッて後ろのフォックで分るんだって!!!
知ってた?

A~Bだとフォックが1個
C~Dだと2個
F~だと3個なんだって...

ホント?
自称アゲチンが言ってたんだ。

688:デフォルトの名無しさん
09/01/08 14:44:08
俺FP2級持ってるぞ

689:デフォルトの名無しさん
09/01/08 19:09:13
>>678,679
情報工学と計算機科学はEngineeringとScienceと言うより
EngineeringとMathmaticsと言うべきではなかろうか。
MathmaticsをScienceには含まないとした場合だが。
計算機科学はScience即ち自然科学や社会科学と比較して研究対象と
研究行為の相対位置が異なると言える。

>>675-677
また、所謂"ソフトウェア工学"はソフトウェアではなくソフトウェア開発
という人の営みを研究対象にしている点で情報工学と異なると言える。
むしろ既存のソフトウェアおよびその開発過程を"観察"するという点で
ソフトウェア工学は上に挙げたScienceに近いとも言える。


690:osiire
09/01/09 11:33:59
ML(主にocamlだけど)で仕事したい人はうちの会社(www.itpl.co.jp)に来てくださーい。
computer science分かってる人も歓迎ですよぉ。
お給料はご相談ですが。

691:デフォルトの名無しさん
09/01/09 11:46:44
>>687
飯島愛乙!

692:デフォルトの名無しさん
09/01/09 12:09:20
>>690
61才でもいいかい?

693:デフォルトの名無しさん
09/01/09 12:28:52
>>690
理学博士のニートですがいいですか

694:デフォルトの名無しさん
09/01/09 12:35:02
年寄りがITに疎いって?
「世界最速のインターネット回線を持っているのは75才のおばあちゃん」なんだぜwwwww111111”!!!W

695:デフォルトの名無しさん
09/01/09 12:43:13
年寄りってコンピュータもろくにさわれない人も多いし、そもそもコンピュータの存在にすら気づいていない人も多いよね。
パソコンってなに?みたいな

696:osiire
09/01/09 12:57:01
>>692
年齢による差別はしませんので、大丈夫です。
>>693
理学博士と言う時点でかなりポイント高いと思います。

697:デフォルトの名無しさん
09/01/09 13:50:11
>>690
給料悪いし待遇悪いじゃん
さらにページにヒラギノフォント指定ってのがウザ過ぎる
Winにヒラギノ入れてる人のブラウザでヒラギノ表示したら悲惨なことになるの分かっててやってるのか?

698:デフォルトの名無しさん
09/01/09 14:11:49
OCamlってのがな・・・オブジェクト指向で開発させられそう
ほのかに香るブラック臭

699:デフォルトの名無しさん
09/01/09 14:46:44
ニートって掘り出し物多いんじゃないかなって最近思うよ
オープンソースプロジェクトの大半はニートがいないと成り立たないらしいし、
技術力は下手な職業プログラマ以上だったりするんだよな。
おまけに他の企業色に染まっていない。
もしその気にさせることができれば質の高い人材が発掘できそうだね。

700:デフォルトの名無しさん
09/01/09 19:24:56
FX とかこええええええええええええええええええええええ

701:osiire
09/01/09 21:38:20
>>697
まぁ、給料・待遇についてはご相談という事で。ヒラギノは改善してみます。
>>698
OCamlを使いながらオブジェクト指向を強制する事は無いですよ。
>>700
FXとはいえ相手が大手ばかりなので普通です。ご安心を。

702:デフォルトの名無しさん
09/01/09 22:58:03
>>700
質問です
FXはどうして怖いんですか?

703:デフォルトの名無しさん
09/01/10 09:41:42
ちなみにOCamlマスターだとしてどのぐらい払うつもり?

704:デフォルトの名無しさん
09/01/10 10:37:47
>>690
なぜ、MLなの? ここではそれが訊きたい。

705:デフォルトの名無しさん
09/01/10 11:13:24
ページに書いてあるじゃん

706:デフォルトの名無しさん
09/01/10 11:17:00
いままで、おっかむるって呼んでたw

707:デフォルトの名無しさん
09/01/10 11:18:38
なるほど。Webページは読まなかったw
読んでみたけど、答えは得られなかったW

708:osiire
09/01/10 11:28:38
>>703
具体的な金額までは答えられませんが、OCamlマスターなら即戦力として迎えたいと思います。
>>704
ビジネス的には色々と理由があるのですが、どれも後付けです。
要するに、型安全や代数的データ型やパターンマッチや高階関数といった特徴ゆえに、開発効率がよくて不具合が少なくなるからです。
特にOCamlはライブラリが揃っていて楽です。それ以上でもそれ以下でもないです。

709:デフォルトの名無しさん
09/01/10 11:44:02
海外の求人にはOCamlは結構あるらしいけれど、国内にもあるというのは
朗報だ。

710:デフォルトの名無しさん
09/01/10 11:51:33
>>708
F#じゃあかん?

711:デフォルトの名無しさん
09/01/10 14:55:57
>>708
所謂ベンチャーですか?

712:osiire
09/01/10 16:15:46
>>710
F#で具体的な案件をこなした事はまだありません。だた、今後VisualStudioに標準搭載されてくれば、案件によってはF#を選択するかもしれません。
>>711
うちも小さい会社なのでよくベンチャーと言われるのですが、実質的にはベンチャーではなくスモールビジネスです。

713:デフォルトの名無しさん
09/01/10 19:11:57
>>690
OCAMLコミュニティで知名度のある社員はいますか?

714:デフォルトの名無しさん
09/01/10 19:15:05
>>713
それ重要だな

715:osiire
09/01/11 01:13:37
>>713 知名度は計りかねますが、「入門OCaml」という本を執筆した著者が在籍しています。また、OCaml.JPというサイトの運営に係わっていたり、ocaml-nagoyaという勉強会を開いたりしています。 ,URLリンク(ocaml.jp) ,URLリンク(www.itpl.co.jp)

716:デフォルトの名無しさん
09/01/11 10:27:39
>>715
その本良くなかったわ。
プログラミング in OCamlは良かった。

717:デフォルトの名無しさん
09/01/11 12:25:30
>>715
店頭で見たけど、五十嵐淳さんの授業ページと本家ドキュメントだけで十分だと思ったから買わなかった。
言語解説書なんて今日日はやらないと思うなぁ。

718:デフォルトの名無しさん
09/01/11 12:30:28
Haskellの時だって言語解説書ほしがってわめいていたのって少数派だったんじゃねーの?
Haskell覚えようとするような奴が英語読めないとも思えないし、英語読めるなら本家ドキュメントぐらい読めるだろうし。
読んで理解できないような難しい文書でもないしな。

719:デフォルトの名無しさん
09/01/11 13:08:34
まとまったいい本あれば英語だろうが日本語だろうが買いますが

720:デフォルトの名無しさん
09/01/11 14:41:19
>>718
英語読めないけどHaskell覚えようとするような奴ですが何か?w

721:osiire
09/01/11 15:04:05
私の力不足にしてお役に立てなかったのは申し訳なく思います。
ただ、とにかく私はMLのようなすばらしい言語をもっと開発現場に普及させていきたいのです。
書籍の発行はそのための具体的な行動の一つです。


722:デフォルトの名無しさん
09/01/11 16:07:03
>>720
Haskell本出せっていう要求は5~6年ぐらい前の話。

723:デフォルトの名無しさん
09/01/11 17:15:33
>>722
言語解説書も出版されないような言語は消え去る他ないだろう。
そういう意味でOCamlはクリアできてるんだから結構ではないか。

724:デフォルトの名無しさん
09/01/11 17:19:10
>>723
OCamlにも不満はあるんだけどねぇ。
かといって言語を作る気はない。作った時点で満足して宣伝する気まで起こりそうにないから。

725:デフォルトの名無しさん
09/01/11 17:29:46
LISP本は百冊以上。Prolog本も五十冊以上。
OCamlもHaskellも一般人にとっては決定的に情報不足。

726:デフォルトの名無しさん
09/01/11 17:33:44
英語も分からないような人はプログラミングなんかしなくていいよ

727:デフォルトの名無しさん
09/01/11 17:37:26
なんか変な人がいるなwwww欲求不満なのかww?

728:デフォルトの名無しさん
09/01/11 17:43:44
OCamlはなー、もう少しメタプログラミング能力があればいいんだが・・・

729:デフォルトの名無しさん
09/01/11 17:47:35
よくしらんけどocamlp4とかでやるんじゃないの

730:デフォルトの名無しさん
09/01/11 17:48:50
ocamlp4じゃねえや
camlp4だった

731:デフォルトの名無しさん
09/01/11 18:36:02
なんでここ急に盛り上がってんの

732:デフォルトの名無しさん
09/01/11 18:50:19
>>726
ゴメンなさいね
英語わからんけど飯の種なんでやめられないですw

733:デフォルトの名無しさん
09/01/11 19:31:10
>>732
お前みたいな質の低いプログラマがいるからこの業界なめられるんだよ。
分かったら土堀りでもやってろ。

734:デフォルトの名無しさん
09/01/11 19:34:51
>>733
「五十嵐淳さんの授業ページと本家ドキュメントだけで十分」なんていう人が
いるから関数型がなめられるんでしょ。

735:デフォルトの名無しさん
09/01/11 19:37:18
>>708
素朴な疑問だけど、Lisp系のマクロのような機能が無いOcamlじゃ
作成時間と共に開発効率が上がるようには思えないけど・・・
ある程度の腕があればライブラリーなんて持ってると思うし、
Gaucheとかと競合したら負けそうな希ガス…

736:733
09/01/11 19:51:19
>>734
俺じゃねーしw
てか、入門Ocamlだっけ?あの程度の言語解説書ならいらねーよ。
俺が関数型言語を使うようになったのはMLを大学の授業で知ったのがきっかけだが、
別に参考書なんて一冊も買ってないぞ。立ち読みはするが。
初心者向きの言語解説書にはもはや価値がない。
ネット情報だけで十分なんだよね。

>>735
マクロがそんなに重要な機能には思えない。
大して作業効率にも反映されない。
Lisp系なら価値があるかもしれないが、ML系にはさほど意味はないだろうな。

737:デフォルトの名無しさん
09/01/11 19:59:24
>>736
そうか、別人か。そんな気もした。それはともかく、
君はそれで学べたかも知れないが、それでは普及は
しないということ。

738:デフォルトの名無しさん
09/01/11 20:00:18
>大して作業効率にも反映されない。

オマエがマクロを知らないのは分かったから黙ってろw

739:733
09/01/11 20:07:21
>>737
ゴミ本いくら増やしても普及はしないと思うね。
優れた海外の本の翻訳なら価値があると思うがね。
だからプログラマには英語が必須なわけだけど。

740:733
09/01/11 20:10:31
>>738
ここで書いても仕方ないが、俺はとあるSchemeライブラリ作者だ。
Lisp系にある程度精通している。

MLでマクロを実装してもあまり価値はないよ。

741:デフォルトの名無しさん
09/01/11 20:10:52
MLに普及の目なんて無いだろ
つーか、普及してほしいの?
MLが普及するぐらいならとっくにLispが世界を制覇してるよ

742:デフォルトの名無しさん
09/01/11 20:14:19
あえて関数型言語を比較するなら
Haskell > SML > Scheme > Common Lisp

743:デフォルトの名無しさん
09/01/11 20:15:31
>>740
底の浅い知ったかだねw
マクロで開発効率を上げるといえばライブラリなんか関係ないんだよ。

744:デフォルトの名無しさん
09/01/11 20:21:24
マクロ使うとコードが煩雑になるじゃん
Haskellのポイントフリースタイルならそもそもマクロは必要ないと思えると思うんだがね

745:デフォルトの名無しさん
09/01/11 20:22:10
>>741
Haskellなんかが評価されてるのって
参照透明だからマルチコア当り前の時代のプログラミングに向いてるっていうか、
Lispとは勝負所が違う気がする

746:デフォルトの名無しさん
09/01/11 20:27:24
>>745
勝負どころの振り分けはどのように?

747:デフォルトの名無しさん
09/01/11 20:27:45
>>745
え?俺にレス?
そういう方向でも、やはりMLに目は無いよね
素直にErlang使っとけって話になるじゃん

748:デフォルトの名無しさん
09/01/11 20:32:01
Erlangはサーバ専用だと思ったほうがいい。
Erlangでプログラミングしてて分かったわ。

749:デフォルトの名無しさん
09/01/11 20:32:58
>マクロ使うとコードが煩雑になるじゃん

タコ!マクロ生成マクロに煩雑もクソもあるかw

750:デフォルトの名無しさん
09/01/11 20:41:24
クライアントはWindowsとC++のゲットーだったりするので
鯖で強いErlangは勝ち組

751:デフォルトの名無しさん
09/01/11 20:41:33
>>733

752:デフォルトの名無しさん
09/01/11 20:44:24
マクロ生成マクロは黒魔術じゃねw
使うけど。

それはさておき、まぁLispのマクロそのものということじゃなくて、
それ相当のものがあるかってことでしょ。

たとえばRubyは、eval とかその他動的な機能でALGOL系の
言語での 「マクロ相当」 を導入しようという試みだと思うけど
(それがどれくらい成功といえるかは意見が分かれるとして)

Ocamlとかはそれ相当の機能や試みとしてはなにがあるの?
camlp4を知らないで書いてるけど。

753:デフォルトの名無しさん
09/01/11 20:45:57
camlp4でHaskel風のList comprehensionとかは出来る
っつーか、デフォでそういうオモチャがついてる

754:デフォルトの名無しさん
09/01/11 20:48:28
>>753
オモチャっていうのは、実用に堪えないっていうニュアンス?

755:デフォルトの名無しさん
09/01/11 20:49:29
>>754
いや、オマケ&デモって意味
本気で使わせたいんなら、最初からそれを言語仕様にするか
トップレベルに組み込むんじゃね?

まあ、単に俺がそう思っただけで、詳しいことは白根

756:デフォルトの名無しさん
09/01/11 20:59:17
>>742
Scheme > Common Lisp > Haskell > SML/OCaml

757:デフォルトの名無しさん
09/01/11 21:37:10
おまえらのいう「開発効率」って所詮個人の趣味プログラムでの話だろ?
>>690のように仕事で使う上での「開発効率」を考えたことある?

758:デフォルトの名無しさん
09/01/11 21:47:05
>>757
ゲームやGUIアプリの類に関数型は正気とは思えんし
ドカタ仕事の類にも向いてねえだろ
ド汚くてもいいから仕事を簡単にやっつけられるってのが「開発効率」じゃねえの?


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch