[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/10 00:21 / Filesize : 224 KB / Number-of Response : 956
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

関数型言語ML(SML, OCaml, etc.), Part 5



1 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 14:49:54 ]
関数型言語MLについて語るスレッドです。

MLは、確固とした理論的背景を持つ言語でありながら、
現実的なソフトの開発にも使用できる実用性を備えた言語です。
また、プログラミングの初心者が最初に学習する言語としても優れています。

総本山
Standard ML www.smlnj.org/
Objective Caml caml.inria.fr/ocaml/

前スレ
関数型言語ML(SML, OCaml, etc.), Part 4
pc11.2ch.net/test/read.cgi/tech/1133003340/

75 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 14:39:12 ]
ハードウェアに特化しすぎた奴は全部死滅しただろ。
トランスピュータ+オッカムとか、コネクションマシン2+C*/*Lispあたり。

求められているのはハードウェアにベッタリしすぎない抽象化されたモデル。

76 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 14:59:15 ]
>>75
抽象化自体は良いよ。ただ、ハードの資源を使い切れない様な抽象化では
意味が薄い。ハードの制約を無視した抽象化は単なる机上の空論だよね。

何年も前からトランジスタ数の増大に比較して CPU の性能が伸びない事、
CPU の速度向上に Memory が付いて来れない事が問題になっている。
現状としては業界を上げてマルチコア、メニーコア、ハードウェアマルチ
スレッディングに移行している。途中で VLIW みたいな寄り道もしたけど、
現在製造されているプロセッサの多くが既にマルチコアに意向済み。

そんな中で、いかにスレッドを簡単に扱えるか、スケーリングする GC を
実装出来るかは言語の設計と処理系の実装には結構重要なポイントで、
テーマとしては新規性はあまり無いかもしれないけど、逆に言えば本来
あって当たり前の機能なんだよね。自動並列化とか CAS とかも。

まあ最低限、ネイティブスレッドくらいは扱える様な処理系があると良いね。

77 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 15:05:21 ]
ネイティブ・スレッドって結論が馬鹿すぎる。

それから関数型言語と並列化の文献は山のようになるので、
英語でもちゃんと読んでやってください。

78 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 15:08:03 ]
>>77
それを馬鹿だという奴は現実が見えてないだけだよ。
並列化の研究が沢山あるのは知ってるよ。じゃあどれだけの
実装が残ったのかという話。

79 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 15:10:04 ]
今後のハード技術は
スレッドが使いづらい方向に行くと思うぞ


80 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 15:10:48 ]
有益でないから残らない。
関数型言語はErlangなど残っている方。

81 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 15:14:30 ]
>>79
どちらかというとスレッドが無いとやってられない方向へ向かってる

82 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 15:18:45 ]
有益でない言語は残らない。

83 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 15:24:09 ]
つまりMSにとって有益な言語が残るってことだな



84 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 15:33:41 ]
Haskell は STM とか頑張っているんだがのう
SML はダメッポス

85 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 16:14:00 ]
STM?

86 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 16:18:31 ]
>>84
haskell.g.hatena.ne.jp/jmk/20061219/1166519293

元の処理系に並列化の基盤が無いと、
こういう実験にも使えないのよね

87 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 16:46:40 ]
間違えた。>>86>>85 向け。

88 名前:85 mailto:sage [2007/11/23(金) 16:59:39 ]
さんきゅう

89 名前:79 mailto:sage [2007/11/23(金) 18:29:22 ]
スレッドが使いづらい方向に行くっていう意見は、たぶん俺がハード屋で
性能/消費電力/発熱に苦しんでるからかも。

SMPコアには既に限界を感じてる。

ASMPコアで無駄な回路を減らせば、まだまだ上を狙える。
遅延評価・非同期実行(イベント同期)をナチュラルに行なえる言語だと
ハード・ソフトの両面からグッと最適化が効く。

スレッドはSMPと相性がいいかもしれんが、
でもASMPにはマッチしないと思う。



90 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 18:32:00 ]
スレッド←→遅延評価・非同期実行(イベント同期)
って反対概念でもないよね?


91 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 18:39:20 ]
>>89
ASMP でも汎用コアが複数あったり、SMP と言っても特殊用途の
コプロ積んでたりするもんじゃないの?

どう転んでもスレッドの重要性は当分は覆らないと思うけどなあ。

92 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 22:38:05 ]
>>90
確かに。お互いに実現可能なものを持ってるしね。


スレッドはハード層にCPUとしての機能と性能を要求してくるけど、
本当にそんなに大げさな物が必要なのかなーって思ってる。

OS層にはマルチタスク要求があるからスレッドは有益だけどさ。

アプリ層でスレッドを使うときって、
 ・CPU複数使って速く処理する
 ・ブロッキング処理を非ブロッキング処理にする

こういうのを言語がサポートしてないからじゃない?
(ライブラリじゃなくて言語仕様ね)

それにスレッドっていうキーワードを使って作られたものって、
DSP,SIMD,コプロ等々の存在を無視する気がする。
┌─────────────┐
│ 関数               |
├───┐             |
| スレッド |             |
├───┴─┬───────┤
| CPU    |DSP,SIMD,コプロ|
└─────┴───────┘


言語にはネイティブスレッドを要求するより
こんなものの→(Scatter/Gather、Map/Reduce、遅延評価、イベント同期)
シームレスでポータビリティな仕様と、実装の最適化を要求して欲しい。


93 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 23:05:28 ]
>>92
結局 CPU 複数使って速く処理するにはスレッドが必要なんだぜ。
何でそんなにスレッドを嫌がるのかは知らんけど、現実には
コプロや SIMD があってもスレッドは必須だよ。



94 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 23:27:35 ]
話がかみ合ってないな

95 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 23:38:17 ]
はぐらかしてるだけに見えるけど

96 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 00:04:53 ]
>CPU 複数使って速く処理するにはスレッドが必要
違う。
手続き言語andスレッド によって速い処理を行おうとするから
複数のCPUを要求されている。

でもスレッドじゃ
  DSP,SIMD,コプロ
この辺をうまく使っていけない。

極論だけど、関数言語がソフトウェアの主流なら
クロックを使わない論理回路で作ったチップにも需要が出るから
そういうのも作るもん。


97 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 00:15:20 ]
>>96
違うっていうけどさ、元々違う話をしてるんだから当たり前だよ。
俺は現実世界にある CPU をどう有効に使えるかにしか興味無いよ。
そしてその為にはスレッドを使うのが一番の近道。

それにスレッドと SIMD やコプロは排他的な存在じゃないから。

98 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 00:35:01 ]
>>96
>手続き言語andスレッドによって速い処理を行おうとするから
>複数のCPUを要求されている。

これは違うよな。プログラマはスレッドなんて別に使いたくない。
シングルコアで高性能の CPU が作れないっていうから、仕方なく
ソフトウェアを並列化してるだけ。DSP も一緒。

99 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 00:47:23 ]
各CPUにコードをロードさせておいてから、
データばらまいて、関数に突っ込んで、出力を集計すればいいじゃん。

ってこれはMap/Reduceだよな。


100 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 01:04:45 ]
何だよ、素人か。

101 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 23:28:42 ]
言語はマルチスレッドをサポートすべき?

├CPUシングルスレッド性能は打ち止めだからこれからはマルチスレッドスレッドだよ
│├マルチスレッドをどうにかするのは言語の仕事だよ
││├とりあえずスレッドとロックサポートすればいいよね (古典派)
││├ロックしないよ (モダン派)
││├プロセスは言語の基本だよ (並列言語派)
│││└おっぱい おっぱい (ぱい計算ってうまいの?)
││└マルチスレッドは実装屋の仕事だよ
││
│├マルチスレッドをどうにかするのはOSの仕事だよ
││├1つのプロセス中では並列度上がらないよ
││└小さいプロセスいっぱい作るよ (forkできればそれでいい派)
││
│├CPUごとに仮想マシン割り当てるから問題無いよ
││
│└コプロの命令もメインプロセッサの命令に見せかけるからやっぱスレッドだよ (Intel)

├マルチスレッドよりも大切なものがあるよ
│├SMPは限界。処理ごとに回路作るよ
│├高性能処理はベクタマシンだろ。常考 (ベクタ派)
││└GPUを計算に利用しようぜ (新ベクタ派)
│├他マシンとの通信こそ重要だよ (クラスタ派)
│└機械語レベルでなんとかなるよ (スーパースカラ派・コードモーフィング派)

└並列こそ計算の本質だよ。データフローマシン最高 (逐次処理は諸悪の根源だよ派)


102 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 00:13:28 ]
っあらゆるテクニックを使って速く動くように裏で最適化してよ(何も考えたくない派)


103 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 14:48:34 ]
クラスタ以外は、下へ行けば行くほど現実解から遠ざかっているなw



104 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 20:21:12 ]
ていうかアプリによってどれがいい違ってくるよね

105 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 20:24:02 ]
アプリレベルじゃない話も混ざっているみたいだけど
例えば fork を使うと良いアプリってどんなの?

106 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 20:28:36 ]
ネットワークサービス系はforkがいいと思う。
セキュリティを考えると、
同じプロセスで走らせたくない処理が多い。


107 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 20:45:54 ]
ネットワークサービス系って一般的にはスレッドプールを作るイメージだけど、
具体的にはどんなアプリを想定してるの?

108 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 11:28:12 ]
>>84
manticoreがあるでしょ > SML

>>101
> 言語はマルチスレッドをサポートすべき?

関数型言語の場合は、semanticsをどうするかが一番の論点で、
(関数型言語でなくていいことは、他の言語でやればいいし、実際行なわれている)
言語に並列処理能力を持たせるべきかどうかってのは、設問としておかしい。
持たせるとしたらどういう風なものがいいか、研究が行なわれ続けている。





109 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 12:02:18 ]
>>108
>関数型言語の場合は、semanticsをどうするかが一番の論点
そーそー、それそれ。
関数型言語にはそういう力があるんだから。

>>92の一番最後に書いたここの部分ね。
>シームレスでポータビリティな仕様

CがUNIXの力になって
LLがWebアプリの力になったように
関数型言語が並列処理分野の力になると思うんだけど。

今のスレの流れって
なんだかWebアプリの話をしてるときに
C実装レイヤーのことを話してるみたいな気がする。


110 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 12:04:09 ]
>>108
>関数型言語でなくていいことは、他の言語でやればいい
それはおかしいだろ。
例えばすごく関数型向きなアプリケーションを作ろうとしていて、
たまたま一ヶ所並列計算が必要だと分かったら、それだけで
関数型言語が選択肢から外れるってのは問題だと思わないか?
同じ論法で、汎用言語なら、良く使われる機構は一通りカバーしておくべき。

111 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 15:39:16 ]
あなたが知らないだけです。


112 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 20:41:03 ]
>>111
そういうのは例え 2ch でもどうかと思うよ。

manticore ってこれか。まだ実装は公開されてないのね。

manticore.cs.uchicago.edu/

113 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 22:17:20 ]
>>86
それ、最初の方でoperaionalにSTMの意味を説明しているけど、
それはSTMの実装の一つを紹介している(ことになっている)だけで、
STMは必ずしもそういう実装になる必要はないので読む時には気をつけて。
TMはdatabaseやdistributed computingでよく使われるモデル。

並列処理抽象化のために、実装がいくつも考えられて、
モナド親和性の高いモデルを採用している。



114 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 14:11:41 ]
CML(cml.cs.uchicago.edu/)とOCamlのThreadsライブラリの事もたまには思い出してあげてください。


115 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 20:54:51 ]
CML って所謂 Green Thread だと思ってた
ちゃんと "Concurrent" に動くの?

116 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 08:03:00 ]
スケジューラがユーザ空間に(も)ないと、
関数型言語っぽい面白いことができない。

CML→manticoreって人がいるね。

117 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 23:15:14 ]
せっかく新生した JoCaml のことも思い出してあげてください

118 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 23:20:30 ]
OCaml はもう良いじゃん...

119 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 23:29:28 ]
>>114
coThreadライブラリ(cothreads.sourceforge.net/)は無視ですか、そうですか。



120 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 01:25:15 ]
プログラミング in OCaml ~関数型プログラミングの基礎からGUI構築まで~

入門OCaml ~プログラミング基礎と実践理解~
どっちがいい?

121 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 11:09:15 ]
立ち読みして決めろ

122 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 00:27:53 ]
お前らの感想を言え

123 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 13:42:43 ]
>>122
昨日発売される本の即日レビューなんて 無茶いうな。

   入門OCaml
必要なことは大体書いてあるので、基礎的なことは十分できるようになった。
 短所としては、よくあることだけど、ちょっと複雑な機能を説明するときに
複雑な例で解説してる場所がある、とか。そのぶん実用例の確認にはいいんかな。
そういう部分は自分で簡単なもの作ってみて理解するしかない。
 まだ勉強中だけどスレッドやらパーサやらCGIやらの使用例とかあるし
本格的に使うつもりなら買っといていいんじゃないっかな。

あとこの本が無ければSML#とか知らなかった。



124 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 16:26:55 ]
SML#の本、欲しい


125 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 17:36:49 ]
>>116
>CML→manticoreって人がいるね。

manticoreってもう使えるの?

126 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 20:45:42 ]
>>120
どちらかといえば、前者。

127 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 00:09:43 ]
>>125
>>116は研究者/開発者

128 名前:デフォルトの名無しさん [2007/12/02(日) 01:04:45 ]
>>119
正直無駄にHaskell-STM風にモナド前提なのを何とかして欲しい。


129 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 08:05:45 ]
無駄に?

130 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 12:32:54 ]
Poly/ML が 5.1 でネイティブスレッドを使える様になっているね
polyml.5.1/libpolyml/processes.cpp 内で pthread 関連の関数を
呼び出しているみたい

Poly/ML を使っている人はこのスレには居ないかな...

131 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 21:46:29 ]
使ってるよ。
自作のコードはStandard ML系の処理系のほとんどでひととおり動作チェックする。

132 名前:130 mailto:sage [2007/12/02(日) 22:23:23 ]
今日久々に Poly/ML 見てみたんだけど、結構進化してるよね。
イメージベースの環境から、オブジェクトファイルを吐いて
実行ファイルを生成出来る様に変わっているし、スレッドは
カーネルスレッドをサポートしているし、FFI は C の構造体
を扱えるし、Intel Mac も Solaris もサポートしているし、
あと欲しいのは UNICODE のサポートくらい。

Standard ML 処理系では最強なんじゃないかな。

133 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 09:37:00 ]
誰かocaml-ssl ってのビルドできた人いますか(0.4.2)

ttp://sourceforge.net/project/showfiles.php?group_id=89802&package_id=106341



134 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 00:06:44 ]
SML のソースコードを沢山読んでみたいのですが、
Perl でいう CPAN みたいなのはありませんか?

135 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 08:34:33 ]
www.cs.princeton.edu/~appel/smlnj/projects.html

136 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 09:02:46 ]
ありがとうございます!

137 名前:デフォルトの名無しさん mailto:sage [2007/12/07(金) 12:11:14 ]
>>2
>yk.i.hosei.ac.jp/smlbook/smlbook.pdf

だいぶ今更かもしれないけど、これ無くなってしまっているね。
欲しい人は今のうちに Web Archive から頂いておいた方が良いかも。

138 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 02:59:37 ]
>133
Cygwin 上で特に patch なしでビルドできてるけど。何ぞ問題が?

139 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 16:52:38 ]
過疎っているので、Python スレにあったお題でコードを書いてみました。
"行頭の空白文字列を nbsp に変更するプログラム"

fun replaceWhite file =
  let fun repLn lst =
        case hd lst of
          #" " => [#"&", #"n", #"b", #"s", #"p", #";"] @ repLn(tl lst)
        | #"¥t" => [#"&", #"n", #"b", #"s", #"p", #";",
                     #"&", #"n", #"b", #"s", #"p", #";",
                     #"&", #"n", #"b", #"s", #"p", #";",
                     #"&", #"n", #"b", #"s", #"p", #";"] @ repLn(tl lst)
        | _ => lst
      fun replace out =
        case TextIO.inputLine out of
          NONE => ()
        | SOME ln => ((print o String.implode o repLn o String.explode) ln;
                      replace out)
  in (replace o TextIO.openIn) file
  end;

140 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 16:56:47 ]
もういっちょ。
"フィボナッチ数を 0 から 35 まで表示するプログラム"

fun fibloop () =
  let fun fib n = if n < 2 then n else fib(n-1) + fib(n-2)
      fun loop 36 = ()
        | loop cnt = (print(Int.toString(fib(cnt)) ^ "¥n");
                      loop (cnt + 1))
  in loop 0
  end;

141 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 21:30:26 ]
次スレを立てる時は >>2 の SML の所にこれを追加して欲しいな
SML を勉強していて一番参考になった

www.geocities.jp/m_hiroi/func/index.html
sml.sourceforge.net/Basis/

142 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 23:42:59 ]
>>137
旧研究室サーバにあった。
133.25.16.150/smlbook/smlbook.pdf

143 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 00:42:45 ]
>>139
...正規表現のライブラリって無いのですか?
いくら静的型付けとはいえ、スクリプト系の言語に比べてかなり冗長で、
いまいちSMLを勉強する気にならないのですが...。





144 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 03:21:09 ]
取り敢えず Moscow ML には正規表現ライブラリがバンドルされている
みたいだけど、他もあるんじゃないかな。正規表現を使わなくとも
Vector で書いたらコード量は大分少なくなると思う。

まあそんな事は誰でも簡単に調べられる事だし、勉強する気にならない
のであれば他の事をした方が良いと思うよ。自由ってそういう事でしょ。
面白いと思ってすぐに手を動かせる人間が自分で色々探求して行く一方で、
そうじゃない人がいても別に誰も強制したりなんかしない。

そもそも >>139 は SML を勉強し始めて一日目の人間が書いたコード
だから参考にしない方が良いでしょう…

145 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 09:43:10 ]
>>144
3行でおk

146 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 18:12:49 ]
>>145
俺の
コードに
文句言うな

147 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 21:34:29 ]
>>144
一日目でそれだけ書ければすごいよ。

148 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 22:13:04 ]
>>145
3 行 x 80 桁ではこれが限界ですた…

fun r () = let open TextIO String Char val c = (valOf o input1) stdIn; in case c
of #" " => print "&nbsp;" | #"¥t" => print "&nbsp;&nbsp;&nbsp;&nbsp;" | #"¥n" =>
print "¥n" | _ =>((print o toString)c;(print o valOf o inputLine)stdIn);r() end;

149 名前:デフォルトの名無しさん [2007/12/12(水) 20:07:08 ]
OCamlで
('a -> 'a) -> 'a
という型のY-combinatorを定義することは出来るのでしょうか。
let fix = fun f -> (fun x -> f (fun y -> x x y)) (fun x -> f (fun y -> x x y))

let rec fix f = f(fun x -> fix f x)
はどうしても、
(('a -> 'b) -> 'a -> 'b) -> 'a -> 'b
という型になってしまいます。(遅延評価をするHaskellでは問題なく書けるのですが)
これだと,TAPLのP144にある,以下の相互再帰が型エラーで書けません。
let ff ieio =
{iseven =
(fun x ->
if x=0 then true
else ieio.isodd (x-1));
isodd =
(fun x ->
if x=0 then false
else ieio.iseven (x-1))}

let r = fix ff



150 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 02:27:16 ]
パターンマッチのある言語で正規表現って必要なんだろうか。
メタランゲージなんだから、そのまま書き下した方がスッキリする。

151 名前:デフォルトの名無しさん [2007/12/13(木) 08:08:58 ]
関数型言語のパターンマッチでまだ A.*B 相当とか書けないよね。

152 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 08:45:20 ]
>>150
正規表現並にconciseな表現ができればね

153 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 08:58:43 ]
正規表現そのものだと、バックトラックが必要になるからまずいです。



154 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 17:18:34 ]
中置文字について何かまとめた。トリビア的なものだけど。(OCaml 3.09.2)

頭文字
  =<>@^&+-*/$%  どこでも大丈夫
  |  二文字以上なら頭文字可
後続文字
  ~  二文字以上なら頭文字にできるが、頭に使うと前置しかできなくなる。
  !  頭文字にすると前置のみに。
  .:?  後続文字のみ使用可

155 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 00:37:16 ]
(* ^ o ^ *)

156 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 00:39:32 ]
神経を逆撫でするコメントだな

157 名前:デフォルトの名無しさん mailto:sage [2007/12/17(月) 12:32:42 ]
with-open-file (fun ch -> fprintf ch "aaa")

みたいなのって標準ライブラリにある?

158 名前:デフォルトの名無しさん mailto:sage [2007/12/17(月) 21:14:55 ]
俺も欲しいけど、エラーの扱いとかどうなるんだろ

159 名前:デフォルトの名無しさん [2007/12/18(火) 20:20:46 ]
中でfinallyつかえばいいんじゃないかな。

160 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 10:35:14 ]
ocamlにfinallyなんてないだろ

161 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 16:22:00 ]
Javaプログラマは夢見るSuccubus
finally かなり 例外に依存して生きているの


162 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 17:32:45 ]
何だ OCaml には finally があるのかと思った
また OCaml 限定の話かよとスルーしてたのに

163 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 23:00:37 ]
>>149
OCamlでは
('a -> 'a) -> 'a
という型のY-combinatorは定義出来ません。
HaskeiiはLazy evaluationなので、例で書いているように出来るのですが、
OCamlはEager evaluationなので、argumentをすぐに評価しようとするので、それをお書きになったような形で避けるとにコンビネータではなくなってしまいます。
これを避けるにはLazy モジュールを使用してナンチャッテ遅延評価で解決します。そうすればコンビネータとして扱うことが出来ます。

同様のことはモナドにも言えて、ナンチャッテ・モジュールを使用すると解決することがあります。

MLのYコンビネータの書き方はLittle MLerの巻末に書いてあるのでご覧下さい。



164 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 17:21:19 ]
>>149>>163

factの実装方法を2通り紹介しておく。

チューリングの賢人鳥
let rec turing's_sage f x = f (turing f) x;;
turing's_sage (fun f x -> if x = 0 then 1 else x * (f (x-1))) 5;;

カリーの雲雀
let lark x (`M y) = x (fun z -> y (`M y) z);;
let curry's_sage f x = lark f (`M (lark f)) x;;
curry's_sage (fun f n -> if n = 0 then 1 else n * (f (n-1))) 5;;

どっちの方法も
- : int = 120
と返ってくる。

165 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 19:10:27 ]
>>164
スマリヤンの「ものまね鳥」だね。SKIコンビネータ入門にいいよね。
ほかにもJAYとかOWLとか出てきた希ガス。

166 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 21:22:48 ]
論理学の問題ならCoqを使ってコードを作ればいいんじゃねえか?

coq.inria.fr/

167 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 21:39:17 ]
(つд⊂)ゴシゴシ(;゚д゚) 論理学の問題

168 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 00:08:29 ]
Coq is the specification language.

Interactive Theorem Proving And Program Development
by Coq'art: The Calculus Of Inductive Constructions

これ系統の参考文献にこれもいいかも。

TAPL : Types and Programming Languages

169 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 00:24:27 ]
>>167
数理論理学とコンピュータ・プログラムの間には深い関連性がある。

A.近代論理学の開祖であるフレーゲの概念記法を出発点とするゲンツェンの自然演繹
B.チャーチの型付きラムダ計算

2つのモデルはカリー・ハワード対応によって同型として対応付けられる。
つまり、論理学の問題と言っているのは、実はコンピュータ・プログラムの問題と言っているのと同じなのだ。
QED.

170 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 00:51:12 ]
Coq見てみたけどワカランw

OCaml-Nagoyaの次の本はCoqだな。決定。

171 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 19:25:22 ]
WindowsのCoqIDEが動かないな。固まったよw

172 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 00:47:12 ]
>>171
うごくよ。
てかProofGeneralが亡くなってる。

173 名前:デフォルトの名無しさん [2008/01/01(火) 02:06:59 ]
>>169
その同型になるのは、1階の述語論理のこと?



174 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 13:37:59 ]
カテゴリカル・コンビネータ理論

175 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 13:45:05 ]
一階述語論理にカリー・ハワード同型対応で対応するのは、一般の関数型言語で使われている型理論とはだいぶ異なる型理論です。

176 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 14:36:17 ]
高階述語論理をカリー・ハワード対応させるとどうなるんですか?

177 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 15:55:45 ]
>>176
どうしたいん?

178 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 16:07:39 ]
Curry-Howardの対応の依存型(dependent type)があると、 高階述語論理を表現することができる。
高階述語論理があれば、「∀f. --- 任意の関数 f について…」という扱いが可能になったり、「関数や述語に関する量化(∀∃)が可能な論理」を構成できる。



179 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 16:19:56 ]
型付きλ計算の世界では、「値の世界」と「型の世界」の間に明確な分離があり、型の定義中に値が出現するといったことはありません。
しかし、依存型(dependent type)を導入するとこの制限が取り払われて、型が値を持てるようになります。
依存型は単純な型付きλ計算よりもはるかに強力で、うまく使えばリストの長さや配列の境界チェックなどさまざまに応用できます。
しかし強力さの一方で型チェックは複雑になり、一般の依存型では型チェックが停止しない場合もあります。
例えば、基本的には型の部分で計算ができるので、そこに無限ループするような項を入れておけば止まらなくなります。
Curry-Howard Isomorphism により、依存型は述語論理と等価な記述力を持つことになります。
したがって、依存型をつけたλ計算の体系を考えることで、論理式の証明を記述したり、その正しさを検査することが可能になるわけです。

OCAMLのCoq では、単純なλ計算ではなく帰納的に定義された型(Inductive types)を使えるように拡張した
Calculus of Inductive Construction というものに依存型を導入し、システムの根幹としています。

180 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 16:26:17 ]
最低でも、一階述語論理系を構成できる程度は理解し、その上で、

直観主義論理,Matin-Loefの型理論、依存型算譜言語

の3つをプログラムの基礎として最低限おさえておけ。

181 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 17:11:13 ]
Curry-Howard Isomorphism をトポスの言葉で表現するとどうなるんですか?

182 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 17:37:52 ]
>>181
おとなしくシミロン嫁

183 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 17:40:00 ]
グロタンのEGA/SGA嫁



184 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 17:41:40 ]
知ってどしたいん?ん?

185 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 17:47:24 ]
シミロンとは・・・

圏論による論理学―高階論理とトポス
清水 義夫

www.amazon.co.jp/o/ASIN/4130120573/

186 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 18:09:02 ]
>>182
シミロン読んでるんですが、高階論理をトポスに対応させて
いるところを Curry-Howard 同型と考えていいわけですか?


187 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 18:26:11 ]
>>186
まあそうなんだけど、関数に対応するものがトポスの射になってる。

普通の集合論では、「はじめに一者あり」である。存在論的な形になっていて、その一者(実は、空)から、すべての存在が生成される。
では、Mac Lane が指摘した、論理学ではどうなるか。

ところが関数型の場合、「はじめに働きあり」である。なんじゃそりゃ、と思うかもしれない。
普通の集合論では、関数は、集合の一種(つまり、グラフ)として定義される。
でもこちらは、逆に、関数から集合を定義しようということなのだ。

この関数概念を一般化したのがシミロンのトポスの射。

188 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 18:31:40 ]
Grothendieckは位相空間 X より X 上 の層全体のなす圏(トポスになる) がより本質的だと考えた。
彼はこの考えを、エタールコホモロジーのアイデアとともに得た。

189 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 18:34:39 ]
>>187
解説ありがとうございます。
ちょっと外出してきますのでまたのちほど。
すみませんです。

190 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 18:36:07 ]
シミロンでやってるのはGrothendieckのオリジナルとは違って、
Kripke-Joyalの意味論での手続きによって集合論的論理式をトポスの対象と射についての言明として解釈したもの。

191 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 18:47:05 ]
実数の体系の持つ超越的な性格は集合論の初期から様々な数学者の嫌悪の的となった。
実数を定めるのに便利な集合論的定式化はやがて多くの数学者に受け入れられるようになったが、
20世紀初めに論理学者のブラウワーは直観主義とよばれる、具体的に構成できるようなものだけを認める論理の体系をつくった。
彼はそこで実数について通常の数学におけるものとは著しく異なった結論を導きだせることを示した。
これにはKripke-Joyalの層の意味論によって現代的な解釈が与えられる。

シミロンのやってることを実行するとこんな風に実数の扱いなどがもっとブラウワー的に出来るようになります。

192 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 18:49:58 ]
ただしCoqではKripke-Joyalの意味論は扱えないのでこのスレの趣旨からは外れますね。
つづきは数学板で質問してください。

193 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 19:10:59 ]
λ式は、どのプログラマにとっても役立つ新たなツールです。最近ではVisual Basic 2008にも実装されました。

元々、Visual Basic 2008 (以前のコード名は "Orcas") にλ式が追加されたのは 、LINQ (Language Integrated Queries) をサポートするためです。
これは、Visual Basic でのデータ プログラミングを可能にするものです。

λ式を使用すると、プログラムの柔軟性が向上することがわかります。
λ式は、関数内で定義される呼び出し可能なエンティティであり、何の制約もなく利用でき、
したがって、λ式を関数から返したり他の関数に渡したりできるからです。

λ計算(lambda calculus)は、理論計算機科学や数理論理学における、関数の定義と実行を抽象化した計算体系であるλ算法とも言う。
関数を文字λ)を使った式によって表記する。アロンゾ・チャーチとスティーヴン・コール・クリーネによって1930年代に考案されたものです。
1936年にチャーチはλ計算を用いて一階述語論理の決定可能性問題を否定的に解いた。
λ計算は「計算可能な関数」とはなにかを定義するために用いられることもある。

λ計算は1つの変換規則(変数置換)と1つの関数定義規則のみを持つ、最小の(ユニバーサルな)プログラミング言語であるということもできる。
ここでいう「ユニバーサルな」とは、全ての計算可能な関数が表現でき正しく評価されるという意味である。
これは、λ計算がチューリングマシンと等価な数理モデルであることを意味している。
チューリングマシンがハードウェア的なモデル化であるのに対し、λ計算はよりソフトウェア的なアプローチをとっている。

λ計算は計算の意味論や型理論など、計算機科学のいろいろなところで使われており、特にLisp、ML、Haskellといった関数型プログラミング言語の理論的基盤として、
その誕生に大きな役割を果たしたが、とうとうVisual Basicにまで搭載されたことで、今後、その重要性は益々増大するだろう。



194 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 20:43:42 ]
いま帰りました。
つまり、空集合から始まる現代集合論はもう
終わりの時代を迎えた、ということですか?
シミロンを読んでいて、ラムダ項もある種の
射に対応するのを知り目から鱗が落ちました。



195 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 21:53:13 ]
>>192
そうですね。数学板にいきます。

196 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 22:55:53 ]
Lisp ⇒ Common Lisp
Lisp ⇒ Scheme
Lisp ⇒ ML
┌―――┘

ML ⇒ Miranda ⇒ Haskell ⇒ Erlang
ML ⇒ Miranda ⇒ Clean ⇒ Concurrent Clean
ML ⇒ SML
ML ⇒ CAML ⇒ OCAML ⇒ (そろそろこないかなぁ?)

197 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 23:38:37 ]
Erlangは違くない?

198 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 04:13:52 ]
ついついOCamlという字面を見ると『岡村』って読んじゃう。
SMLをSmileって読んじゃうみたいに。でも頭の中はSMのことでいっぱい。
EclipseやElispをエロリスプとか。

199 名前:デフォルトの名無しさん [2008/01/03(木) 14:03:05 ]
>>196
Haskell→Erlangはおかしいでしょ

200 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 14:18:11 ]
Clean ⇒ Concurrent Clean ⇒ Clean

201 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 23:11:56 ]
OCamler ⇒ 岡村さん
SMLer ⇒ 須村さん
Schemer ⇒ 隙間さん

202 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 23:27:49 ]
数学わかる人がいなくなると急にレベル下がっちゃうね。

203 名前:デフォルトの名無しさん [2008/01/04(金) 01:21:28 ]
Visual Basicやりたい放題なんだな。
VB.NET化であれだけ振り回した後だともう既存のユーザの移行コストとか考えないでいい空気なんだろうか。




204 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 10:14:36 ]
別にラムダ式を入れるのに後方互換を犠牲にする必要はないだろ

205 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 17:31:47 ]
COMつかい放題なのに文法が残念だからカオスでOK

206 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 22:50:49 ]
VBはスレチだから置いとくとして、F#は何度かアップデートされたら化ける可能性はある。
OCAMLが完全に止まってるだけにちょっと気になる。

207 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 00:06:15 ]
q-lang.sourceforge.net/
これなんか面白そう

208 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 00:25:51 ]
>>207
Q言語って音響・映像に特化してるのかな?
これで作られた "Q+Faust+Pd" はかなり大規模な感じ。
関数型の特性を生かしてフィルターとかが多いみたいですね。

209 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 22:59:09 ]
>>206
言語そのものの出来より、MSが力入れるかどうかだな。

210 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 01:19:39 ]
>>209
現在のF#はfunctorが使えないからちょっとね。
でも今後のアップデートで何を追加するのかロードマップを示してくれると興味も湧くんだけどなぁ。
MSが力を入れてくれると期待したい。

211 名前:デフォルトの名無しさん [2008/01/06(日) 23:46:06 ]
ttp://www.infoq.com/articles/pickering-fsharp-workflow
ここ見た感じだと結構ちがう言語に見える
yield とかあるんだね

212 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 23:58:10 ]
>>211
F#の記事ですね。
記者は手続き型でしか考えられない人かな?
forループ連発が意図的なのかよくわからなけど、あまり良い例じゃないなぁ。

213 名前:デフォルトの名無しさん [2008/01/07(月) 00:15:51 ]
この記事のforは全部F#独自のシーケンス内包表記でしょ。
書いた人もFoundations of F#の人だし。



214 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 00:26:33 ]
>>213
for使うと再帰より速度が出るとか?

215 名前:デフォルトの名無しさん [2008/01/12(土) 10:03:20 ]
3.10.1でたね。プレステ3でビルドできるみたい?

216 名前:デフォルトの名無しさん [2008/01/12(土) 18:38:12 ]
>>215
何の?


217 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 02:37:14 ]
caml.inria.fr/ocaml/release.en.html

The most recent version of Objective Caml is 3.10.1. It was released on 2008-01-11.

Some of the highlights in release 3.10 are:
* Instance variables in classes can be declared virtual and
implemented in subclasses. Syntax is val virtual v : t.
* Printing of stack backtraces on uncaught exceptions,
previously available only for bytecode-compiled programs,
is now supported for native-code programs as well.
(Supported on Intel/AMD and PPC, in 32 and 64 bits).
* New ports: MacOS X, PowerPC, 64 bits; Microsoft Windows 64 bits (x64)
using the Microsoft PSDK toolchain; Microsoft Windows 32 bits using the Visual Studio 2005 toolchain.
* The Camlp4 preprocessor was partially reimplemented and offers a new,
more modular API for syntax extensions.
(Users of third-party syntax extensions may wish to stay with OCaml 3.09 until these extensions are ported to the new API.)
* A new experimental tool, ocamlbuild:
a compilation manager that automates the building of OCaml applications and libraries. See the draft documentation.


218 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 21:53:45 ]
流れをぶったぎっちゃうけれど、質問させてください
SML#のページにあるSMLFormatってcamlp4みたいなものなの?
説明見てもちょっと理解できなかったので…
サンプルも何か追加で入れないと動かないのもあるみたいなので使ったことある方とか居たら、どんなものか聞かせてください

219 名前:デフォルトの名無しさん [2008/01/13(日) 22:32:40 ]
使ったこと無いけど解説読むと普通のフォーマッタ/プリティプリンタじゃないかな。

220 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 21:14:36 ]
F#版Parsec
ttp://www.quanttec.com/fparsec/index.html

F#版STM
ttp://cs.hubfs.net/blogs/hell_is_other_languages/archive/2008/01/16/4565.aspx

221 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 22:41:00 ]
schemeのiotaみたいなのってocamlにないですかね

222 名前:デフォルトの名無しさん [2008/01/17(木) 08:21:32 ]
Arrayにはある。ListにはExtlibにある。

223 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 23:14:49 ]
トン。



224 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 00:08:30 ]
できたー。ライブラリインストールに手間取った;;
ExtList.List.init 100 ((+)1);;
結構タイプ量おおいな;;

225 名前:デフォルトの名無しさん [2008/01/18(金) 00:27:11 ]
Extlibは基本open ExtListとかして使うものだよ。
ListまでをopenしないのはOCaml流だと思ってあきらめるしかないけど。

226 名前:218 mailto:sage [2008/01/18(金) 22:06:57 ]
>219
遅くなってごめんなさい

ありがとう

227 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 20:16:22 ]
>>225
遅くなったけど、ありがとう
ばっちり使わせてもらいます。

228 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 17:31:49 ]
windows用のexeファイルを作りたいのですがどうすればいいですか?
VC++ expressインストールすればできますか?

229 名前:デフォルトの名無しさん [2008/01/23(水) 08:10:53 ]
同梱のドキュメントに書いてあるよ。

230 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 23:43:03 ]
同じint -> int = <fun>なのに、RandomではException: Invalid_argument "Random.int"がでます
○ExtLib.List.init 10 ((+)1);;
×ExtLib.List.init 10 Random.int;;
説明では、Invalid_argが出るのは初期値(↑だと10)が負の時とあるけど、これってもしかしてバグ?


231 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 23:46:44 ]
↑無視してくださいRandom.int 0がエラーでした。

232 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 23:02:51 ]
次スレのタイトルを「関数型言語ML(SML, OCaml, F#, etc.), Part 6」として「【.NET】F#について語れ【OCAML】」スレを合流させれば過疎らなくて済むかねぇ。
ML系過疎り杉w

233 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 23:03:20 ]
たった今ハマりかけたのでちょっと書いとく。
Array.copyで新規作成されるのは一次元目の配列だけで、
二次元、三次元とかの値は前の値を差し続けてる。
まるごとコピーしたいときはその次元専用のcopyを作った方がいいみたい。




234 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 03:01:51 ]
228じゃないけどうまくいかないや。
masm32もVC++も入れたしmasmのINCLUDE、LIB、PATHも通したのに。

一応Visual StudioのVCのPATH入れたり
masm32のbinにcl.exeやmspdb80.dll入れてみたりしたけど駄目だった。
う〜ん、masmとVC++アンインストしようかしらw

235 名前:デフォルトの名無しさん [2008/01/26(土) 00:34:24 ]
エスパー能力を期待しないでくれよ

236 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 12:53:22 ]
すみません,勉強し始めたばかりで,わからないことがあります.
指定した数だけランダムな数字を出力したいです.
やってみたところ再帰が止まらないです...
どうして>.<b

# let rec print_random n =
if n = 0 then 2 else
begin
print_int (Random.int 2);
print_random n-1;
end;;

237 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 12:59:31 ]
>print_random n-1;
これが(print_random n)-1;と解釈されるからだな
print_random (n-1);とすればよろし

238 名前:sage [2008/01/30(水) 14:49:02 ]
ocamlbuild はゴミ

あれで便利便利って言って喜んでる奴はまだロクなもん書いてない

さらなるゴミ p4 のビルドで必要なのがさらにゴミ
ゴミのおかげで make world の時間がもったいない


239 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 17:18:38 ]
>>237
ありがとうございます〜〜〜
少しずつ型チェックってなんのかわかってきました.いろいろ書いてみます!

let rec cntRandom n zeroCnt oneCnt=
if n = 0 then zeroCnt else
(
if ((Random.int 2) = 0) then
cntRandom (n-1) (zeroCnt+1) oneCnt else cntRandom (n-1) zeroCnt (oneCnt+1)
);;



240 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 21:00:52 ]
token listを受け取って整形式XMLなら(string,string) xmlを返すxml_of_tokensを作れ、という問題に
3日ぐらい挑んでいるのですが、わかりません。誰か助けて。

type token = PCDATA of string | Open of string | Close of string;;
type ('a,'b) xml = XLf of 'b option | XBr of 'a * ('a,'b) xml list;;

入力: [Open "a"; Open "b"; Close "b"; Open "c"; PCDATA "Hello"; Close "c"; Close "a"]
出力: XBr ("a", [XBr ("b", []); XBr ("c", [XBr ("Hello", [])])])

入力の型と出力の型が違うのでわけわかりません
閉じタグとか考えてると、スコープが足りないです。
スコップをください。


241 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 00:21:39 ]
>>240
全然深く考えてないけど,スタック使えばいいんじゃないの?

242 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 10:32:25 ]
>>240
PCDATAはXLfでなくて良いのか?

exception ParseException of string
let rec parse (xs : token list) (context : string list) (ks : ('a,'b) xml list list) : ('a,'b) xml =
 let add_child ks x =
  match ks with
  | [] -> raise (ParseException "internal error: add_child")
  | (k::ks1) -> (x::k)::ks1
 in
 match xs with
 | [] ->
  if context <> [] then
   raise (ParseException ("some tags are not closed:" ^ (String.concat "," context)))
  else
   hd (hd ks)
 | (PCDATA str)::xs1 ->
  if context = [] then
   raise (ParseException ("toplevel PCDATA:" ^ str))
  else
   parse xs1 context (add_child ks (XBr (str, [])))
 | (Open tag)::xs1 ->
  parse xs1 (tag::context) ([]::ks)
 | (Close tag)::xs1 ->
  if (hd context) <> tag then
   raise (ParseException ("close tag mismatch:" ^ tag ^ " appeared where " ^ (hd context) ^ " expected"))
  else
   parse xs1 (tl context) (add_child (tl ks) (XBr (tag, (rev (hd ks)))))
let run_parse xs = parse xs [] [[]]

243 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 22:14:54 ]
うおーありがとうございます!
(Open tag)::xs1の箇所で、ひとつ先読みする再帰になるのかと思って
ずっと考えてたけど、全然違った・・
あと、ご指摘のとおりPCDATAはXLfのほうが良さそうですね

上のadd_childみたいな関数が必要になるかどうかの判断って
自分には職人技の世界に思えるんですが
一般的なやり方みたいなのあるんですかね。

とりあえず、上記を参考に自分でも書けるよう頑張ってみます。




244 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:51:48 ]
ねぇねぇ、OCamlでオブジェクトを使わないって人いる?
そういう人ってレコードを拡張したい時どうしているの?




245 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 00:19:05 ]
OCamlのクラスって副作用ありますか?

246 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 00:54:00 ]
副作用ありのオブジェクトも作れますし、なしのも作れますよ。

副作用あり
# class point = object
val mutable x : int = 0
method set_x v = x <- v
end;;
class point : object val mutable x : int method set_x : int -> unit end

副作用なし
# class point' = object
val x : int = 0
method set_x v = {< x = v >}
end;;
class point' : object ('a) val x : int method set_x : int -> 'a end


247 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 02:49:12 ]
OCamlでlet _ = ... とlet () = ... 構文の違いがよくわかりません。
使い分けがあるのでしょうか?

248 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 21:32:35 ]
let _ =... と let () =... とでは、使える状況が違う。
前者は名前の束縛を省略しただけで右式がどんな型になっても構わないけど、
後者は右式がunit型にならないとダメ。
どちらも print_string のような副作用が目的の式によく使うけど、
私は戻り値が要らないという意味で、let _ =...で統一している。
これだと let _ = Thread.create f () とかでも対応できる。

249 名前:247 mailto:sage [2008/02/06(水) 23:43:09 ]
>>248
ありがとうございます。

# let () = true;;
Characters 9-13:
let () = true;;
^^^^
This expression has type bool but is here used with type unit

やってみたら確かにそうです。
悩んでいたのでとても参考になります。

250 名前:デフォルトの名無しさん [2008/02/07(木) 10:23:25 ]
俺は戻り値がunit じゃない状況を区別するために let () = を使ってる
let _ = は、 ignore @@ Unix.system "rm -rf hoge" とか

251 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 10:40:36 ]
labelglutを使っていて
GluMat.gluPerspective ~fovy:(45.0) ~aspect:(1.0) ~zNear:(0.1) ~zFar:(100.0)
って書いてもUnbound value GluMat.gluPerspectiveって言われてちゃう

wwwfun.kurims.kyoto-u.ac.jp/soft/lsl/lablgl.txt
www.opengl.org/sdk/docs/man/xhtml/gluPerspective.xml
を見て書いたのですがどこがいけないかわかりません>.<b




252 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 23:12:43 ]
>>251
まさかライブラリの指定を忘れてるなんて落ちはないよな。
ocamlc -I +lablGL lablgl.cma lablglut.cma ...
という感じでコンパイルしなきゃいけないはずだけど?

253 名前:247 mailto:sage [2008/02/08(金) 02:21:31 ]
>>250
統一するか区別するかOCaml内のコードを調べてみます。
多いほうにしてみます。



254 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 09:33:48 ]
>>252
大体原因がわかった
exampleにあった
GlMat.ortho ~x:(-1.0, 1.0) ~y:(-1.0, 1.0) ~z:(-1.0,1.0);
を調べてみたら
void glOrtho( GLdouble left,
GLdouble right,
GLdouble bottom,
GLdouble top,
GLdouble nearVal,
GLdouble farVal);
でなっていてGLの引数と違う名前になっていたのね

GluMat.perspective ~fovy:(45.0) ~aspect:(1.0) ~zNear:(0.1) ~zFar(100.0);
GluMat.perspective ~fovy:(45.0) ~aspect:(1.0) ~z(0.1, 100.0);
見たく試してみてもダメだったw

どっかに引数に関してマニュアルないわけ?

255 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 21:25:54 ]
>> 254
.mli 見ろや:

val perspective : fovy:float -> aspect:float -> z:float * float -> unit


256 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 01:59:10 ]
cygwin 3.10で実行しています。

while true do
  print_string "debug1\n";
  ignore (Unix.recv sock buf 0 (String.length buf) []);
  print_string buf;
  print_string "debug2\n";
done;;
を実行したのですが、
print_string "debug1\n";
が実行されず、プログラムが停止して、動きません。
コンパイル時にエラーはありませんでした。
何がいけないのでしょうか?

257 名前:デフォルトの名無しさん [2008/02/14(木) 06:49:29 ]
>>256
システムに関係なく print_string は buffering されているので
flush stdout が必要。

デバッグには stderr に出力 + flush の prerr_endline をおすすめする。
次の pervasives.mli のコメントをよく読んでくれ:

val print_string : string -> unit
(** Print a string on standard output. *)
val print_endline : string -> unit
(** Print a string, followed by a newline character, on
standard output and flush standard output. *)
val prerr_endline : string -> unit
(** Print a string, followed by a newline character on standard error
and flush standard error. *)

こういう細かいことって日本語の O'Caml の本には書いてないのかな?


258 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 20:34:46 ]
>257
ありがとうございます。
prerr_endlineを使用したところ、うまく動作するようになりました。

259 名前:デフォルトの名無しさん [2008/02/15(金) 16:42:11 ]
OCamlで共有ライブラリを作ったり、それと動的リンクするようなプログラムを作るには、
Makefileにどう書けばいい?

260 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 17:01:35 ]
>>259
stublib のことなら ocaml のソースの otherlibs/graph などを参考に。
otherlibs/Makefile.shared を include してあるが、そこに大体書いてある。


261 名前:259 mailto:sage [2008/02/16(土) 16:35:26 ]
>260
ごめん、説明不足だった。

OCamlで書かれたライブラリがあって、それを自分で書いたOCamlのコードから使いたいんだけど、
ライブラリの方がLGPLなのでできれば静的リンクしたくないんだ。

262 名前:デフォルトの名無しさん [2008/02/16(土) 16:59:23 ]
>>261
3.10現在、無い。バイトコードだとstubを読みに行く方法があるけど。
OCamlのライブラリは多くの場合LGPLの例外事項が追加されていると思うんだけど、
そういうのはないの? 以下はsexplibの例。

As a special exception to the GNU Lesser General Public License, you
may link, statically or dynamically, a "work that uses the Library"
with a publicly distributed version of the Library to produce an
executable file containing portions of the Library, and distribute that
executable file under terms of your choice, without any of the additional
requirements listed in clause 6 of the GNU Lesser General Public License.


263 名前:259 mailto:sage [2008/02/16(土) 17:31:46 ]
>262
ありがとう!勉強になった。

調べてみたけど、例外事項は入ってないみたいだ。

ライブラリのメーリングリストを流し読みしたところ、
「オブジェクトファイルを添付すればいいだけなんだから別に問題なくね?」
という結論になった模様orz

まぁ実際そのとおりだから、そうすることにするよ。



264 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 01:27:40 ]
ttp://www.ocaml-tutorial.org/ja
なんかつながんね

265 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 01:47:54 ]
>>264
繋がるよ?

266 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 01:59:31 ]
オレは繋がらない。

267 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 08:56:08 ]
俺も問題ない

268 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 12:11:08 ]
Ocamlの入門者ですが、n重のリストの要素数を数えたいと思って
↓のように書いてみたのですがエラーになります。
型推論などまだよくわかってないのですが、Ocamlではこのような関数は書けないのでしょうか。
# let rec moredeeplen = function
  | [] -> 0
  | (hd :: tl) :: rest -> 1 + moredeeplen tl + moredeeplen rest
  | _ :: rest -> 1 + moredeeplen rest;;
This expression has type 'a list but is here used with type 'a list list

269 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 21:42:05 ]
>>268
自分も勉強中だからはっきりとは言えないけどムリじゃないかな?

まず、n重のリストを関数に適用しようにも、
n=1のリストは'a list
n=2のリストは'a list list
n=3のリストは'a list list list
…ていう用にそれぞれ型が違うのでどんな入れ子リストにでも対応できる関数は書けない。

現実にそういうことがやりたいなら、バリアントとリストを組み合わせることになると思う。

270 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 21:51:43 ]
>>268
O'Caml の気持ちを代弁すると、
moredeeplen の型は多分 'a list list -> int だと思うんだが、
再帰的に呼ぶ際に moredeeplen tl の所で 'a list -> int という違う型で
使っている。なのでアウト。

普通は 268 が書きたいような、型を利用した再帰関数は ML の多相型では
書けませんな。


271 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 21:59:39 ]
> ocaml -rectypes
Objective Caml version 3.09.3

# let rec len v = List.fold_left (fun s v -> s + (len v)) 0 v;;
val len : ('a list as 'a) -> int = <fun>
# len (let rec v = [v; v; v] in v);;
Stack overflow during evaluation (looping recursion?).

はっ、初学者を混乱させるだけか...。

272 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 10:12:55 ]
>>271
その定義は常に 0 を返すのだが。

let rec len v = List.fold_left (fun s v -> s + (len v) + 1) 0 v;;
# len [[[];[]]; []];;
- : int = 4

面白いけど 268 がやりたいこととはちょっと違いますね。


273 名前:268 mailto:sage [2008/02/22(金) 11:03:06 ]
酷いコードを例示したのに色々考えてくださってありがとうございます。
簡単にはできないということで先に進もうと思います。



274 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 01:03:08 ]
こちらのスレの方々はどうなのでしょう?
pc11.2ch.net/test/read.cgi/tech/1186030985/244n

275 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 23:31:52 ]
>>274
accumulator は後にするかなあ
複雑にならないなら fold とかで済ませたいと思っちゃうけど

276 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 01:59:47 ]
すいません、↓の記事を見かけたのですが、結局yieldってどんな風に実装するんですか?
itpro.nikkeibp.co.jp/article/COLUMN/20070612/274231/

277 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 02:33:33 ]
>>276
π-calculusは俺も勉強中なんだが、
この本が役に立つぜ
www.amazon.co.jp/Communicating-Mobile-Systems-Robin-Milner/dp/0521658691

質問ですが、
GUIライブラリが充実しているネイティブコンパイラ付きの関数型言語はありませんか?
HaskellもOCamlもこれといってまともなGUIライブラリが存在しないので・・・

278 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 03:02:36 ]
wxHaskellはまともなGUIライブラリに数えてくれないのか

279 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 09:13:48 ]
yieldの中身の作り方の参考にはならんのでは>ミルナー本

280 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 10:02:42 ]
wxHaskellは前回の公式リリースからだいぶ時間がたってるしなぁ。
その間にGHCも6.4から6.8になってるわけで…。

久しぶりにSourceforgeのほう見てみたら
wxhaskell-0.10.3-rc1 ってのが出てた。
sourceforge.net/project/showfiles.php?group_id=73133

281 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 10:20:29 ]
LablGTKは駄目なのか?
wwwfun.kurims.kyoto-u.ac.jp/soft/olabl/lablgtk.html

282 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 11:18:21 ]
>>276
・グローバルなunit chan refを一個作る(qとする)
・yieldはqからのrecvとして実装
・トップレベルのプロセスを生成した後に、qにsendし続けるプロセスを生成
という感じでどうだろう

283 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 01:11:13 ]
>>282
うぅぅ入門 Ocaml 片手の私には動作がイメージできません・・・
recvしてもすぐsendされて別のに切り替わらないとかになりませんか?
とりあえず挑戦してみます。



284 名前:デフォルトの名無しさん [2008/04/12(土) 21:49:11 ]
引く手あまたのプログラミング言語は?
slashdot.jp/developers/article.pl?sid=08/04/06/2313251
---
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以下だったそうだ。
---

285 名前:デフォルトの名無しさん [2008/04/12(土) 23:05:22 ]
10もあったのか。

286 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 23:50:30 ]
1000ならbrainf*ckの求人をだす

287 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 23:54:05 ]
0 じゃないのか・・・。
冒険してる会社もあるもんだな。

288 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 00:36:55 ]
10以下に0は含まれるがなw

289 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 10:37:39 ]
理屈上はそうだが、記事として書くなら、
0なら0と書くか話題にも上らないかのどっちかだろう

290 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 10:56:58 ]
ちなみにCとMLは省かれてます。
検索結果を加工した統計なので。

291 名前:デフォルトの名無しさん [2008/04/20(日) 15:48:14 ]
>> 171
Debian or Ubuntuなら、
# apt-get install coqide
でok

292 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 16:30:04 ]
どちらかが10件あったから、わざわざ10以下と書く場合もあるってことね。

293 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 21:40:54 ]
関数型言語は、変数への代入もforループも使わずにプログラムできるって聞いたけど
どういうこと???
ここにきても全然わからん。



294 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 21:42:19 ]
再帰すればループできるじゃん。

295 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 22:03:38 ]
SML#0.40マダー?チンチン(AA略

296 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 21:59:44 ]
>>293
関数の戻り値を次の関数へ放り込んだり、戻り値の一部だけ次の関数に放り込んで、残りをさらに次の関数に放り込んだりするのだ。


298 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん [2008/04/24(木) 23:05:54 ]
えーintとstringの型あってないし、そこはmapじゃなくてiterじゃないの用途的に

300 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 23:39:18 ]
うは、俺あほw

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

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



302 名前:デフォルトの名無しさん [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 21:41:38 ]
Unix.sleepかThread.delay

305 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 22:00:51 ]
>>302
とりあえず正誤表にはなかったよ。もっかいコード見直したら?
ttp://www.sato.kuis.kyoto-u.ac.jp/~igarashi/OCaml/

306 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 22:23:27 ]
>> 304
できました!
どうもありがとうございます!!

307 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん [2008/04/27(日) 01:10:46 ]
letの方はそれ代入じゃない

309 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 08:38:49 ]
refでやればいいのかよう

310 名前:sakura [2008/04/27(日) 11:45:53 ]
こうなんというか深夜亀頭から白濁色の液が滲み ぷっつん。

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

312 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 16:34:33 ]
HaMLet v1.3.1
www.ps.uni-sb.de/hamlet/CHANGES.txt

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

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


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



314 名前:[Power of Scala] mailto:sage [2008/05/03(土) 16:42:43 ]
>>313
関数型言語Scalaの動画
ttp://d.hatena.ne.jp/video/youtube/SCl0pkrQn1A

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

316 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 19:28:52 ]
制限時間関係なくこの人早口っぽいな〜。



317 名前:Objective Caml mailto:sage [2008/05/03(土) 20:11:11 ]
>>313
F#じゃないけど

OCamlの動画 - YouTube
ttp://www.youtube.com/watch?v=3A8lEraqGzQ


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

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


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


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

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

323 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 10:05:39 ]
>>323
つまりScalaは関数型言語であるっていうこと??

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

326 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 06:56:30 ]
>>325どうも

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

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

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

330 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 20:02:47 ]
無意味なレスしてんなよ noob

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

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

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

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





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

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

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

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

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

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

338 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 17:54:46 ]
>>337
関数だけで構成されていること
でいいんじゃない?

339 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:49:17 ]
>>338

それだとHaskellすらNGだな

340 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:56:34 ]
C++ だって関数型言語なのに!

341 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:44:13 ]
>>340
ないないそれはない

342 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:47:37 ]
それ有名なネタだよ

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



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


345 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 11:58:34 ]
Boost おそるべし

346 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 19:10:58 ]
でもないw

347 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん [2008/05/17(土) 10:31:08 ]
なんでエラーになりそうなのかわからない。

349 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 11:19:41 ]
>| `A -> ()
なんかAAぽい

350 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 13:48:50 ]
>>349
怒ってため息をついてるね。w

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

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

353 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 21:04:26 ]
相互再帰ですか



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

355 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 22:08:01 ]
再帰なんて簡単だお。

356 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 22:32:21 ]
>>347
>今日職場で出た話題。
どこの職場ですか?日本ですか?


357 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 00:32:16 ]
357は>>347へのレス 書き忘れたorz

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


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


361 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 12:09:28 ]
std::sort に渡せりゃそれで十分じゃん。

362 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 16:41:50 ]
qsortのほうがずいぶん遅いしね

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




364 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 17:12:28 ]
windows。それ、最適化してんの?

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

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

367 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 18:46:20 ]
あるいはstd::sortに関数ポインタを渡してるとか

368 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 20:41:28 ]
おもしろいな。
関数呼び出しコスト以上に速くなる?

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


370 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 08:58:50 ]
> ライブラリの形で別言語を実装しておいて

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

371 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 21:49:06 ]
クロージャはファーストクラスじゃないとね

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

373 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 23:02:44 ]
>>370
それいったらアセンブラだって関数型だろwww



374 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 06:52:47 ]
つまらんんこと言っとらんでコード書け。



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

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


377 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 11:19:19 ]
関数型は最初からラムダ式があるから必要ないのでは。

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

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

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

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


380 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 18:56:16 ]
>>378
>LISPだったらマクロなしだと

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

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

382 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 22:19:20 ]
>>381
>ここでS式が出てくるのはなぜ?

興味無いくせに聞くなよ

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




384 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 22:28:55 ]
ああ、コンパイラ作るのか・・その発想はなかったわw

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


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

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

387 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 05:23:56 ]
>>339
いや、セーフだろ

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


389 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 08:16:39 ]
NaN

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

391 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 00:30:15 ]
begin(data)がイテレータ関数を戻すなら
find(b,v)はdataの型と関係なく定義出来る
(イテレータ関数の型には影響をうける)
クロージャ使えるって忘れてない?

393 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 01:10:33 ]
>>391
> 宣言できる

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



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

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

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

397 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 01:55:42 ]
SFINAE(Substitution Failure Is Not An Error)
en.wikipedia.org/wiki/Substitution_failure_is_not_an_error

398 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 01:59:04 ]
>>396
取り敢えず CL はどっちも出来るな

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

400 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 02:12:17 ]
GF じゃダメなん?

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

402 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 04:48:43 ]
>>397
Boostじゃ結構使われてるけど英語しか記事無いのか

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



404 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 08:21:47 ]
何で同じ事を2度書く?

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

406 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 15:25:34 ]
パタンに変数参照を書けないから。
パタン中に変数書くときは束縛になるじゃん。

408 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 19:00:31 ]
つ whenキーワード

410 名前:デフォルトの名無しさん [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 20:30:39 ]
つ if

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

413 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 02:56:54 ]
>>412
かじりかけじゃしょうがないと思うからがんばれ。




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


415 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 11:13:11 ]
つ 入門OCaml

416 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 19:44:14 ]
軸がぶれている

417 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 12:19:57 ]
十分簡潔に書けていると思う。わかりやすいし。
なぜそんなに短さにこだわる?

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

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

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


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


421 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:08:51 ]
>>417
俺だったら先にmapする

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


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



424 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 01:20:52 ]
Unix.LargeFile

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



426 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 01:34:33 ]
>>425
おお、ありがとうございます!

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

# 0xffffffff;;
- : int = 4294967295

428 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 00:54:23 ]
>>427
つまらん



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

430 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 19:07:00 ]
簡潔に書ける

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

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

433 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 20:39:02 ]
>>429
構文糖には何も利点がないとでも?



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

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


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

437 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:11:58 ]
>>436
入力が不適なら例外発生

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

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

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

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


441 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 03:29:17 ]
問題

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

442 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 05:12:14 ]
awkはパターンマッチなのかな

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




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

445 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 00:12:39 ]
SML#はもう開発止まっちゃったの?


446 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 13:51:28 ]
F#(OCAML系)があるしなあ。

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

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

448 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 21:15:11 ]
>>446
何か勘違いしていると思われ


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

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


451 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 22:45:23 ]
SML#の「#」は、.NETよりも歴史が長い


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


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



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

455 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 22:44:31 ]
宿題ですか?


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

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

458 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 01:56:52 ]
>>457
つまりHaskell最高ってことか?

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

460 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 06:54:26 ]
>>456
人生、これストリームなり

461 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 13:13:09 ]
累積変数で、これまでの和を持ち運ぶ

463 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん [2008/06/23(月) 15:38:22 ]
えー。「ここまでの結果」を「引数で」持ちまわるんだよ。再帰終了するところでその引数をそのまま返す。

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

466 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 20:17:29 ]
こんな感じ。

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

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

468 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 20:21:41 ]
pairにする必要ないんじゃ…

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


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

470 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 21:48:14 ]
>>467-468
おまいらHaskell大好きだなwwwww

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

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



474 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 23:31:25 ]
うおお、皆さんありがとう!
いろんなやり方があって勉強になります

476 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 23:47:55 ]
let sigma = tl $ rev $ fold_left (fun ys x -> hd ys+x :: ys) [0]

479 名前:Haskell 修業中 mailto:sage [2008/06/24(火) 04:32:12 ]
すんません。まさに >>472 なんですが…。

import List

sigma = tail.(scanl (+) 0)



480 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 23:31:17 ]
>>479

tail . (scanl (+) 0)

scanl1 (+)
でおっけ

482 名前:Haskell 修業中 mailto:sage [2008/06/24(火) 23:48:01 ]
>>481
おおっ!そんなのがあるんですね。

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

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




484 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 18:20:16 ]
refを沢山使うprogramをHaskellで書くのは大変。
Ocamlで書くのが大変なのは…特にないな。遅延計算くらいか。

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

487 名前:Haskell 修業中 mailto:sage [2008/06/26(木) 18:35:15 ]
>>485
Streamって遅延計算じゃないんですか?

488 名前:Haskell 修業中 mailto:sage [2008/06/26(木) 18:37:26 ]
あっ、かぶったw
やっぱりStream使うんですね。

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


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

491 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 18:43:09 ]
ocamlcってgccの-O0みたいなオプションないのかな

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

492 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 22:56:35 ]
というかこんな意味不明なこと平気で聞くなよ。
kwsk


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

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



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

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


495 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 03:05:49 ]
>>490
ICFP PC 2007の問題とかどうよ?

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

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

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

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

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


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

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

501 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 03:08:23 ]
ちょっとcodepadが使えるのか試してみたよ。
codepad.org/14IrPYhB

502 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 03:21:42 ]
C は REPL が無いからね

503 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 20:22:57 ]
lisp的なREPLを備えたC環境なんてないよな。確かに…

あってもいいんだけど。



504 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 20:55:26 ]
gdbは?

505 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 20:58:08 ]
そういえばこんなのがあったの忘れてたわ。

C-REPL
neugierig.org/software/c-repl/

506 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 20:58:59 ]
Haskell製か

507 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 22:53:12 ]
>>504

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

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

508 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん [2008/07/22(火) 18:35:13 ]
すんまそん、Ocamlで日本語文字は扱えませんか?
例えば正規表現なんかでも使いたいんですが。


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

あと、正規表現で日本語を扱う問題はOCamlに限らずどれでも一緒なので、
www.din.or.jp/~ohzaki/perl.htm
あたりをどうぞ。

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

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


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





514 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 15:52:08 ]
www.cs.caltech.edu/courses/cs134/cs134b/book.pdf
こんなのをみっけたけど、ゆうめいなん?

515 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 08:08:15 ]
OCamlの入門記事
ttp://indori.blog32.fc2.com/blog-entry-223.html

516 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 16:19:54 ]
何よりもピヨが気になる

517 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 08:38:28 ]
>>515
入門記事というより、入門している記事


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


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


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


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

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

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

523 名前:522 mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 15:01:24 ]
■■学校を作ろう!■■
VIP発でサイトを作ろうと思うんだ。(詳しくはWikiを見てくれ)
パートスレになるんでパー速(GEP)に移動している。
今スタッフを募集しているから、来てくれないか?

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

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

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

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

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



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

535 名前:デフォルトの名無しさん [2008/08/25(月) 07:18:20 ]
アセンブラでsho

536 名前: mailto:sage [2008/08/25(月) 16:19:07 ]
アセンブラですか。どうもありがとう。

537 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 17:17:37 ]
>>530
夏休みも終わりだねえ


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


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

540 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 08:46:12 ]
eigenclass.org/hiki/fp-ocaml-koans


541 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 08:51:16 ]
warota

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


543 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 19:00:51 ]
まずはnavi2chのスレをみたほうがいいかもしれない



544 名前:061123251194.cidr.odn.ne.jp mailto:sage [2008/09/19(金) 19:05:21 ]
そのようですね。


545 名前:542 [2008/09/19(金) 19:29:56 ]
おさわがせしました。昔の navi2ch がパスに残っていた、、、ダサいな




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

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


548 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 19:44:24 ]
ワラ


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

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

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

552 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 21:27:18 ]
「Modern Compiler Implementation In ML」かな…
持ってるけど、読んでない…

553 名前:デフォルトの名無しさん [2008/09/19(金) 22:41:49 ]
まだモダンなのかなぁ



554 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 23:00:15 ]
近代はずっと近代。もっと新しいのは現代。

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

556 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 11:54:33 ]
まだポスト・モダンが出現してないから。

557 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 12:10:11 ]
学会のサブタイトルなら見たことある。

558 名前:デフォルトの名無しさん [2008/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$

なんでだろう。
ttp://d.hatena.ne.jp/keita_yamaguchi/20080313/1205419732
の言う通り3.10に対応してないのだろうか?
それとも根本的なところを勘違いしてる?
OCaml初心者ですが、GODIが必要です。

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


560 名前:デフォルトの名無しさん mailto:sage [2008/09/27(土) 19:06:57 ]
NumとかBig_intのプリンタが欲しいとか?

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

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


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

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



564 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 13:34:01 ]
これからはHaskellだから

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


566 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 16:17:28 ]
じゃ、f# がいいんじゃない?
インストーラーがあるよ

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

568 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 23:00:11 ]
>>567
コンパイルできないやつか
コンパイルしても動かないやつしかない

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

570 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 14:34:32 ]
cygwin入れるならデュアルブートか仮想化するなぁ…

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

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

573 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 15:53:52 ]
相変わらずマルチバイト扱いにくいね




574 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 17:01:09 ]
使い方がさっぱりわからないunicodeライブラリならあるよ

575 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 00:03:39 ]
>>574
それ扱いやすいって言わないよ〜 orz

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


576 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 09:44:20 ]
日本語でおk

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



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

579 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 12:01:10 ]
rlwrap

580 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 12:14:31 ]
inf-caml使えばいい

581 名前:577 mailto:sage [2008/10/06(月) 13:12:12 ]
みなさんありがとうございます。
ためして見たところrlwrapを使うことにしました。

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



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

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



584 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 12:12:17 ]
>native判のモジュールの dynamic link

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

586 名前:デフォルトの名無しさん [2008/10/10(金) 12:01:15 ]
法政大学の児玉先生の所におかれている
yk.i.hosei.ac.jp/library/hosei/seminar/caml/miniml/minicaml.sml

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


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

dutherenverseauborddelatable.wordpress.com/2008/10/11/ocaml-batteries-included-version-alpha/

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


588 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 15:52:01 ]
過疎ってるからって hatena からそのままコピペするのはよそうよ


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

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

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

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

592 名前:デフォルトの名無しさん [2008/10/26(日) 23:04:30 ]
断る

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



594 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 23:21:06 ]
>>591
おう、かいてたらいいよ。

595 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 15:21:06 ]
>>595
レスどうも。
この例は、signatureでtype natとして隠蔽した場合と何が違うのでしょう?
試してもprinterが<abstr>になるかどうかくらいしか違い分かりませんでした。
どういう利用法があります?

597 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 15:53:58 ]
ぐぐったらあったorz ↓
ttp://d.hatena.ne.jp/camlspotter/20081027/1225076108
subtypingとは気づかなかった。

598 名前:デフォルトの名無しさん [2008/11/01(土) 12:46:43 ]
nullとnilの違いを教えてください。

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

600 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 14:51:15 ]
>>599
ttp://pc11.2ch.net/test/read.cgi/tech/1203474071/l50

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


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

603 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 03:21:30 ]
nullp



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

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

606 名前:デフォルトの名無しさん [2008/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 名前:デフォルトの名無しさん [2008/11/04(火) 07:09:08 ]
うまくいかなかったやつを載せてみてよ。

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

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

610 名前:デフォルトの名無しさん [2008/11/04(火) 09:16:29 ]
recursive
再帰だな。

611 名前:608 mailto:sage [2008/11/04(火) 09:29:59 ]
とりあえず作ってみた。
>>609のやりかたとは違います。
↓にあっぷしてみたので、ご参考までに。
ttp://www2.uploda.org/uporg1765562.txt.html
(パスは sml です)

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

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

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



614 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 23:34:42 ]
>>612>>613
良く寝て頭を休めろ。

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

616 名前:デフォルトの名無しさん [2008/11/05(水) 00:43:05 ]
宿題でも独学でもどっちでもいいのでは。

617 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 00:55:48 ]
xy.yu.to/
始終荒れまくりの海外サーバ絵チャだ

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


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

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

620 名前:デフォルトの名無しさん [2008/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 名前:デフォルトの名無しさん [2008/11/09(日) 12:48:12 ]
なんでもいいけど
let func f = (f 1 2) + 3;;

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

623 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 03:10:20 ]
ふと気づいたらOCaml3.11.0キテター



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

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

626 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 16:39:09 ]
Macports使えよ


627 名前:デフォルトの名無しさん mailto:sage [2008/12/29(月) 12:31:58 ]
>626
やっと入れられた。ありがとう。

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

629 名前:デフォルトの名無しさん mailto:sage [2008/12/29(月) 13:04:14 ]
>>628
人生にお疲れのようですね。

630 名前:デフォルトの名無しさん [2009/01/01(木) 23:05:22 ]
引く手あまたのプログラミング言語は?
slashdot.jp/developers/article.pl?sid=08/04/06/2313251
---
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 名前:デフォルトの名無しさん [2009/01/03(土) 03:15:13 ]
当然だ。HaskellやOcamlの素晴らしさを理解できる人種は
限られているからな。JavaやC++みたいな糞言語を使う糞グ
ラマがいる限り日本のIT産業の生産性は低いままだろう。
今必要とされているのは我々のような高い能力をもつエンジ
ニアであるにも関わらずスーツ族にはそりがわからんのですよ。
うはwテラガンダムwww俺自重www

こうですかわかりません

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

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



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

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

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

637 名前:デフォルトの名無しさん mailto:sage [2009/01/03(土) 13:42:15 ]
>>636
へえー

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

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

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

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

642 名前:デフォルトの名無しさん mailto:sage [2009/01/03(土) 19:50:26 ]
で、高卒は35歳で定年退職です

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



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

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

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

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

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


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

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

651 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:34:51 ]
>>650
困る困る大いに困る

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

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



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

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

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

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

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


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

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

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

662 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 09:00:13 ]
1977年に論文発表のFPでいいと思うよ

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



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

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

666 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 12:54:21 ]
頭破七部

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


668 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 16:22:17 ]
maximaに勝てるフリーのものなんてないよ

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

670 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 17:55:04 ]
>>669
もっともらしい大嘘乙

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

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

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

672 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 18:11:34 ]
>>671
あるよw
それがなかったら日本のIT沈没w

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

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



674 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 18:56:13 ]
SIだってソフトウェア工学とかを無視して仕事はできん。

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

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

676 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 20:12:15 ]
ふざけんな。計算機科学の立派な一分野です。

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

678 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 23:14:37 ]
おいおいScienceとEngineeringの違いが解ってないのがいるのかよ…

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

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

681 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 14:45:40 ]
FP の話をしてくれ


682 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 17:15:02 ]
FP?興味ないね

683 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 07:03:14 ]
関数型プログラミングのことじゃないの?



684 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 09:18:11 ]
バッカスのFPじゃないの?

685 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 12:49:43 ]
Floating Point

686 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 12:54:32 ]
FPでぐぐると上の方に出てくるのはfinancial plannerばかりだな

function pointというのもある

687 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 13:57:12 ]
下着のサイズッて後ろのフォックで分るんだって!!!
知ってた?

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

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

688 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 14:44:08 ]
俺FP2級持ってるぞ

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

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


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

691 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 11:46:44 ]
>>687
飯島愛乙!

692 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 12:09:20 ]
>>690
61才でもいいかい?

693 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 12:28:52 ]
>>690
理学博士のニートですがいいですか



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

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

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

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

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

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

700 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 19:24:56 ]
FX とかこええええええええええええええええええええええ

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

702 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 22:58:03 ]
>>700
質問です
FXはどうして怖いんですか?

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



704 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 10:37:47 ]
>>690
なぜ、MLなの? ここではそれが訊きたい。

705 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 11:13:24 ]
ページに書いてあるじゃん

706 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 11:17:00 ]
いままで、おっかむるって呼んでたw

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

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

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

710 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 11:51:33 ]
>>708
F#じゃあかん?

711 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 14:55:57 ]
>>708
所謂ベンチャーですか?

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

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



714 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 19:15:05 ]
>>713
それ重要だな

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

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

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

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

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

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

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


722 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 16:07:03 ]
>>720
Haskell本出せっていう要求は5〜6年ぐらい前の話。

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



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

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

726 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 17:33:44 ]
英語も分からないような人はプログラミングなんかしなくていいよ

727 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 17:37:26 ]
なんか変な人がいるなwwww欲求不満なのかww?

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

729 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 17:47:35 ]
よくしらんけどocamlp4とかでやるんじゃないの

730 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 17:48:50 ]
ocamlp4じゃねえや
camlp4だった

731 名前:デフォルトの名無しさん [2009/01/11(日) 18:36:02 ]
なんでここ急に盛り上がってんの

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

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



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

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

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

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

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

738 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 20:00:18 ]
>大して作業効率にも反映されない。

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

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

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

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

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

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

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



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

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

746 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 20:27:24 ]
>>745
勝負どころの振り分けはどのように?

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

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

749 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 20:32:58 ]
>マクロ使うとコードが煩雑になるじゃん

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

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

751 名前:デフォルトの名無しさん [2009/01/11(日) 20:41:33 ]
>>733

752 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 20:44:24 ]
マクロ生成マクロは黒魔術じゃねw
使うけど。

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

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

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

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



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

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

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

756 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 20:59:17 ]
>>742
Scheme > Common Lisp > Haskell > SML/OCaml

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

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

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

760 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 22:12:55 ]
つ Dylan

761 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 00:41:18 ]
>>757-758
 >>735

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

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

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

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

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



764 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 00:52:03 ]
MONADIUSみてHaskellに対する印象が変わったな

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

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

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

768 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 08:54:54 ]
英語読めない奴の為に翻訳までしないと一流とは言えないな

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

770 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 08:59:14 ]
じゃぁ二流でいいです。

771 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 09:41:39 ]
>>761
>>>757-758
> >>735

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

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

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



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

775 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 12:29:37 ]
つまんね

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

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

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

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

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

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

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

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

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



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

785 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 13:33:47 ]
>>782
何がだめだったんだろ。
言語体系の違いか?

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

787 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 13:41:14 ]
そろそろ関数型言語の話をしようぜ

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

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

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

791 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 14:57:09 ]
>>788
俗説

792 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 14:59:53 ]
しかし日本語を体系化できた人間は未だにいない。

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

Scheme最強!!



794 名前:720 mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 15:31:37 ]
低品質ソフト垂れ流しやがって ゆるせん

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

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

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

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


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

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

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

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

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



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

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

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

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

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


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

810 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 07:01:13 ]
>>808
mldonkeyとか読んだ。でもあんま沢山のアプリを読んでないのですまん。

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


812 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 09:39:21 ]
オブジェクトはOcamlの鬼子
d.hatena.ne.jp/camlspotter/20080906/1220723583
d.hatena.ne.jp/camlspotter/20080908/1220846961

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



814 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 12:24:20 ]
>>813
3時間ぐらい

815 名前:デフォルトの名無しさん [2009/01/13(火) 18:09:27 ]
↑↑馬鹿だろ

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


817 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 20:38:13 ]
初Ocaml

階乗計算を2通りやってみた。
codepad.org/5vBjk9Cm

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

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

819 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 21:13:25 ]
>>818
同意。

820 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 21:16:50 ]
>>817, >>818
3通り
codepad.org/5bAL8aRu

821 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 21:54:19 ]
型の例
codepad.org/UGqmVJcb

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


823 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 23:08:59 ]
>>822の言うように修正したコード
codepad.org/i8vprhP5



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

825 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 23:23:22 ]
>>823を相互再帰にする。3つの関数のどこから計算しても同じ。
codepad.org/x8n2Lk8r

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

827 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 23:53:36 ]
>>825
相互再帰を入れれば全部で6通り。


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

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

830 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 15:24:18 ]
末尾再帰バージョン
codepad.org/vE2CJfG0

831 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 20:08:54 ]
マージソートを作ってみた。リストの表示に良い方法ってあるの?
codepad.org/VJydA6mc

832 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 20:16:02 ]
>>826
それ>>164まんまw

833 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 20:16:18 ]
extlibのStd.printが汎用プリンタっぽいですね



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

835 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 19:43:52 ]
簡単なオブジェクトの例
codepad.org/v0ANkxs1

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

hello#print ;;


836 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 19:58:40 ]
>>835の例をもう少しちゃんと書くと
codepad.org/kJsrhxd6

let hello = new c_hello ;;

837 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 20:30:48 ]
>>836のクラスを継承する。
codepad.org/Q1xMkrvt

838 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 19:01:06 ]
リストの操作の練習など
codepad.org/Ggh5Z9mp

839 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 05:42:37 ]
和集合は
else

840 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 05:44:24 ]
間違えて途中書き込みしてしまった

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

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

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

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

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



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


845 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 21:43:51 ]
>末尾再帰になっていない分効率が悪いですよね
codepad.org/NLLYr3fJ
codepad.org/KnzRmJjp

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

846 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 13:14:19 ]
OCamlを使っている皆さんのプログラミング環境やプログラミングスタイルって
どういうものなのか教えていただけませんか?

847 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 09:08:33 ]
環境やスタイルっつーてもねー、もうちょっと質問を明確にできない?
linux, gcc, ocaml3.11, OMake/Makefile, emacs, tuareg1.46.2,
80chars/line, indent 2chars
とか、そういうこと知りたいの?


848 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 10:06:07 ]
ドテラ着てコタツに入ってみかん食いながらプログラミングするのが今時のスタイル。

849 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 22:25:20 ]
BT別/トイレ有/風呂有/シャワー/室内洗置/給湯/ガスコンロ対応/
システムキッチン/エアコン/冷房/暖房/BSアンテナ/CATV/エレベータ/
オートロック/収納/フローリング/分譲賃貸/駐輪場/ガス2口/浴室乾燥機/
シャワー付トイレ/バルコニー/外壁タイル/クロゼット/宅配ロッカ/CS/照明/
インターネット接続可

850 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 22:34:40 ]
FONに追加したSDカード上のLinux環境(Open-WRT)に
ログオンしてemacs起動してサーバーサイドを作成してる。

851 名前:sage mailto:sage [2009/02/07(土) 08:21:54 ]
自分はEmacs + ocaml-mode。
多くの人は同じじゃね?

852 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 13:00:09 ]
>>847
・コンパイラに○○、
・デバッグのために○○と○○、
・エディタには○○、
・IDEを使う場合は○○、
・開発用と検証用のPCを分けたり、
・開発用・検証用PC間のデータ共有にLANを使ったり、
・通信にRS232Cを使ったり、
・コンパイルするまえに検証したりするかどうかとか、
・バグが見つかったときの対処方法など、
ですね。
ほかにも必要な要素があればぜひ付け加えてください。

どういうプログラムを作るかにも因るかもしれませんが、
要するにどういう種類のプログラムを作るときどういう手順を踏んでいるのか、
ということを教えていただければ幸いです。

853 名前:852 mailto:sage [2009/02/07(土) 13:03:48 ]
追加ですが、
ソースコード管理や配布などについても教えていただければ幸いです。



854 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 20:34:01 ]
>>851 tuareg-modeは楽しいよ

855 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 07:22:46 ]
コンパイラはocaml3.11+ocamlspotter patch.
デバッグは主にextlibのdumpで画面表示. 超絶困ったときにはocamldebug.
エディタはemacs. IDEはいまのところ使ってない.
全体をコンパイルする前に大きく編集したファイルは-iオプションで個別に型をチェック.
-annotオプションは殆ど常に付けていて、謎な動きで困ったときには型とかも参考にしながら動作を追う.
上で抑えられているはずの(match文とかの)ありえない遷移にはassertとかも付けている. ヒットしたことないが.

856 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 10:52:48 ]
>>855 と殆ど同じ

> ・開発用と検証用のPCを分けたり、
> ・開発用・検証用PC間のデータ共有にLANを使ったり、
> ・通信にRS232Cを使ったり、

これは OCaml と何の関係もないと思うが。必要な人はそうするだけの話でしょう。

> ・コンパイルするまえに検証したりするかどうかとか、

質問の意図がよくわかりません。
コンパイラに通す、という事以上に意味のある検証を、
コンパイラに通す前にできるとは思えませんが。

通した後にモデルチェッカとか定理証明器でさらに検証する、
というのなら判りますが、実際やっている所を聞いたことがありません。
あれば是非話を伺いたいです。

> ・バグが見つかったときの対処方法など、

printf debug は馬鹿にできない。
assert して backtrace とかかな?
最悪 ocamldebug。gdb は意外といける。


857 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 11:37:12 ]
>>852
>>853

質問の対象が広すぎて良い答が得られるとは思えません。

- なぜこういう質問をしたくなったのか (会社で OCaml を導入しようとしているとか)、
- 現在こういう手順で他言語で開発を行っている、OCaml を使っても同じようにできるか知りたい

とか、背景説明していただかないと、答える側としても的を得た答を出しにくいです。


858 名前:852 mailto:sage [2009/02/08(日) 12:09:49 ]
>>857
明確な答えは求めておりません。
質問というよりは
「オレはこういうやり方で開発やってるぜ」
という話が聞けたらなぁという感じですね。

どちらかというとブレインストーミングに近いかも。

859 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 20:44:49 ]
じっとソースコードを眺めて、ここでこうなっているはずなのに
こんなことになっている、ということはその原因の候補は……
と考えるだけでもわりととれるもんだよ、バグ。

860 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 20:57:18 ]
・コンパイラにはocaml 3.10
・デバッグのはprint
・エディタにはEmacs + caml-mode
・IDEは使わない
・コンパイルするまえに検証 <- ??? そんなことできるの?
・バグが見つかったときの対処方法 printデバッグ

861 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 22:50:04 ]
ホーア論理を御忘れか?

862 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 23:29:52 ]
MLのHoare論理はまだ研究段階

863 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 23:35:13 ]
completeである必要はないんじゃないの? > 人間のやる検証



864 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 23:51:49 ]
コンパイルの前に検証って、エディタがtypoや型エラーを指摘してくれるとかそういうのじゃないの?

865 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 07:42:47 ]
ちょ MLで Hoare論理ってwww バカスwwww

866 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 12:34:14 ]
>>864
それは深読みすぎ


867 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 21:43:11 ]
>>864 型エラーとかシンタクスとかはコンパイルでチェックしてくれるから
それでよくね?セーブしてコンパイル の時間がそんなに惜しい?一瞬でしょ

868 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 00:08:11 ]
OMake -pの事でしょ?
-p
Watch the filesystem for changes, and continue the build until it succeeds. If this option is specified, omake will restart the build whenever source files are modified. Implies -k.
このレスポンスを一度体験すると割とはまる。

869 名前:  mailto:sage [2009/02/24(火) 10:58:46 ]
Ocaml初心者です。

let ( ) = print_string "Hello World\n"

ってのは何を意味するのですか? let の後には関数名とか変数名とかじゃないのですか?
let ( ) = ってのがわかりません。
教えてください。

870 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 12:04:36 ]
let には二通りある:
let f x y z = 式 (省略)
let パターン = 式

パターンは、簡単に言えば、変数を含んだ値のようなもの。
右辺の式を評価後、パターンに対してパターンマッチを行い、
パターン内に変数があれば、変数部分に該当する値を束縛する:

let x = 1 (* x = 1 *)
let (x,y) = 1, 2 (* x = 1, y = 2 *)
type t = { label : int; foo : float }
let { label = x } = { label = 2; foo = 3.0 } (* x = 2 *)
let x::xs = 1 :: [] (* x = 1, xs = [] *)

変数がなければ束縛は起こらない。
let true = 3 > 2 (* no binding *)

パターンの定数と、右辺の結果に齟齬があるばあい、パターンマッチは失敗する:
let (false, true) = 3 > 2, 2 > 0 (* match failure *)

let () = print_string "..."

最後の式は右辺の結果を () にパターンマッチさせているが、() の型 unit には
() しか値がないから、マッチは必ず成功する。なので、コンパイラはわざわざこの
マッチを行うようなコードは生成しない。結果、この式は、右辺を実行するだけ。


871 名前: mailto:sage [2009/02/24(火) 15:51:06 ]
>>870
Ocamlにパターンマッチがあるのは知ってましたが、これがそうだとは気づきませんでした。
詳しくありがとうございました。

872 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 19:37:03 ]
let main = print_string "Hello, world!\n"
とかの方がわかりやすいと思うけどなあ。俺はこっち(let main = ...)を使っている。
let () = ... ってなんでこうするんだろ。何かメリットあるのかな?

何にせよ右側の式が評価されることにはかわらないからどっちでもよいとは思うが。

873 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 19:46:51 ]
>>872
だって、将来使わないものをわざわざ定義したら、後で読み返したときややこしくなるじゃん。



874 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 21:34:47 ]
オブジェクト指向言語の良い所は変数やメソッドの名前が分かり易い事だと思うんだけど、
関数型言語の良い所は名前をイチイチ考えなくて良い事だよね。

875 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 21:44:44 ]
いやちゃんと考えろよ…意味を表す名前を

876 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 22:02:32 ]
いや本当に必要な時は考えてるよ…関数型言語だとそれが少ないだけで

877 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 23:06:58 ]
関数型言語ML 最終話 「なまえをよんで」

878 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 09:30:13 ]
>>873
名前を付けたくないなら、普通 let _ = ... じゃね?


879 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 14:04:44 ]
我が輩は関数である。名前はまだ無い。
どこで生まれたかとんと見当がつかぬ。何でも薄暗いじめじめした所で他の関数に渡された事だけは記憶している。

880 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 14:08:47 ]
そうだな。let ()だと、右辺がunitを返す場合しか使えない

881 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 20:51:42 ]
本当はちゃんと意味を表す名前をつけるべきなんだろうけど、
関数型言語でそれをやると馬鹿にされそうで、ためらってしまうな

882 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 21:32:47 ]
>>880
unitを返すのが分かるなんて 何て素敵な!

883 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 09:44:11 ]
>>880
>>882 の通りで、

let _ = Printf.printf "%d %d" 1

のようなコードを書いて、先生、何も起こらないんですが、と聞かれたことがある。
そりゃ見た目何も起こりませんがな。




884 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 12:06:10 ]
let main = ...
let _ = ...

の場合、副作用がなく返り値に意味がある別の関数を誤って呼んでしまうミスを見つけづらい。
たとえば ioaccess_in : ... -> int と ioaccess_out : ... -> unit が定義されているとして

let _ = io_access_out ...
let c = io_access_in ...
let _ = io_access_out ...
let _ = io_access_out ...
let c = io_access_in ...
let _ = io_access_in ...
let _ = io_access_out ...
let _ = io_access_out ...
let c = io_access_in ...
let _ = io_access_out ...
let _ = io_access_out ...
let c = io_access_in ...
let _ = io_access_out ...

のようなコードのバグ。

let () = ...

なら、そのミスも型検査で検出できる。


885 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 09:11:08 ]
あるある

886 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 20:32:14 ]
ここ
alain.frisch.fr/soft.html#patches
の patch_record が凄く魅力的なんだけど、同じことを camlp4 で
できないかな。

887 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 17:52:22 ]
型に unaware な camlp4 では全く同じ事は無理です
local open を使うか、
module alias でも使って文字数を減らすぐらいかなぁ

fun r ->
open Very_long_module_and_I_do_not_want_to_type in
r.x

fun r ->
let module M = Very_long_module_and_I_do_not_want_to_type in
r.M.x


888 名前:デフォルトの名無しさん [2009/04/08(水) 15:10:44 ]
>>879
コピペだけど

【手続き型】

吾輩は猫である。
名前はまだ無い。
どこで生れたかとんと見当がつかぬ。
何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。
吾輩はここで始めて人間というものを見た。

【関数型】

人間というものを始めて見た薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶しているがどこで生まれたかとんと見当がつかず名前がまだ無い猫である吾輩。


889 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 19:53:44 ]
時間が経過すると…

【手続き型】

吾輩は猫である。
親ゆずりの無鉄砲で子供の頃から損ばかりしている。
「おい、地獄さ行ぐんだで!」
ウスウスと目を覚ました時、蜜蜂の唸るような音は、まだ、その弾力の深い余韻を、私の耳の穴の中にハッキリと引き残していた。
国境の長いトンネルを抜けると雪国であった。
名前はまだない。

890 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 16:10:18 ]
…………ブウウ懼懼懼懼懼懼ンンン懼懼懼懼懼懼ンンンン………………。


891 名前:デフォルトの名無しさん [2009/04/09(木) 19:16:00 ]
CMの使い方を教えてください。
SML/NJで、use文のカスケードではロードが厳しくなってきたので、
CMに移行しようとしているのですが、以下の点で困っています。


(1) 対話型環境を使って計算したい。そのため、トップレベルに関数を
展開したいが、.cmにはトップレベル関数・値を書けない。
 今のところ、open XXX; がならんだ .smlを作って、これをuseしている。

(2) 中置演算子の割り当てをトップレベルに置きたい
 目的は、(1)と同じ。こちらは、実現方法が見つからない。


892 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 17:14:43 ]
float は boxing して扱われ、気合の入った最適化をしているわけでもないっぽい OCaml が
レイトレースのベンチマークで C++ と勝負できる位置にいるのはなんで?

893 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 20:17:02 ]
>>892
関数型言語は手続き型言語より最適化しやすいよ

関数型は中間表現で CPS 使ってる奴が多いから、 気合いが入って
なくても SSA 使ってる手続き型言語程度のコードは吐き出しそうな
気がする

fortran を除くと、手続き型言語のコンパイラの内部表現に SSA を
使うのが一般的になったのは、わりと最近じゃなかったっけ?

gcc だと 4 系列から SSA だっけか?




894 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 20:46:10 ]
とりあえずF#からいじり始めてる新参者なんですが、immutableなデータの取り扱い教えてくんなまし
immutableにするとMapReduceみたいにナイスに並列化も出来てクールだぜというのはわかったんですが、その結果とかで何処かにステートのチェンジが起きますよね?
Haskellのゲームかなんかでキャラの移動とかされた結果のそのシーンの状態を新しいWorldとして作っていくことでimmutableを維持してるとか言ってたんですが、業務アプリとかだと同なるんざんしょ。
別の記事か何かで、全体のデータ構造をobject-oriented西といて、その間の処理とかをfunctionalにするのが現実的だとかも言ってたんですが。
教えてエロイ人

895 名前:デフォルトの名無しさん [2009/04/29(水) 00:17:23 ]
smlって実行結果が長いとき#で省略されちゃいますよね?あれを最後まで表示
させたいときって、どうすればいいんですか?printの引数はstring型でsring
にするにはInt.toString(a)などとすればできますが、intとchar型くらいしかできませんよね?
新しくつくった型には使えないのでどうすればよいかわからなくて・・・
誰か教えて下さい。

896 名前:デフォルトの名無しさん [2009/04/29(水) 07:05:49 ]
別にデータをimmutableにするのにゲームも業務アプリも変わんないんじゃん

897 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 09:25:16 ]
データ毎回全部作り直すの?

898 名前:デフォルトの名無しさん [2009/04/29(水) 22:16:45 ]
そうしてもいいけど、、、
普通は関数的なデータ構造では更新後と更新前が「ある程度共有される」。
たとえばリスト構造の先頭のほうを作り直す場合とかそうでしょ。
なおかつ共有されちゃっててもこまらないのはデータがimmutableだからこそだともいえる。
そしていろいろなデータ構造でimmutableでありながらも空間効率や時間効率のいいアルゴリズムが開発されてる。
Haskellのゲームかなんかで云々っていうのもデータを毎回全部作り直すという話じゃないと思うよ。

899 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 20:03:46 ]
「プログラミングの基礎」浅井健一という本は、
他の言語経験が無くOCamlがわからない人でもついていけますか?

900 名前:デフォルトの名無しさん [2009/05/01(金) 20:24:05 ]
>>899 どのように考えながらプログラミングをしていくかが丁寧に書いてあるのでお勧めです。
もう少し高度な機能が知りたくなったら「プログラミング in OCaml」。

901 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 01:25:00 ]
>>895
ぱっと思いついたのは、print関数自作かSMLFormat使う

902 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 19:04:23 ]
質問です

ML系またはHaskell系言語でGUI開発に便利なRAD環境が充実している言語って何でしょうか?
できれば個人的なお勧め開発環境も教えていただければうれしいです。

903 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 19:22:56 ]
VBに匹敵するようなものはないなぁ



904 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 19:37:35 ]
F#でよくね?

905 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 22:12:06 ]
OCaml にありそうな気がす

906 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 22:30:47 ]
ここまでGUIプログラムを開発した人なし

907 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 11:28:08 ]
LablGtk の glade インターフェースを 5 年前に使ったけど、まあ、glade だったよ。


908 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 14:22:49 ]
GUIイラネ

909 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 15:00:29 ]
>>908
で?

910 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 15:01:42 ]
別にGUIイランやつはイランで結構だろ。
誰も強制なんかしてないんだし。
ここでそんなこと表明する意味がわからん。

911 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 16:25:14 ]
GUIイラネの人じゃないけど、言語処理系をパッケージシステムで
インストールするとき、最近はGUIツールキットまで一緒に入れようと
するのが結構あってうざいんだよね。幸いML関連でそういうのにあたった
ことはないけど、こないだMacPortsでSWI-PrologとErlangを入れたら
いろいろ勝手に入って来て大変だった。オプションでも外せないし。
将来lablgtkなんかを強制されるようになったらOCaml捨てたくなる。

こっちは今後もコマンドラインだけでひっそり生きていきたいんだから
ほっといてほしい。

912 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 16:42:41 ]
そんなもん、自分でコンパイルすりゃ良いんじゃねーの?

GUI無きゃないで、
「今時、言語側でdefaultでGUIぐらいつけろ。」
とか言う人出そうだし。

オメーン所の、パッケージ作成者に言うことだろうが。


913 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 16:50:45 ]
デフォルトでついていても使わなきゃいいだけの話。
もしデフォルトで付いていればインストールの手間もなくなるし、
公式お墨付きということでヒューマンインターフェースが共通化されて利用者にとって便利になる。
どうしてもそれに不満があれば別のライブラリをインストールすればいいだけのことだし。
言語にGUIライブラリがくっついていたら何が不満なのかわからん。
容量にしてもインストール時間にしても対して違わない。
処理系を自前でコンパイルしてるやつは多少コンパイル時間が長くなるが、些細な問題だよな。



914 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 17:53:25 ]
>>913
たとえば、SWI-Prologのインストールで入ったライブラリのために、
別の言語のインストールでエラーになるということはあるよ。

915 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 17:56:07 ]
ディスク容量が限られてる環境なので、依存するライブラリをあれこれ
入れられるとうっとおしい、とか、サーバサイドアプリで、サーバには
あれこれ入れたくないとか、パッケージ管理システムがバイナリベース
じゃなくてゴリゴリコンパイルするのでやってられない、とか。

(パッケージのメンテナが)簡単に分離できるような構成にしておいて
ほしい、という要望はありなんじゃないか?

916 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 18:10:00 ]
つGentoo

917 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 18:20:41 ]
>>911
MacPortsならパッケージ作成者がGUI無しのvariantsを用意すればいいだけの
話だよな。それが嫌だったらパッチ書いて送るしかないだろ。

918 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 18:21:16 ]
>>915
> (パッケージのメンテナが)簡単に分離できるような構成にしておいて
> ほしい、という要望はありなんじゃないか?
それはアリだな

919 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 18:28:08 ]
似たような文句のある人っているんだね。
X関連をいろいろ入れろと要求するのは勘弁してほしいよね。
あくまで言語を入れたいんだからGUIはあくまでオプションにしていてほしい。
こっちはGnomeみたいなリッチなデスクトップじゃなくてまだtwmなんだよ。

920 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 19:12:50 ]
>>919
twmって割と重くて使いにくいと思ってたんだがまだ使ってる人いたんだww
みんなawesomeとかfluxboxとかに移行しちゃったと思ってた。



921 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 19:24:48 ]
基本的にUIに興味ないもんでいろいろ試すのが面倒で。
言語は片っ端から使ってみているのだけど。

# 言語もある意味UIの一種だというツッコミを受けそうだ :-)

922 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 19:39:25 ]
コンピュータを何につかってんの?
どうせ論文にもならないような研究ごっこやって妄想して遊んでるだけだろ。

923 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 21:38:30 ]
たぶん>>921さんみたいな人はWindows(メイン)ともう一台(実験用)みたいな構成だと予想。



924 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 21:44:55 ]
まぁ2chよりでくだらない煽りを書いてるよりは有意義なことかと

925 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 22:25:07 ]
>>922
俺は自宅で10台ぐらいのクラスタで論文にできる研究やってるよ

926 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 22:27:37 ]
ただ並列化して測定しました、という類の論文は勘弁してくれ

査読するたびにうんざりする

927 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 22:35:02 ]
>>925
InfiniBandか10GbEか分からんけど、電気代凄そうだな

928 名前:925 mailto:sage [2009/05/11(月) 22:44:36 ]
>>926
そんなどこかの高校生じゃあるまいしw

929 名前:925 mailto:sage [2009/05/11(月) 22:48:01 ]
>>926
頼まれたこともないくせにw

930 名前:925 mailto:sage [2009/05/11(月) 22:49:09 ]
>>927
家庭用だぜ?
1GbEに決まってるだろ

931 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 22:58:29 ]
これは推して知るべしだな

932 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 00:46:29 ]
10台ぽっちでクラスタって…

933 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 12:42:55 ]
>>911
macports使ってるけど、Xがからまないと確かに気楽だなあ。
macportsだったら、swi-prolog-liteがおすすめ。



934 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 13:12:16 ]
関数型言語の話題になっていない件について。


ライブラリが豊富なのが魅力で最近やっとSML/NJからOCamlに移行したんだが、
SMLで書いたコードを書き換えるのが結構面倒。
文法的にもOCamlって面倒臭く感じるんだけど、単なる慣れの問題?

935 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 13:20:43 ]
let fun や let val とか tuple には必ず括弧を書いていた癖に、
何が面倒なのかわからんが、camlp5 には pa_sml があるのでそれを使ってみ?



936 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 14:15:41 ]
再帰関数の定義がlet recだったり関数引数のパターンマッチングを
let funcName = function ... | ... のように書くのが面倒に思えたんで。
確かにSMLにも冗長な部分はあるし、慣れだとは思うんだが。

何らかのトランスレータはあると思っていたのだが、camlp5なんて便利なものが
あったとは。2000行程のSMLコードをうまく変換出来たよ。どうもありがとう。

937 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 14:50:17 ]
>>932
どうでもいいけど、計算そのものの研究ならクラスタであれば台数は関係ないのでは?

938 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 16:03:34 ]
>>936
ホントに変換できたんだ!知らずに教えといてすまんが、使ったことなかったんで。


939 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 16:45:46 ]
>>938
camlp5 pa_sml.cmo pr_o.cmo -impl MyModule.sml
で変換できた。printをprint_stringに置換する必要はあったけど。
まじで助かった。

940 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 17:41:59 ]
それはよござんした


941 名前:デフォルトの名無しさん [2009/05/12(火) 23:47:13 ]
関数型言語って、常微分方程式の初期値問題の数値解を求めたりするのには向いてますか?
科学技術計算を中心にした関数型言語の入門書でなにかいいのありますか?

942 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 00:31:28 ]
f# for scientists

943 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 14:36:30 ]
>>925
なぜ自宅で?
まともな研究じゃないな



944 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 14:37:24 ]
粘着乙


945 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 14:38:10 ]
>>944
早ッ!!

946 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 14:39:01 ]
>>942
Harrop の本なんか読むなよ、頼むから。


947 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 14:57:42 ]
>>943
大学にいる人間じゃないから、そういう研究は自宅でしかできないんだよ。

948 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 22:16:09 ]
>>946
その著者が書いた唯一の本のようだが。

949 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 22:52:58 ]
>>947
計算機科学の研究は分野によってはPC1台でも十分に出来るのが良い所。
ぜひ成果を出して論文投稿してくれ。

950 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 22:56:19 ]
成果が出なくても rm するだけというのも良い所。

951 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 08:42:20 ]
>>948
その著者が書いたSpamは山程ある。


952 名前:デフォルトの名無しさん [2009/05/14(木) 22:02:27 ]
うまいこといいやがって

953 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 19:01:26 ]
>>946 >>951
kwsk



954 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 09:43:34 ]
john harrop troll でググレカス


955 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 14:26:16 ]
John Harropってtrollすぎてワロタ






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<224KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef