関数型言語ML(SML, OCaml, etc.), Part 5at TECH
関数型言語ML(SML, OCaml, etc.), Part 5 - 暇つぶし2ch386:デフォルトの名無しさん
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アプリの類に関数型は正気とは思えんし
ドカタ仕事の類にも向いてねえだろ
ド汚くてもいいから仕事を簡単にやっつけられるってのが「開発効率」じゃねえの?

759:デフォルトの名無しさん
09/01/11 22:02:41
LispのマクロはS式があって始めて便利なもの。
だから他の言語にはない。

760:デフォルトの名無しさん
09/01/11 22:12:55
つ Dylan

761:デフォルトの名無しさん
09/01/12 00:41:18
>>757-758
 >>735

>>760
Dylanはscheme/Lispとの差別化が出来なかったんだよね。むしろ劣化版。
最終的にObj-Cでいいやってことになって中止になったし。

762:デフォルトの名無しさん
09/01/12 00:41:42
>>733
むしろ、あなたのような人が人間の質として低い気がしますが?

英語ができた方がいいとは思いますが、必須とは思いませんね。

763:デフォルトの名無しさん
09/01/12 00:48:25
>>758
ところがどっこい、Unreal Engineの開発者がHaskellに注目してたりするんだ。
確か国内のゲーム開発者が、関数型に注目してるという記事も以前見かけた。
正気じゃないと言うほどでもないと思うけど。

それと、汚い仕事をやっつけ、って、割と関数型のフィールドじゃない?
関数こねくり回すのが本領の訳だしさ。

764:デフォルトの名無しさん
09/01/12 00:52:03
MONADIUSみてHaskellに対する印象が変わったな

765:デフォルトの名無しさん
09/01/12 01:16:12
>>762
英語必須ですよ。
英語ドキュメント避けて日本語ドキュメント探しているうちに日が暮れるような非効率な奴は3流

766:デフォルトの名無しさん
09/01/12 07:49:20
安定した仕様の言語だと、プログラマがドキュメントを探す
ことは稀だと思いますよ。通信規格のようなものは参照しま
すが。

767:デフォルトの名無しさん
09/01/12 08:49:25
洋書も持ってるけど、どうしても意味が汲み取れない
ところとかあると挫折しそうになる。

768:デフォルトの名無しさん
09/01/12 08:54:54
英語読めない奴の為に翻訳までしないと一流とは言えないな

769:デフォルトの名無しさん
09/01/12 08:59:00
300ページくらいで文章とコードが半々くらいだと何とかいけるんだが、
700ページとか厳しい。

770:デフォルトの名無しさん
09/01/12 08:59:14
じゃぁ二流でいいです。

771:デフォルトの名無しさん
09/01/12 09:41:39
>>761
>>>757-758
> >>735

お前は何が言いたいのだ?

772:デフォルトの名無しさん
09/01/12 12:09:39
>>766
documentって英単語は書き物全般を指すと思うんだが?w
最新の論文はもちろんのこと、RFCの一部なども日本語に訳されていないこともあるから、
やっぱり英語ができなきゃ支障がでるね。
特にアルゴリズムの論文は読むことも多いんじゃないかな。

773:デフォルトの名無しさん
09/01/12 12:18:14
>>772
私もあなたも同じだと思うけど、このム板に書き込んでいるような
奇人プログラマでないかぎり英文のドキュメントなんて読まないと
いうことです。研究者は別ですよ。

774:772
09/01/12 12:22:02
俺は職業プログラマではない。
どっちかっつーと天文台に住んでる実験系の物理屋だ。
プログラミングもするからプログラマで通してる。

775:デフォルトの名無しさん
09/01/12 12:29:37
つまんね

776:デフォルトの名無しさん
09/01/12 12:29:41
少し前に英文ドキュメントも読まないようなプログラマは3流だ、
という主旨の書き込みがありました。しかし、英文情報を渉猟して
いる方が珍しいのであって、当然そんなことをしていない人の中に
一流の人はいっぱいいると確信できるので、ちょっと反撥してみま
した。

777:デフォルトの名無しさん
09/01/12 12:32:13
>>776
一流なら当然名前は売れてるんだろ?
例を挙げてくれよ。

778:デフォルトの名無しさん
09/01/12 12:33:29
>>776
英文を読めない人間は、プログラマとしては情報弱者であることが
確定したようなものだ
そんな「一流のプログラマ」などあり得ないと俺なら確信できるが

英論文を読めない研究者などあり得ないのと同じだと考えてよい

779:デフォルトの名無しさん
09/01/12 13:02:04
>>776
日本発の情報がウンコなので英文を読むほかないのです。

780:デフォルトの名無しさん
09/01/12 13:04:30
並川さんもよくTVに向かって英語できません、なんて言えるよな。
昔と今じゃ状況が違うんだよ、馬鹿
ノーベル賞剥奪しちまえよ

781:デフォルトの名無しさん
09/01/12 13:25:37
一流のプログラマになれるような頭の良さを持ちつつ英語わからないやつっていないんじゃない?

782:デフォルトの名無しさん
09/01/12 13:27:31
言語マニアのファインマン先生は日本語を覚えようとして挫折した過去がある

783:デフォルトの名無しさん
09/01/12 13:27:53
実際に読めるかどうかは別として、少なくとも
「英語が読めなくても大丈夫」と主張するやつは駄目だな。

784:デフォルトの名無しさん
09/01/12 13:30:28
>>781
中学以来英語教育を受けてる筈なんだしね
まあネイティブ同然に読めなくてもそれは仕方が無いが
誰もそこまでは言ってない

785:デフォルトの名無しさん
09/01/12 13:33:47
>>782
何がだめだったんだろ。
言語体系の違いか?

786:デフォルトの名無しさん
09/01/12 13:36:45
>>785
日本語をファインマンに教えていたのが朝永の研究室の連中だったんだよね。
日本語の教え方がへたくそだったんじゃないかな。
それで、ファインマンもうんざりして日本語習得あきらめたんじゃないかと思うね。

787:デフォルトの名無しさん
09/01/12 13:41:14
そろそろ関数型言語の話をしようぜ

788:デフォルトの名無しさん
09/01/12 13:51:09
>>786
この馬鹿が。
日本語は世界でも最も難しい言語の一つなんだよ。
英語みたいに単純明解ではないのだよ。

789:デフォルトの名無しさん
09/01/12 14:00:26
英語:主語+述語を主体とした前置型(Lispチック)
日本語:述語を中心とした後置型(Forthチック)
だとオモ。と無理矢理スレに繋げてみる。

790:デフォルトの名無しさん
09/01/12 14:04:48
>>780
並川じゃなくて益川
漢字も読めないようじゃ現場では使えないな

791:デフォルトの名無しさん
09/01/12 14:57:09
>>788
俗説

792:デフォルトの名無しさん
09/01/12 14:59:53
しかし日本語を体系化できた人間は未だにいない。

793:デフォルトの名無しさん
09/01/12 15:03:06
朝永の弟子がファインマンに日本語を教えたときも、そういうもんなんだよ、という説明しかできなかった。
日本語が英語に比べて体系化しにくい複雑な言語だということなんだよね。
英語が世界中で愛用されて、日本語が日本国内でしか使われない理由が良く分かるよ。
やっぱ言語はシンプルじゃないと駄目ってことだ。

Scheme最強!!

794:720
09/01/12 15:24:53
>>718 Haskell覚えようとするような奴が英語読めないとも思えないし
>>720 英語読めないけどHaskell覚えようとするような奴ですが何か?w
>>726 英語も分からないような人はプログラミングなんかしなくていいよ
>>732 英語わからんけど飯の種なんでやめられないですw
>>733 お前みたいな質の低いプログラマがいるからこの業界なめられるんだよ。
>>762 英語ができた方がいいとは思いますが、必須とは思いませんね
>>765 日本語ドキュメント探しているうちに日が暮れるような非効率な奴は3流

つまり、
1.英語読めない奴は3流である
2.3流の奴はプログラミングしなくていい
3.プログラミングを仕事にしてるなら転職しろ

って、こってすね?
1.はともかくとして2.と3.には同意しかねますね。

>>787
スレチ失礼しました。
私はこのレスで終了とします。


795:デフォルトの名無しさん
09/01/12 15:31:37
低品質ソフト垂れ流しやがって ゆるせん

796:デフォルトの名無しさん
09/01/12 15:59:16
まあ英語読めんでも仕事になってるんならそれでいいんじゃないの?

manだのinfoだのMSDNだのコンパイラの吐くメッセージだのを
「英文なので自分には読めません」で仕事になるのか分からないが
それで済んでいるのならある意味幸運なことだ
俺には関係ないしな

797:デフォルトの名無しさん
09/01/12 16:23:47
>>792
どんな自然言語もそう。
完全に体系付けできる言語は人工言語だけ。

798:デフォルトの名無しさん
09/01/12 16:55:04
Javascriptなんて、方言やバージョン違いだらけで、
「Javascript大系」出すのは不可能。


799:デフォルトの名無しさん
09/01/12 17:24:34
"体系化しにくい"とは"規則化しにくい"と考えればよいのか。
つまり例外が多すぎる、と。

800:デフォルトの名無しさん
09/01/12 19:14:29
で、英語を読めないやつは三流だっていうことを必死で主張してた人は結局何がしたかったの?

801:デフォルトの名無しさん
09/01/12 19:17:42
スレチの話題はそろそろ終了してくれ。続けるならマ板にでも逝け。

802:デフォルトの名無しさん
09/01/12 23:56:12
Ocamlも色々盛り込みすぎて,体系化されてるとは見えにくくなっている.

803:デフォルトの名無しさん
09/01/13 00:01:31
Camlp4で頑張ればUnicodeリテラルとか
[1..10]みたいな記法を使えるようになるんでしょうか

804:デフォルトの名無しさん
09/01/13 00:46:07
てか、オブジェクティブな要素はいらないだろ。
流行に流されてるなぁ

805:デフォルトの名無しさん
09/01/13 00:53:19
>>804
lablgtkとかはいいんだけど、自分で使う分にはいらないよね、オブジェクト指向要素。
でもそこを否定すると"O"Camlじゃなくなるww

806:デフォルトの名無しさん
09/01/13 01:10:01
前から疑問だったんだけど、オブジェクティブじゃない素のcamlってのは
発展してるの?というか、継続的に開発されているの?

807:デフォルトの名無しさん
09/01/13 02:29:32
バリバリのOCaml使いって、関数型だとかそういうの拘らないで、
副作用使いまくり、オブジェクト指向使いまくりで
関数型の要素もある手続き型言語ですみたいな感じで書いてたりするんだろうなあ。。。

808:デフォルトの名無しさん
09/01/13 03:58:12
>>807
なんか偏見?そりゃHaskellよりはゆるいかもしれないけど。
バリバリのOCaml使いが作ったと思われるJane Street Capitalのcoreライブラリとか読んでもそんな感じはしないよ。


809:デフォルトの名無しさん
09/01/13 04:00:47
>>807
バリバリのC使いがにわかOCaml使いになってプログラムしたんだろ。

810:デフォルトの名無しさん
09/01/13 07:01:13
>>808
mldonkeyとか読んだ。でもあんま沢山のアプリを読んでないのですまん。

811:デフォルトの名無しさん
09/01/13 09:07:42
OCamlはフランスで作られているのだからフランス語をやるべきだ。
wikipediaひとつみてもフランス語が断然情報量が多いね。
フランス語
URLリンク(fr.wikipedia.org)
日本語
URLリンク(ja.wikipedia.org)
英語
URLリンク(en.wikipedia.org)


812:デフォルトの名無しさん
09/01/13 09:39:21
オブジェクトはOcamlの鬼子
URLリンク(d.hatena.ne.jp)
URLリンク(d.hatena.ne.jp)

813:デフォルトの名無しさん
09/01/13 10:25:50
lispわかってる人がOCamlマスターするのにかかる時間ってどのぐらい?
3日じゃ無理?

814:デフォルトの名無しさん
09/01/13 12:24:20
>>813
3時間ぐらい

815:デフォルトの名無しさん
09/01/13 18:09:27
↑↑馬鹿だろ

816:デフォルトの名無しさん
09/01/13 18:17:27
>>813
lispマスターがOCamlわかるのには大体3週間ぐらい。(これはマジレス)
lispわかってる人がOCamlマスターできないと悟るのが3分くらい。


817:デフォルトの名無しさん
09/01/17 20:38:13
初Ocaml

階乗計算を2通りやってみた。
URLリンク(codepad.org)

どっちの書き方の方が多い?

818:デフォルトの名無しさん
09/01/17 21:00:36
let rec fac=function
| 0 -> 1
| x -> x*fac(x-1);;
はどうよ?

819:デフォルトの名無しさん
09/01/17 21:13:25
>>818
同意。

820:デフォルトの名無しさん
09/01/17 21:16:50
>>817, >>818
3通り
URLリンク(codepad.org)

821:デフォルトの名無しさん
09/01/17 21:54:19
型の例
URLリンク(codepad.org)

822:デフォルトの名無しさん
09/01/17 22:01:22
凄く細かいことだけど、自分は OCaml なら fact (n + 1) と必ず空白を入れるかな。
C や Java だと、その括弧は関数の引数を括るための特別な記号だけど、
OCaml だとそういう意味はなく、単に演算の優先順位を示す普通の括弧だから
2 * (3 + 4) の括弧に空白を入れるのと同じ理由で fact の後の括弧にも空白を入れる。


823:デフォルトの名無しさん
09/01/17 23:08:59
>>822の言うように修正したコード
URLリンク(codepad.org)

824:デフォルトの名無しさん
09/01/17 23:20:24
let fact n = fold_left ( * ) 1 [2..n]
とか書けたらいいのにと思いますた
遅延計算で

825:デフォルトの名無しさん
09/01/17 23:23:22
>>823を相互再帰にする。3つの関数のどこから計算しても同じ。
URLリンク(codepad.org)

826:デフォルトの名無しさん
09/01/17 23:51:52
Yコンビネータを2種類追加して全部で5通りになった。
URLリンク(codepad.org)

827:デフォルトの名無しさん
09/01/17 23:53:36
>>825
相互再帰を入れれば全部で6通り。


828:デフォルトの名無しさん
09/01/18 00:24:56
>>824
Haskellならできるね
fact n = foldl1 ( * ) [1..n]

829:デフォルトの名無しさん
09/01/18 00:35:06
PythonもHaskellよりはダサいですが一応出来ます
from operator import mul
fact = lambda n: reduce(mul, xrange(1, n+1))

830:デフォルトの名無しさん
09/01/18 15:24:18
末尾再帰バージョン
URLリンク(codepad.org)

831:デフォルトの名無しさん
09/01/18 20:08:54
マージソートを作ってみた。リストの表示に良い方法ってあるの?
URLリンク(codepad.org)

832:デフォルトの名無しさん
09/01/18 20:16:02
>>826
それ>>164まんまw

833:デフォルトの名無しさん
09/01/18 20:16:18
extlibのStd.printが汎用プリンタっぽいですね

834:デフォルトの名無しさん
09/01/18 20:32:39
>>833
ありがとう。どうやらcodepadでは
#use "topfind";;
#require "extLib";;
が使えないみたい。

835:デフォルトの名無しさん
09/01/22 19:43:52
簡単なオブジェクトの例
URLリンク(codepad.org)

(* helloオブジェクトのメソッドprintを呼び出す。 *)

hello#print ;;


836:デフォルトの名無しさん
09/01/22 19:58:40
>>835の例をもう少しちゃんと書くと
URLリンク(codepad.org)

let hello = new c_hello ;;

837:デフォルトの名無しさん
09/01/22 20:30:48
>>836のクラスを継承する。
URLリンク(codepad.org)

838:デフォルトの名無しさん
09/01/23 19:01:06
リストの操作の練習など
URLリンク(codepad.org)

839:デフォルトの名無しさん
09/01/24 05:42:37
和集合は
else

840:デフォルトの名無しさん
09/01/24 05:44:24
間違えて途中書き込みしてしまった

和集合は
else h :: union t b
よりも
else union t (h::b)
のがいいんじゃね?

841:デフォルトの名無しさん
09/01/24 16:43:36
>>840
いいわけないだろ。
hが加わった分だけ再帰に余計な計算が加わって遅くなる。
ばか?

842:デフォルトの名無しさん
09/01/24 16:48:47
計算量多くなるけど、入力に同じのが入ってたときを考えたんだが。
入力が正しくないときなんて考えるだけ無駄か。

843:デフォルトの名無しさん
09/01/24 17:20:19
俺も>>840と同じように思いました
>>840方式なら、計算ステップ数は同じで、末尾再帰になりませんか?

>>838のコードは末尾再帰になっていない分効率が悪いですよね

844:843
09/01/24 17:21:39
ああそうか
再帰のステップ数は変わらないけど、memberpの計算量が増えていくのですね
理解しました


845:デフォルトの名無しさん
09/01/24 21:43:51
>末尾再帰になっていない分効率が悪いですよね
URLリンク(codepad.org)
URLリンク(codepad.org)

よくそんな嘘を平気で言えたもんだw


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