関数型言語ML(SML, OCaml, etc.), Part 5
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
2007/08/05(日) 14:49:54MLは、確固とした理論的背景を持つ言語でありながら、
現実的なソフトの開発にも使用できる実用性を備えた言語です。
また、プログラミングの初心者が最初に学習する言語としても優れています。
総本山
Standard ML http://www.smlnj.org/
Objective Caml http://caml.inria.fr/ocaml/
前スレ
関数型言語ML(SML, OCaml, etc.), Part 4
http://pc11.2ch.net/test/read.cgi/tech/1133003340/
0002デフォルトの名無しさん
2007/08/05(日) 14:50:33http://lang.x0.com/func/ml/
■チュートリアル
Standard ML
http://www-2.cs.cmu.edu/afs/cs/usr/rwh/public/www/introsml/
http://www.dcs.napier.ac.uk/course-notes/sml/manual.html
http://www.dcs.ed.ac.uk/home/stg/NOTES/
http://yk.i.hosei.ac.jp/smlbook/smlbook.pdf
http://www.summa.jp/tutorial/plain/mlkouza.txt
Objective Caml
http://www.csc.vill.edu/~dmatusze/resources/ocaml/ocaml.html
http://www.sato.kuis.kyoto-u.ac.jp/~igarashi/class/isle4/mltext/ocaml.html
http://www.biocaml.org/~bannai/ocaml-intro/
http://www.ocaml.jp/archive/document/
■過去スレ
関数型言語ML(SML, OCaml, etc.), Part 4
http://pc11.2ch.net/test/read.cgi/tech/1133003340/
関数型言語ML(SML, OCaml, etc.), Part 3
http://pc8.2ch.net/test/read.cgi/tech/1103606223/
let t = 関数型プログラミング言語ML 2
http://pc5.2ch.net/test/read.cgi/tech/1058630709/
関数型プログラミング言語ML
http://pc5.2ch.net/tech/kako/1012/10124/1012445015.html
ML!!!!!!
http://pc.2ch.net/tech/kako/1002/10021/1002111468.html
0003デフォルトの名無しさん
2007/08/06(月) 02:14:50このまま消滅かと思ったぜ
0004デフォルトの名無しさん
2007/08/09(木) 22:55:070005デフォルトの名無しさん
2007/08/09(木) 23:08:492chなんか見ずに、そっちで発言するだろう。
0006デフォルトの名無しさん
2007/08/09(木) 23:09:33落ちたのは 1000 行ったからだよ
住人が少ない訳じゃないと思う
0007デフォルトの名無しさん
2007/08/14(火) 09:24:590008デフォルトの名無しさん
2007/08/14(火) 09:39:03List.rev (List.tail (List.rev list))
でいいのかな
0009デフォルトの名無しさん
2007/08/14(火) 10:00:420010デフォルトの名無しさん
2007/08/14(火) 11:12:38[1; 2; 3] から [1; 2] をとりたいんだ
0011デフォルトの名無しさん
2007/08/14(火) 18:15:08let cut_tail list =
let r = List.rev list in
match r with
| [] -> []
| _::y -> List.rev y
こんな感じ?
0012デフォルトの名無しさん
2007/08/14(火) 18:17:33>>8だった
0013デフォルトの名無しさん
2007/08/14(火) 18:46:51これもありじゃね?と思ったけどopen ExtListしないとList.takeが使えないという罠が。
0014デフォルトの名無しさん
2007/08/14(火) 18:59:250015デフォルトの名無しさん
2007/08/14(火) 19:37:570016デフォルトの名無しさん
2007/08/14(火) 20:16:37cut_tail([A],[]).
cut_tail([A|R1],[A|R2]) :- cut_tail(R1,R2).
0017デフォルトの名無しさん
2007/08/14(火) 22:00:39let rec loop acc = function
x::[] -> List.rev acc
| x::xs -> loop (x::acc) xs
| _ -> failwith "error"
in
loop [] lst;;
0018デフォルトの名無しさん
2007/08/16(木) 14:43:29ttp://wwwfun.kurims.kyoto-u.ac.jp/images/Lambda2.gif
0019デフォルトの名無しさん
2007/08/16(木) 14:59:470020デフォルトの名無しさん
2007/09/09(日) 09:54:150021デフォルトの名無しさん
2007/09/13(木) 07:07:52アレゲ系の人もOCaml触らないし、というか最近Haskellの記事もあんまり見かけない気がしなくもない。
ブーム下火?
やっぱり研究者のおもちゃなの?
ビミョーに流行のScalaって明示的に型を書かなきゃなので嫌いなんだけど
あそこまでしてオブジェクト指向する必要ってあるのか
もちろんJavaとの相互運用性に優れてるのは分かるが
0022デフォルトの名無しさん
2007/09/16(日) 14:45:13多倍長整数はあるのに…
0023デフォルトの名無しさん
2007/09/22(土) 11:59:23# let ($+) f g x =
match g x with
None -> None
| Some x' -> f x';;
val ( $+ ) : ('a -> 'b option) -> ('c -> 'a option) -> 'c -> 'b option =
<fun>
# let down i =
if i < 10 then None
else Some (i - 1);;
val down : int -> int option = <fun>
# (down $+ down $+ down $+ down) 12;;
- : int option = None
#
一旦Noneになったらその後の処理が実行されないなんて、なんかmaybeモナドっぽくね?
# だから?って言われりゃそれまでだけどサ。
0024デフォルトの名無しさん
2007/09/25(火) 21:37:29http://cothreads.sourceforge.net/
0025デフォルトの名無しさん
2007/09/27(木) 11:50:090026デフォルトの名無しさん
2007/09/27(木) 13:04:40でもプロシージャではありません、とでもいっておく。
0027デフォルトの名無しさん
2007/10/01(月) 02:47:24λって言葉に対する、引っかかりがなくなったというか
λって言葉に対して、意味を求めなくなった。
>λってなに?
ギリシャ文字を記号として使っている。
何を表す記号かというと、次の人が答えてくれる。
(私が、頓珍漢な事を書いてるのでなければ)
0028デフォルトの名無しさん
2007/10/01(月) 07:53:20あれで今日の日付を取得すると、月がまだ9月なんだよね
だれか英語で切る人、報告してやってくれないか
俺は無理
0029デフォルトの名無しさん
2007/10/01(月) 07:56:240030デフォルトの名無しさん
2007/10/05(金) 15:43:24其の1 ローカルモジュール
#let module A = struct let add x = x + 1 end in A.add 3;;
- : int = 4
其の2 開いて閉じる
#type t = [ `A of int | `B of bool];;
type t = [ `A of int | `B of bool ]
# type u = private [< t > `A];;
type u = private [< t > `A ]
private row応用範囲広すぎ。
0031デフォルトの名無しさん
2007/10/06(土) 16:01:07let f = function `A -> () | `B -> ();;
let g = function `C -> () | `D -> ();;
があったときに、これら2つを使って、「パターンマッチを使わず」に
h : [<`A|`B|`C|`D] -> ()
を合成する方法はありますか?
めっちゃ頭を絞ったんですが分からないのです。
何がやりたいのかというと、polymorphic variantを引数に取る任意の2つの関数を、
うまいこと合成したいのです。
003231
2007/10/06(土) 16:07:01そのような関数の型はどうなるのかを考えるために、ためしに、
let comp : (('a -> unit) -> (g:'b->unit) -> (['a|'b] -> unit)) = ();;
というのを考えてみましたが、['a|'b] のところで、
The type 'a is not a polymorphic variant type
と怒られてしまいます…
>>30みたいなことができたら良かったんですけどね。
0033デフォルトの名無しさん
2007/10/06(土) 17:36:35その時の結論は結局「無理」。fやgの引数に取る多相バリアントが閉じてなければ、
#let ($+) f g x =
try g x with Match_failure -> f x;;
val ( $+ ) : ('a -> 'b) -> ('a -> 'b) -> 'a -> 'b = <fun>
#f $+ g;;
- : _[> `A | `B | `C | `D ] -> unit = <fun>
で合成できるけど、せっかくの型安全が台無し。
えらいひと回答plz.
003431
2007/10/07(日) 00:33:08あの後、似たようなことをやろうとしてダメだったんですが、よく考えたら[<`A|`B]->unitのようにclosedになってた気がします。
ただおっしゃる通り、f $+ gに`A..`D以外のバリアントが来た時に、g側がMatch_failureを投げてくれる関数でないとfが動いてくれないし、
f側はf側で想定外のバリアントをどうハンドリングするのかが問題っすね。
curry-howard的には、
((AまたはBならばX) かつ (CまたはDならばX)) ならば ((Aまたは...またはD) ならば X)
なので、そういう関数があっても良さそうなもんですが、
問題が多相バリアントなのでよくわからんです。
助けてえらいひと…
0035デフォルトの名無しさん
2007/10/07(日) 02:05:42其の1を上手く使った例としてp4ckのpa_openinを挙げておく。
便利。
0036デフォルトの名無しさん
2007/10/07(日) 04:51:570037デフォルトの名無しさん
2007/10/11(木) 00:01:52ttp://itpro.nikkeibp.co.jp/article/COLUMN/20071005/283903/?ST=develop
連載も既に15回を数え、そろそろ仕事方面に走り出している件について。
0038デフォルトの名無しさん
2007/10/11(木) 02:17:37何が固定か浮動かっていうと小数点がだよね。
0039デフォルトの名無しさん
2007/10/11(木) 02:26:10あっ、文章を書いてるんだっけw
0040デフォルトの名無しさん
2007/10/11(木) 11:13:42これのどこが「数理科学的バグ撲滅方法論」なの?
0041デフォルトの名無しさん
2007/10/12(金) 02:24:58ttp://groups.google.com/group/fa.caml/browse_thread/thread/eeb092296dc09468/b088e1f1c3db1b45
あのJane Streetが東京オフィスでOCamlハッカーを募集している!10月3日のメールだ!
我こそはという人材はいまがチャンスだ!!
(あぁ、私がもう10才若ければ……)
0042デフォルトの名無しさん
2007/10/12(金) 23:01:480043デフォルトの名無しさん
2007/10/14(日) 12:37:47開発環境WideStudio/MWT
http://www.widestudio.org/ja/
C++, Java, Perl, Python, Rubyのほかに…
OCamlも使える(3.09-2以降)らしい。ちょっと驚き。
0044デフォルトの名無しさん
2007/10/14(日) 21:35:570045デフォルトの名無しさん
2007/10/16(火) 00:47:520046デフォルトの名無しさん
2007/10/17(水) 01:56:40OCamlScripting
http://ocamlscripting.x9c.fr/
0047デフォルトの名無しさん
2007/10/17(水) 18:19:21いい加減うざい
使ってみたら〜だった、ぐらいまで踏み込んでるならまだしも。
0048デフォルトの名無しさん
2007/10/17(水) 21:49:42こういうハイレベルな人が「人こねえええ 」を招くんだろうね。
私は紹介だけでも十分うれしいですよ。
0049デフォルトの名無しさん
2007/10/17(水) 23:00:50別にバグを撲滅させようとしてるわけじゃない
研究さえできりゃそれでいいっていうスタンスだからな
0050デフォルトの名無しさん
2007/10/18(木) 13:02:16むしろそんなハイレベルな人が2chを見ていることに驚くわけだが
MLとかいちいち粘着に全部読んでないし。
0051デフォルトの名無しさん
2007/10/18(木) 13:06:300052デフォルトの名無しさん
2007/10/18(木) 20:09:230053デフォルトの名無しさん
2007/10/18(木) 22:44:110054デフォルトの名無しさん
2007/10/23(火) 18:35:260055デフォルトの名無しさん
2007/11/09(金) 19:36:460056デフォルトの名無しさん
2007/11/09(金) 19:38:070057デフォルトの名無しさん
2007/11/09(金) 23:30:30let f x=x in let f x=f x+1 in f 0
とかが書けてしまうので、OCamlのプログラムなので、let recと明示的に再帰していると言ってやらなきゃならんのでは。
Haskellだとこうはならんすよね
005855
2007/11/10(土) 02:37:55ちょっと取り乱しました
0059デフォルトの名無しさん
2007/11/11(日) 11:01:35その場合let recだと変だから、let outerくらいにすればよい(どうせほとんど使われない)。
0060デフォルトの名無しさん
2007/11/12(月) 22:53:050061デフォルトの名無しさん
2007/11/12(月) 23:46:56まぁOcaml派8割越えなんだろうけどな...
0062デフォルトの名無しさん
2007/11/13(火) 00:18:010063デフォルトの名無しさん
2007/11/13(火) 09:08:140064デフォルトの名無しさん
2007/11/13(火) 19:42:13何で日本の言語屋さんってハードウェアのトレンドを理解してないんだろう…
並列化は OS の仕事だとか言ってる人も居るし…
0065デフォルトの名無しさん
2007/11/13(火) 21:10:470066デフォルトの名無しさん
2007/11/13(火) 21:15:29それは実状と異なるからナンセンス。
0067デフォルトの名無しさん
2007/11/13(火) 22:57:16情報交換はOS屋の仕事だとか言ってる人も居るし…
0068デフォルトの名無しさん
2007/11/13(火) 23:06:280069デフォルトの名無しさん
2007/11/14(水) 02:35:21(およびC言語上に構築された動的言語(笑))
とUNIXから逃れられないのでした。完。
0070デフォルトの名無しさん
2007/11/14(水) 05:50:33http://eigenclass.org/hiki/wide-finder-conclusions
0071デフォルトの名無しさん
2007/11/22(木) 22:30:33ttp://itpro.nikkeibp.co.jp/article/NEWS/20071023/285185/
>「ML」という初期の関数型プログラミング言語をベースに,
>プログラミング言語「C#」や「Haskell」,リレーショナ
>ル・データベース操作技術「LINQ」の要素を含んでいる。
ITProよ。そこはどう譲ってもHaskellじゃなくて、OCamlだろっ!!
0072デフォルトの名無しさん
2007/11/22(木) 22:35:300073デフォルトの名無しさん
2007/11/23(金) 14:06:06頭古すぎw
0074デフォルトの名無しさん
2007/11/23(金) 14:32:03並列化は OS の仕事だというのが?
確かに時代錯誤的だよね
0075デフォルトの名無しさん
2007/11/23(金) 14:39:12トランスピュータ+オッカムとか、コネクションマシン2+C*/*Lispあたり。
求められているのはハードウェアにベッタリしすぎない抽象化されたモデル。
0076デフォルトの名無しさん
2007/11/23(金) 14:59:15抽象化自体は良いよ。ただ、ハードの資源を使い切れない様な抽象化では
意味が薄い。ハードの制約を無視した抽象化は単なる机上の空論だよね。
何年も前からトランジスタ数の増大に比較して CPU の性能が伸びない事、
CPU の速度向上に Memory が付いて来れない事が問題になっている。
現状としては業界を上げてマルチコア、メニーコア、ハードウェアマルチ
スレッディングに移行している。途中で VLIW みたいな寄り道もしたけど、
現在製造されているプロセッサの多くが既にマルチコアに意向済み。
そんな中で、いかにスレッドを簡単に扱えるか、スケーリングする GC を
実装出来るかは言語の設計と処理系の実装には結構重要なポイントで、
テーマとしては新規性はあまり無いかもしれないけど、逆に言えば本来
あって当たり前の機能なんだよね。自動並列化とか CAS とかも。
まあ最低限、ネイティブスレッドくらいは扱える様な処理系があると良いね。
0077デフォルトの名無しさん
2007/11/23(金) 15:05:21それから関数型言語と並列化の文献は山のようになるので、
英語でもちゃんと読んでやってください。
0078デフォルトの名無しさん
2007/11/23(金) 15:08:03それを馬鹿だという奴は現実が見えてないだけだよ。
並列化の研究が沢山あるのは知ってるよ。じゃあどれだけの
実装が残ったのかという話。
0079デフォルトの名無しさん
2007/11/23(金) 15:10:04スレッドが使いづらい方向に行くと思うぞ
0080デフォルトの名無しさん
2007/11/23(金) 15:10:48関数型言語はErlangなど残っている方。
0081デフォルトの名無しさん
2007/11/23(金) 15:14:30どちらかというとスレッドが無いとやってられない方向へ向かってる
0082デフォルトの名無しさん
2007/11/23(金) 15:18:450083デフォルトの名無しさん
2007/11/23(金) 15:24:090084デフォルトの名無しさん
2007/11/23(金) 15:33:41SML はダメッポス
0085デフォルトの名無しさん
2007/11/23(金) 16:14:000086デフォルトの名無しさん
2007/11/23(金) 16:18:31http://haskell.g.hatena.ne.jp/jmk/20061219/1166519293
元の処理系に並列化の基盤が無いと、
こういう実験にも使えないのよね
0087デフォルトの名無しさん
2007/11/23(金) 16:46:40008885
2007/11/23(金) 16:59:39008979
2007/11/23(金) 18:29:22性能/消費電力/発熱に苦しんでるからかも。
SMPコアには既に限界を感じてる。
ASMPコアで無駄な回路を減らせば、まだまだ上を狙える。
遅延評価・非同期実行(イベント同期)をナチュラルに行なえる言語だと
ハード・ソフトの両面からグッと最適化が効く。
スレッドはSMPと相性がいいかもしれんが、
でもASMPにはマッチしないと思う。
0090デフォルトの名無しさん
2007/11/23(金) 18:32:00って反対概念でもないよね?
0091デフォルトの名無しさん
2007/11/23(金) 18:39:20ASMP でも汎用コアが複数あったり、SMP と言っても特殊用途の
コプロ積んでたりするもんじゃないの?
どう転んでもスレッドの重要性は当分は覆らないと思うけどなあ。
0092デフォルトの名無しさん
2007/11/23(金) 22:38:05確かに。お互いに実現可能なものを持ってるしね。
スレッドはハード層にCPUとしての機能と性能を要求してくるけど、
本当にそんなに大げさな物が必要なのかなーって思ってる。
OS層にはマルチタスク要求があるからスレッドは有益だけどさ。
アプリ層でスレッドを使うときって、
・CPU複数使って速く処理する
・ブロッキング処理を非ブロッキング処理にする
こういうのを言語がサポートしてないからじゃない?
(ライブラリじゃなくて言語仕様ね)
それにスレッドっていうキーワードを使って作られたものって、
DSP,SIMD,コプロ等々の存在を無視する気がする。
┌─────────────┐
│ 関数 |
├───┐ |
| スレッド | |
├───┴─┬───────┤
| CPU |DSP,SIMD,コプロ|
└─────┴───────┘
言語にはネイティブスレッドを要求するより
こんなものの→(Scatter/Gather、Map/Reduce、遅延評価、イベント同期)
シームレスでポータビリティな仕様と、実装の最適化を要求して欲しい。
0093デフォルトの名無しさん
2007/11/23(金) 23:05:28結局 CPU 複数使って速く処理するにはスレッドが必要なんだぜ。
何でそんなにスレッドを嫌がるのかは知らんけど、現実には
コプロや SIMD があってもスレッドは必須だよ。
0094デフォルトの名無しさん
2007/11/23(金) 23:27:350095デフォルトの名無しさん
2007/11/23(金) 23:38:170096デフォルトの名無しさん
2007/11/24(土) 00:04:53違う。
手続き言語andスレッド によって速い処理を行おうとするから
複数のCPUを要求されている。
でもスレッドじゃ
DSP,SIMD,コプロ
この辺をうまく使っていけない。
極論だけど、関数言語がソフトウェアの主流なら
クロックを使わない論理回路で作ったチップにも需要が出るから
そういうのも作るもん。
0097デフォルトの名無しさん
2007/11/24(土) 00:15:20違うっていうけどさ、元々違う話をしてるんだから当たり前だよ。
俺は現実世界にある CPU をどう有効に使えるかにしか興味無いよ。
そしてその為にはスレッドを使うのが一番の近道。
それにスレッドと SIMD やコプロは排他的な存在じゃないから。
0098デフォルトの名無しさん
2007/11/24(土) 00:35:01>手続き言語andスレッドによって速い処理を行おうとするから
>複数のCPUを要求されている。
これは違うよな。プログラマはスレッドなんて別に使いたくない。
シングルコアで高性能の CPU が作れないっていうから、仕方なく
ソフトウェアを並列化してるだけ。DSP も一緒。
0099デフォルトの名無しさん
2007/11/24(土) 00:47:23データばらまいて、関数に突っ込んで、出力を集計すればいいじゃん。
ってこれはMap/Reduceだよな。
0100デフォルトの名無しさん
2007/11/24(土) 01:04:450101デフォルトの名無しさん
2007/11/24(土) 23:28:42│
├CPUシングルスレッド性能は打ち止めだからこれからはマルチスレッドスレッドだよ
│├マルチスレッドをどうにかするのは言語の仕事だよ
││├とりあえずスレッドとロックサポートすればいいよね (古典派)
││├ロックしないよ (モダン派)
││├プロセスは言語の基本だよ (並列言語派)
│││└おっぱい おっぱい (ぱい計算ってうまいの?)
││└マルチスレッドは実装屋の仕事だよ
││
│├マルチスレッドをどうにかするのはOSの仕事だよ
││├1つのプロセス中では並列度上がらないよ
││└小さいプロセスいっぱい作るよ (forkできればそれでいい派)
││
│├CPUごとに仮想マシン割り当てるから問題無いよ
││
│└コプロの命令もメインプロセッサの命令に見せかけるからやっぱスレッドだよ (Intel)
│
├マルチスレッドよりも大切なものがあるよ
│├SMPは限界。処理ごとに回路作るよ
│├高性能処理はベクタマシンだろ。常考 (ベクタ派)
││└GPUを計算に利用しようぜ (新ベクタ派)
│├他マシンとの通信こそ重要だよ (クラスタ派)
│└機械語レベルでなんとかなるよ (スーパースカラ派・コードモーフィング派)
│
└並列こそ計算の本質だよ。データフローマシン最高 (逐次処理は諸悪の根源だよ派)
0102デフォルトの名無しさん
2007/11/25(日) 00:13:280103デフォルトの名無しさん
2007/11/25(日) 14:48:340104デフォルトの名無しさん
2007/11/25(日) 20:21:120105デフォルトの名無しさん
2007/11/25(日) 20:24:02例えば fork を使うと良いアプリってどんなの?
0106デフォルトの名無しさん
2007/11/25(日) 20:28:36セキュリティを考えると、
同じプロセスで走らせたくない処理が多い。
0107デフォルトの名無しさん
2007/11/25(日) 20:45:54具体的にはどんなアプリを想定してるの?
0108デフォルトの名無しさん
2007/11/26(月) 11:28:12manticoreがあるでしょ > SML
>>101
> 言語はマルチスレッドをサポートすべき?
関数型言語の場合は、semanticsをどうするかが一番の論点で、
(関数型言語でなくていいことは、他の言語でやればいいし、実際行なわれている)
言語に並列処理能力を持たせるべきかどうかってのは、設問としておかしい。
持たせるとしたらどういう風なものがいいか、研究が行なわれ続けている。
0109デフォルトの名無しさん
2007/11/26(月) 12:02:18>関数型言語の場合は、semanticsをどうするかが一番の論点
そーそー、それそれ。
関数型言語にはそういう力があるんだから。
>>92の一番最後に書いたここの部分ね。
>シームレスでポータビリティな仕様
CがUNIXの力になって
LLがWebアプリの力になったように
関数型言語が並列処理分野の力になると思うんだけど。
今のスレの流れって
なんだかWebアプリの話をしてるときに
C実装レイヤーのことを話してるみたいな気がする。
0110デフォルトの名無しさん
2007/11/26(月) 12:04:09>関数型言語でなくていいことは、他の言語でやればいい
それはおかしいだろ。
例えばすごく関数型向きなアプリケーションを作ろうとしていて、
たまたま一ヶ所並列計算が必要だと分かったら、それだけで
関数型言語が選択肢から外れるってのは問題だと思わないか?
同じ論法で、汎用言語なら、良く使われる機構は一通りカバーしておくべき。
0111デフォルトの名無しさん
2007/11/26(月) 15:39:160112デフォルトの名無しさん
2007/11/26(月) 20:41:03そういうのは例え 2ch でもどうかと思うよ。
manticore ってこれか。まだ実装は公開されてないのね。
http://manticore.cs.uchicago.edu/
0113デフォルトの名無しさん
2007/11/26(月) 22:17:20それ、最初の方でoperaionalにSTMの意味を説明しているけど、
それはSTMの実装の一つを紹介している(ことになっている)だけで、
STMは必ずしもそういう実装になる必要はないので読む時には気をつけて。
TMはdatabaseやdistributed computingでよく使われるモデル。
並列処理抽象化のために、実装がいくつも考えられて、
モナド親和性の高いモデルを採用している。
0114デフォルトの名無しさん
2007/11/27(火) 14:11:410115デフォルトの名無しさん
2007/11/27(火) 20:54:51ちゃんと "Concurrent" に動くの?
0116デフォルトの名無しさん
2007/11/28(水) 08:03:00関数型言語っぽい面白いことができない。
CML→manticoreって人がいるね。
0117デフォルトの名無しさん
2007/11/28(水) 23:15:140118デフォルトの名無しさん
2007/11/28(水) 23:20:300119デフォルトの名無しさん
2007/11/28(水) 23:29:28coThreadライブラリ(http://cothreads.sourceforge.net/)は無視ですか、そうですか。
0120デフォルトの名無しさん
2007/11/30(金) 01:25:15と
入門OCaml ~プログラミング基礎と実践理解~
どっちがいい?
0121デフォルトの名無しさん
2007/11/30(金) 11:09:150122デフォルトの名無しさん
2007/12/01(土) 00:27:530123デフォルトの名無しさん
2007/12/01(土) 13:42:43昨日発売される本の即日レビューなんて 無茶いうな。
入門OCaml
必要なことは大体書いてあるので、基礎的なことは十分できるようになった。
短所としては、よくあることだけど、ちょっと複雑な機能を説明するときに
複雑な例で解説してる場所がある、とか。そのぶん実用例の確認にはいいんかな。
そういう部分は自分で簡単なもの作ってみて理解するしかない。
まだ勉強中だけどスレッドやらパーサやらCGIやらの使用例とかあるし
本格的に使うつもりなら買っといていいんじゃないっかな。
あとこの本が無ければSML#とか知らなかった。
0124デフォルトの名無しさん
2007/12/01(土) 16:26:550125デフォルトの名無しさん
2007/12/01(土) 17:36:49>CML→manticoreって人がいるね。
manticoreってもう使えるの?
0126デフォルトの名無しさん
2007/12/01(土) 20:45:42どちらかといえば、前者。
0127デフォルトの名無しさん
2007/12/02(日) 00:09:43>>116は研究者/開発者
0128デフォルトの名無しさん
2007/12/02(日) 01:04:45正直無駄にHaskell-STM風にモナド前提なのを何とかして欲しい。
0129デフォルトの名無しさん
2007/12/02(日) 08:05:450130デフォルトの名無しさん
2007/12/02(日) 12:32:54polyml.5.1/libpolyml/processes.cpp 内で pthread 関連の関数を
呼び出しているみたい
Poly/ML を使っている人はこのスレには居ないかな...
0131デフォルトの名無しさん
2007/12/02(日) 21:46:29自作のコードはStandard ML系の処理系のほとんどでひととおり動作チェックする。
0132130
2007/12/02(日) 22:23:23イメージベースの環境から、オブジェクトファイルを吐いて
実行ファイルを生成出来る様に変わっているし、スレッドは
カーネルスレッドをサポートしているし、FFI は C の構造体
を扱えるし、Intel Mac も Solaris もサポートしているし、
あと欲しいのは UNICODE のサポートくらい。
Standard ML 処理系では最強なんじゃないかな。
0133デフォルトの名無しさん
2007/12/03(月) 09:37:00ttp://sourceforge.net/project/showfiles.php?group_id=89802&package_id=106341
0134デフォルトの名無しさん
2007/12/06(木) 00:06:44Perl でいう CPAN みたいなのはありませんか?
0135デフォルトの名無しさん
2007/12/06(木) 08:34:330136デフォルトの名無しさん
2007/12/06(木) 09:02:460137デフォルトの名無しさん
2007/12/07(金) 12:11:14>http://yk.i.hosei.ac.jp/smlbook/smlbook.pdf
だいぶ今更かもしれないけど、これ無くなってしまっているね。
欲しい人は今のうちに Web Archive から頂いておいた方が良いかも。
0138デフォルトの名無しさん
2007/12/08(土) 02:59:37Cygwin 上で特に patch なしでビルドできてるけど。何ぞ問題が?
0139デフォルトの名無しさん
2007/12/08(土) 16:52:38"行頭の空白文字列を 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;
0140デフォルトの名無しさん
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;
0141デフォルトの名無しさん
2007/12/08(土) 21:30:26SML を勉強していて一番参考になった
http://www.geocities.jp/m_hiroi/func/index.html
http://sml.sourceforge.net/Basis/
0142デフォルトの名無しさん
2007/12/08(土) 23:42:59旧研究室サーバにあった。
http://133.25.16.150/smlbook/smlbook.pdf
0143デフォルトの名無しさん
2007/12/10(月) 00:42:45...正規表現のライブラリって無いのですか?
いくら静的型付けとはいえ、スクリプト系の言語に比べてかなり冗長で、
いまいちSMLを勉強する気にならないのですが...。
0144デフォルトの名無しさん
2007/12/10(月) 03:21:09みたいだけど、他もあるんじゃないかな。正規表現を使わなくとも
Vector で書いたらコード量は大分少なくなると思う。
まあそんな事は誰でも簡単に調べられる事だし、勉強する気にならない
のであれば他の事をした方が良いと思うよ。自由ってそういう事でしょ。
面白いと思ってすぐに手を動かせる人間が自分で色々探求して行く一方で、
そうじゃない人がいても別に誰も強制したりなんかしない。
そもそも >>139 は SML を勉強し始めて一日目の人間が書いたコード
だから参考にしない方が良いでしょう…
0145デフォルトの名無しさん
2007/12/10(月) 09:43:103行でおk
0146デフォルトの名無しさん
2007/12/10(月) 18:12:49俺の
コードに
文句言うな
0147デフォルトの名無しさん
2007/12/10(月) 21:34:29一日目でそれだけ書ければすごいよ。
0148デフォルトの名無しさん
2007/12/10(月) 22:13:043 行 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;
0149デフォルトの名無しさん
2007/12/12(水) 20:07:08('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
0150デフォルトの名無しさん
2007/12/13(木) 02:27:16メタランゲージなんだから、そのまま書き下した方がスッキリする。
0151デフォルトの名無しさん
2007/12/13(木) 08:08:580152デフォルトの名無しさん
2007/12/13(木) 08:45:20正規表現並にconciseな表現ができればね
0153デフォルトの名無しさん
2007/12/13(木) 08:58:430154デフォルトの名無しさん
2007/12/13(木) 17:18:34頭文字
=<>@^&+-*/$% どこでも大丈夫
| 二文字以上なら頭文字可
後続文字
~ 二文字以上なら頭文字にできるが、頭に使うと前置しかできなくなる。
! 頭文字にすると前置のみに。
.:? 後続文字のみ使用可
0155デフォルトの名無しさん
2007/12/15(土) 00:37:160156デフォルトの名無しさん
2007/12/15(土) 00:39:320157デフォルトの名無しさん
2007/12/17(月) 12:32:42みたいなのって標準ライブラリにある?
0158デフォルトの名無しさん
2007/12/17(月) 21:14:550159デフォルトの名無しさん
2007/12/18(火) 20:20:460160デフォルトの名無しさん
2007/12/22(土) 10:35:140161デフォルトの名無しさん
2007/12/22(土) 16:22:00finally かなり 例外に依存して生きているの
0162デフォルトの名無しさん
2007/12/22(土) 17:32:45また OCaml 限定の話かよとスルーしてたのに
0163デフォルトの名無しさん
2007/12/27(木) 23:00:37OCamlでは
('a -> 'a) -> 'a
という型のY-combinatorは定義出来ません。
HaskeiiはLazy evaluationなので、例で書いているように出来るのですが、
OCamlはEager evaluationなので、argumentをすぐに評価しようとするので、それをお書きになったような形で避けるとにコンビネータではなくなってしまいます。
これを避けるにはLazy モジュールを使用してナンチャッテ遅延評価で解決します。そうすればコンビネータとして扱うことが出来ます。
同様のことはモナドにも言えて、ナンチャッテ・モジュールを使用すると解決することがあります。
MLのYコンビネータの書き方はLittle MLerの巻末に書いてあるのでご覧下さい。
0164デフォルトの名無しさん
2007/12/28(金) 17:21:19factの実装方法を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
と返ってくる。
0165デフォルトの名無しさん
2007/12/28(金) 19:10:27スマリヤンの「ものまね鳥」だね。SKIコンビネータ入門にいいよね。
ほかにもJAYとかOWLとか出てきた希ガス。
0166デフォルトの名無しさん
2007/12/28(金) 21:22:48http://coq.inria.fr/
0167デフォルトの名無しさん
2007/12/28(金) 21:39:170168デフォルトの名無しさん
2007/12/29(土) 00:08:29Interactive Theorem Proving And Program Development
by Coq'art: The Calculus Of Inductive Constructions
これ系統の参考文献にこれもいいかも。
TAPL : Types and Programming Languages
0169デフォルトの名無しさん
2007/12/29(土) 00:24:27数理論理学とコンピュータ・プログラムの間には深い関連性がある。
A.近代論理学の開祖であるフレーゲの概念記法を出発点とするゲンツェンの自然演繹
B.チャーチの型付きラムダ計算
2つのモデルはカリー・ハワード対応によって同型として対応付けられる。
つまり、論理学の問題と言っているのは、実はコンピュータ・プログラムの問題と言っているのと同じなのだ。
QED.
0170デフォルトの名無しさん
2007/12/29(土) 00:51:12OCaml-Nagoyaの次の本はCoqだな。決定。
0171デフォルトの名無しさん
2007/12/29(土) 19:25:220172デフォルトの名無しさん
2007/12/30(日) 00:47:12うごくよ。
てかProofGeneralが亡くなってる。
0173デフォルトの名無しさん
2008/01/01(火) 02:06:59その同型になるのは、1階の述語論理のこと?
0174デフォルトの名無しさん
2008/01/01(火) 13:37:590175デフォルトの名無しさん
2008/01/01(火) 13:45:050176デフォルトの名無しさん
2008/01/01(火) 14:36:170177デフォルトの名無しさん
2008/01/01(火) 15:55:45どうしたいん?
0178デフォルトの名無しさん
2008/01/01(火) 16:07:39高階述語論理があれば、「∀f. --- 任意の関数 f について…」という扱いが可能になったり、「関数や述語に関する量化(∀∃)が可能な論理」を構成できる。
0179デフォルトの名無しさん
2008/01/01(火) 16:19:56しかし、依存型(dependent type)を導入するとこの制限が取り払われて、型が値を持てるようになります。
依存型は単純な型付きλ計算よりもはるかに強力で、うまく使えばリストの長さや配列の境界チェックなどさまざまに応用できます。
しかし強力さの一方で型チェックは複雑になり、一般の依存型では型チェックが停止しない場合もあります。
例えば、基本的には型の部分で計算ができるので、そこに無限ループするような項を入れておけば止まらなくなります。
Curry-Howard Isomorphism により、依存型は述語論理と等価な記述力を持つことになります。
したがって、依存型をつけたλ計算の体系を考えることで、論理式の証明を記述したり、その正しさを検査することが可能になるわけです。
OCAMLのCoq では、単純なλ計算ではなく帰納的に定義された型(Inductive types)を使えるように拡張した
Calculus of Inductive Construction というものに依存型を導入し、システムの根幹としています。
0180デフォルトの名無しさん
2008/01/01(火) 16:26:17直観主義論理,Matin-Loefの型理論、依存型算譜言語
の3つをプログラムの基礎として最低限おさえておけ。
0181デフォルトの名無しさん
2008/01/01(火) 17:11:130182デフォルトの名無しさん
2008/01/01(火) 17:37:52おとなしくシミロン嫁
0183デフォルトの名無しさん
2008/01/01(火) 17:40:000184デフォルトの名無しさん
2008/01/01(火) 17:41:400185デフォルトの名無しさん
2008/01/01(火) 17:47:24圏論による論理学―高階論理とトポス
清水 義夫
http://www.amazon.co.jp/o/ASIN/4130120573/
0186デフォルトの名無しさん
2008/01/01(火) 18:09:02シミロン読んでるんですが、高階論理をトポスに対応させて
いるところを Curry-Howard 同型と考えていいわけですか?
0187デフォルトの名無しさん
2008/01/01(火) 18:26:11まあそうなんだけど、関数に対応するものがトポスの射になってる。
普通の集合論では、「はじめに一者あり」である。存在論的な形になっていて、その一者(実は、空)から、すべての存在が生成される。
では、Mac Lane が指摘した、論理学ではどうなるか。
ところが関数型の場合、「はじめに働きあり」である。なんじゃそりゃ、と思うかもしれない。
普通の集合論では、関数は、集合の一種(つまり、グラフ)として定義される。
でもこちらは、逆に、関数から集合を定義しようということなのだ。
この関数概念を一般化したのがシミロンのトポスの射。
0188デフォルトの名無しさん
2008/01/01(火) 18:31:40彼はこの考えを、エタールコホモロジーのアイデアとともに得た。
0189デフォルトの名無しさん
2008/01/01(火) 18:34:39解説ありがとうございます。
ちょっと外出してきますのでまたのちほど。
すみませんです。
0190デフォルトの名無しさん
2008/01/01(火) 18:36:07Kripke-Joyalの意味論での手続きによって集合論的論理式をトポスの対象と射についての言明として解釈したもの。
0191デフォルトの名無しさん
2008/01/01(火) 18:47:05実数を定めるのに便利な集合論的定式化はやがて多くの数学者に受け入れられるようになったが、
20世紀初めに論理学者のブラウワーは直観主義とよばれる、具体的に構成できるようなものだけを認める論理の体系をつくった。
彼はそこで実数について通常の数学におけるものとは著しく異なった結論を導きだせることを示した。
これにはKripke-Joyalの層の意味論によって現代的な解釈が与えられる。
シミロンのやってることを実行するとこんな風に実数の扱いなどがもっとブラウワー的に出来るようになります。
0192デフォルトの名無しさん
2008/01/01(火) 18:49:58つづきは数学板で質問してください。
0193デフォルトの名無しさん
2008/01/01(火) 19:10:59元々、Visual Basic 2008 (以前のコード名は "Orcas") にλ式が追加されたのは 、LINQ (Language Integrated Queries) をサポートするためです。
これは、Visual Basic でのデータ プログラミングを可能にするものです。
λ式を使用すると、プログラムの柔軟性が向上することがわかります。
λ式は、関数内で定義される呼び出し可能なエンティティであり、何の制約もなく利用でき、
したがって、λ式を関数から返したり他の関数に渡したりできるからです。
λ計算(lambda calculus)は、理論計算機科学や数理論理学における、関数の定義と実行を抽象化した計算体系であるλ算法とも言う。
関数を文字λ)を使った式によって表記する。アロンゾ・チャーチとスティーヴン・コール・クリーネによって1930年代に考案されたものです。
1936年にチャーチはλ計算を用いて一階述語論理の決定可能性問題を否定的に解いた。
λ計算は「計算可能な関数」とはなにかを定義するために用いられることもある。
λ計算は1つの変換規則(変数置換)と1つの関数定義規則のみを持つ、最小の(ユニバーサルな)プログラミング言語であるということもできる。
ここでいう「ユニバーサルな」とは、全ての計算可能な関数が表現でき正しく評価されるという意味である。
これは、λ計算がチューリングマシンと等価な数理モデルであることを意味している。
チューリングマシンがハードウェア的なモデル化であるのに対し、λ計算はよりソフトウェア的なアプローチをとっている。
λ計算は計算の意味論や型理論など、計算機科学のいろいろなところで使われており、特にLisp、ML、Haskellといった関数型プログラミング言語の理論的基盤として、
その誕生に大きな役割を果たしたが、とうとうVisual Basicにまで搭載されたことで、今後、その重要性は益々増大するだろう。
0194デフォルトの名無しさん
2008/01/01(火) 20:43:42つまり、空集合から始まる現代集合論はもう
終わりの時代を迎えた、ということですか?
シミロンを読んでいて、ラムダ項もある種の
射に対応するのを知り目から鱗が落ちました。
0195デフォルトの名無しさん
2008/01/01(火) 21:53:13そうですね。数学板にいきます。
0196デフォルトの名無しさん
2008/01/02(水) 22:55:53Lisp ⇒ Scheme
Lisp ⇒ ML
┌―――┘
↓
ML ⇒ Miranda ⇒ Haskell ⇒ Erlang
ML ⇒ Miranda ⇒ Clean ⇒ Concurrent Clean
ML ⇒ SML
ML ⇒ CAML ⇒ OCAML ⇒ (そろそろこないかなぁ?)
0197デフォルトの名無しさん
2008/01/02(水) 23:38:370198デフォルトの名無しさん
2008/01/03(木) 04:13:52SMLをSmileって読んじゃうみたいに。でも頭の中はSMのことでいっぱい。
EclipseやElispをエロリスプとか。
0199デフォルトの名無しさん
2008/01/03(木) 14:03:05Haskell→Erlangはおかしいでしょ
0200デフォルトの名無しさん
2008/01/03(木) 14:18:110201デフォルトの名無しさん
2008/01/03(木) 23:11:56SMLer ⇒ 須村さん
Schemer ⇒ 隙間さん
0202デフォルトの名無しさん
2008/01/03(木) 23:27:490203デフォルトの名無しさん
2008/01/04(金) 01:21:28VB.NET化であれだけ振り回した後だともう既存のユーザの移行コストとか考えないでいい空気なんだろうか。
0204デフォルトの名無しさん
2008/01/04(金) 10:14:360205デフォルトの名無しさん
2008/01/04(金) 17:31:470206デフォルトの名無しさん
2008/01/04(金) 22:50:49OCAMLが完全に止まってるだけにちょっと気になる。
0207デフォルトの名無しさん
2008/01/05(土) 00:06:15これなんか面白そう
0208デフォルトの名無しさん
2008/01/05(土) 00:25:51Q言語って音響・映像に特化してるのかな?
これで作られた "Q+Faust+Pd" はかなり大規模な感じ。
関数型の特性を生かしてフィルターとかが多いみたいですね。
0209デフォルトの名無しさん
2008/01/05(土) 22:59:09言語そのものの出来より、MSが力入れるかどうかだな。
0210デフォルトの名無しさん
2008/01/06(日) 01:19:39現在のF#はfunctorが使えないからちょっとね。
でも今後のアップデートで何を追加するのかロードマップを示してくれると興味も湧くんだけどなぁ。
MSが力を入れてくれると期待したい。
0211デフォルトの名無しさん
2008/01/06(日) 23:46:06ここ見た感じだと結構ちがう言語に見える
yield とかあるんだね
0212デフォルトの名無しさん
2008/01/06(日) 23:58:10F#の記事ですね。
記者は手続き型でしか考えられない人かな?
forループ連発が意図的なのかよくわからなけど、あまり良い例じゃないなぁ。
0213デフォルトの名無しさん
2008/01/07(月) 00:15:51書いた人もFoundations of F#の人だし。
0214デフォルトの名無しさん
2008/01/07(月) 00:26:33for使うと再帰より速度が出るとか?
0215デフォルトの名無しさん
2008/01/12(土) 10:03:200216デフォルトの名無しさん
2008/01/12(土) 18:38:12何の?
0217デフォルトの名無しさん
2008/01/13(日) 02:37:14The 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.
0218デフォルトの名無しさん
2008/01/13(日) 21:53:45SML#のページにあるSMLFormatってcamlp4みたいなものなの?
説明見てもちょっと理解できなかったので…
サンプルも何か追加で入れないと動かないのもあるみたいなので使ったことある方とか居たら、どんなものか聞かせてください
0219デフォルトの名無しさん
2008/01/13(日) 22:32:400220デフォルトの名無しさん
2008/01/16(水) 21:14:36ttp://www.quanttec.com/fparsec/index.html
F#版STM
ttp://cs.hubfs.net/blogs/hell_is_other_languages/archive/2008/01/16/4565.aspx
0221デフォルトの名無しさん
2008/01/16(水) 22:41:000222デフォルトの名無しさん
2008/01/17(木) 08:21:320223デフォルトの名無しさん
2008/01/17(木) 23:14:490224デフォルトの名無しさん
2008/01/18(金) 00:08:30ExtList.List.init 100 ((+)1);;
結構タイプ量おおいな;;
0225デフォルトの名無しさん
2008/01/18(金) 00:27:11ListまでをopenしないのはOCaml流だと思ってあきらめるしかないけど。
0226218
2008/01/18(金) 22:06:57遅くなってごめんなさい
ありがとう
0227デフォルトの名無しさん
2008/01/21(月) 20:16:22遅くなったけど、ありがとう
ばっちり使わせてもらいます。
0228デフォルトの名無しさん
2008/01/22(火) 17:31:49VC++ expressインストールすればできますか?
0229デフォルトの名無しさん
2008/01/23(水) 08:10:530230デフォルトの名無しさん
2008/01/23(水) 23:43:03○ExtLib.List.init 10 ((+)1);;
×ExtLib.List.init 10 Random.int;;
説明では、Invalid_argが出るのは初期値(↑だと10)が負の時とあるけど、これってもしかしてバグ?
0231デフォルトの名無しさん
2008/01/23(水) 23:46:440232デフォルトの名無しさん
2008/01/24(木) 23:02:51ML系過疎り杉w
0233デフォルトの名無しさん
2008/01/24(木) 23:03:20Array.copyで新規作成されるのは一次元目の配列だけで、
二次元、三次元とかの値は前の値を差し続けてる。
まるごとコピーしたいときはその次元専用のcopyを作った方がいいみたい。
0234デフォルトの名無しさん
2008/01/25(金) 03:01:51masm32もVC++も入れたしmasmのINCLUDE、LIB、PATHも通したのに。
一応Visual StudioのVCのPATH入れたり
masm32のbinにcl.exeやmspdb80.dll入れてみたりしたけど駄目だった。
う〜ん、masmとVC++アンインストしようかしらw
0235デフォルトの名無しさん
2008/01/26(土) 00:34:240236デフォルトの名無しさん
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;;
0237デフォルトの名無しさん
2008/01/30(水) 12:59:31これが(print_random n)-1;と解釈されるからだな
print_random (n-1);とすればよろし
0238sage
2008/01/30(水) 14:49:02あれで便利便利って言って喜んでる奴はまだロクなもん書いてない
さらなるゴミ p4 のビルドで必要なのがさらにゴミ
ゴミのおかげで make world の時間がもったいない
0239デフォルトの名無しさん
2008/01/30(水) 17:18:38ありがとうございます〜〜〜
少しずつ型チェックってなんのかわかってきました.いろいろ書いてみます!
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)
);;
0240デフォルトの名無しさん
2008/02/02(土) 21:00:523日ぐらい挑んでいるのですが、わかりません。誰か助けて。
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", [])])])
入力の型と出力の型が違うのでわけわかりません
閉じタグとか考えてると、スコープが足りないです。
スコップをください。
0241デフォルトの名無しさん
2008/02/03(日) 00:21:39全然深く考えてないけど,スタック使えばいいんじゃないの?
0242デフォルトの名無しさん
2008/02/03(日) 10:32:25PCDATAは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 [] [[]]
0243デフォルトの名無しさん
2008/02/03(日) 22:14:54(Open tag)::xs1の箇所で、ひとつ先読みする再帰になるのかと思って
ずっと考えてたけど、全然違った・・
あと、ご指摘のとおりPCDATAはXLfのほうが良さそうですね
上のadd_childみたいな関数が必要になるかどうかの判断って
自分には職人技の世界に思えるんですが
一般的なやり方みたいなのあるんですかね。
とりあえず、上記を参考に自分でも書けるよう頑張ってみます。
0244デフォルトの名無しさん
2008/02/05(火) 23:51:48そういう人ってレコードを拡張したい時どうしているの?
0245デフォルトの名無しさん
2008/02/06(水) 00:19:050246デフォルトの名無しさん
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
0247デフォルトの名無しさん
2008/02/06(水) 02:49:12使い分けがあるのでしょうか?
0248デフォルトの名無しさん
2008/02/06(水) 21:32:35前者は名前の束縛を省略しただけで右式がどんな型になっても構わないけど、
後者は右式がunit型にならないとダメ。
どちらも print_string のような副作用が目的の式によく使うけど、
私は戻り値が要らないという意味で、let _ =...で統一している。
これだと let _ = Thread.create f () とかでも対応できる。
0249247
2008/02/06(水) 23:43:09ありがとうございます。
# let () = true;;
Characters 9-13:
let () = true;;
^^^^
This expression has type bool but is here used with type unit
やってみたら確かにそうです。
悩んでいたのでとても参考になります。
0250デフォルトの名無しさん
2008/02/07(木) 10:23:25let _ = は、 ignore @@ Unix.system "rm -rf hoge" とか
0251デフォルトの名無しさん
2008/02/07(木) 10:40:36GluMat.gluPerspective ~fovy:(45.0) ~aspect:(1.0) ~zNear:(0.1) ~zFar:(100.0)
って書いてもUnbound value GluMat.gluPerspectiveって言われてちゃう
http://wwwfun.kurims.kyoto-u.ac.jp/soft/lsl/lablgl.txt
http://www.opengl.org/sdk/docs/man/xhtml/gluPerspective.xml
を見て書いたのですがどこがいけないかわかりません>.<b
0252デフォルトの名無しさん
2008/02/07(木) 23:12:43まさかライブラリの指定を忘れてるなんて落ちはないよな。
ocamlc -I +lablGL lablgl.cma lablglut.cma ...
という感じでコンパイルしなきゃいけないはずだけど?
0254デフォルトの名無しさん
2008/02/08(金) 09:33:48大体原因がわかった
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
どっかに引数に関してマニュアルないわけ?
0255デフォルトの名無しさん
2008/02/09(土) 21:25:54.mli 見ろや:
val perspective : fovy:float -> aspect:float -> z:float * float -> unit
0256デフォルトの名無しさん
2008/02/14(木) 01:59:10while 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";
が実行されず、プログラムが停止して、動きません。
コンパイル時にエラーはありませんでした。
何がいけないのでしょうか?
0257デフォルトの名無しさん
2008/02/14(木) 06:49:29システムに関係なく 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 の本には書いてないのかな?
0258デフォルトの名無しさん
2008/02/14(木) 20:34:46ありがとうございます。
prerr_endlineを使用したところ、うまく動作するようになりました。
0259デフォルトの名無しさん
2008/02/15(金) 16:42:11Makefileにどう書けばいい?
0260デフォルトの名無しさん
2008/02/15(金) 17:01:35stublib のことなら ocaml のソースの otherlibs/graph などを参考に。
otherlibs/Makefile.shared を include してあるが、そこに大体書いてある。
0261259
2008/02/16(土) 16:35:26ごめん、説明不足だった。
OCamlで書かれたライブラリがあって、それを自分で書いたOCamlのコードから使いたいんだけど、
ライブラリの方がLGPLなのでできれば静的リンクしたくないんだ。
0262デフォルトの名無しさん
2008/02/16(土) 16:59:233.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.
0263259
2008/02/16(土) 17:31:46ありがとう!勉強になった。
調べてみたけど、例外事項は入ってないみたいだ。
ライブラリのメーリングリストを流し読みしたところ、
「オブジェクトファイルを添付すればいいだけなんだから別に問題なくね?」
という結論になった模様orz
まぁ実際そのとおりだから、そうすることにするよ。
0264デフォルトの名無しさん
2008/02/17(日) 01:27:40なんかつながんね
0265デフォルトの名無しさん
2008/02/17(日) 01:47:54繋がるよ?
0266デフォルトの名無しさん
2008/02/17(日) 01:59:310267デフォルトの名無しさん
2008/02/17(日) 08:56:080268デフォルトの名無しさん
2008/02/21(木) 12:11:08↓のように書いてみたのですがエラーになります。
型推論などまだよくわかってないのですが、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
0269デフォルトの名無しさん
2008/02/21(木) 21:42:05自分も勉強中だからはっきりとは言えないけどムリじゃないかな?
まず、n重のリストを関数に適用しようにも、
n=1のリストは'a list
n=2のリストは'a list list
n=3のリストは'a list list list
…ていう用にそれぞれ型が違うのでどんな入れ子リストにでも対応できる関数は書けない。
現実にそういうことがやりたいなら、バリアントとリストを組み合わせることになると思う。
0270デフォルトの名無しさん
2008/02/21(木) 21:51:43O'Caml の気持ちを代弁すると、
moredeeplen の型は多分 'a list list -> int だと思うんだが、
再帰的に呼ぶ際に moredeeplen tl の所で 'a list -> int という違う型で
使っている。なのでアウト。
普通は 268 が書きたいような、型を利用した再帰関数は ML の多相型では
書けませんな。
0271デフォルトの名無しさん
2008/02/21(木) 21:59:39Objective 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?).
はっ、初学者を混乱させるだけか...。
0272デフォルトの名無しさん
2008/02/22(金) 10:12:55その定義は常に 0 を返すのだが。
let rec len v = List.fold_left (fun s v -> s + (len v) + 1) 0 v;;
# len [[[];[]]; []];;
- : int = 4
面白いけど 268 がやりたいこととはちょっと違いますね。
0273268
2008/02/22(金) 11:03:06簡単にはできないということで先に進もうと思います。
0274デフォルトの名無しさん
2008/02/25(月) 01:03:08http://pc11.2ch.net/test/read.cgi/tech/1186030985/244n
0275デフォルトの名無しさん
2008/02/25(月) 23:31:52accumulator は後にするかなあ
複雑にならないなら fold とかで済ませたいと思っちゃうけど
0276デフォルトの名無しさん
2008/03/13(木) 01:59:47http://itpro.nikkeibp.co.jp/article/COLUMN/20070612/274231/
0277デフォルトの名無しさん
2008/03/13(木) 02:33:33π-calculusは俺も勉強中なんだが、
この本が役に立つぜ
http://www.amazon.co.jp/Communicating-Mobile-Systems-Robin-Milner/dp/0521658691
質問ですが、
GUIライブラリが充実しているネイティブコンパイラ付きの関数型言語はありませんか?
HaskellもOCamlもこれといってまともなGUIライブラリが存在しないので・・・
0278デフォルトの名無しさん
2008/03/13(木) 03:02:360279デフォルトの名無しさん
2008/03/13(木) 09:13:480280デフォルトの名無しさん
2008/03/13(木) 10:02:42その間にGHCも6.4から6.8になってるわけで…。
久しぶりにSourceforgeのほう見てみたら
wxhaskell-0.10.3-rc1 ってのが出てた。
http://sourceforge.net/project/showfiles.php?group_id=73133
0281デフォルトの名無しさん
2008/03/13(木) 10:20:29http://wwwfun.kurims.kyoto-u.ac.jp/soft/olabl/lablgtk.html
0282デフォルトの名無しさん
2008/03/13(木) 11:18:21・グローバルなunit chan refを一個作る(qとする)
・yieldはqからのrecvとして実装
・トップレベルのプロセスを生成した後に、qにsendし続けるプロセスを生成
という感じでどうだろう
0283デフォルトの名無しさん
2008/03/18(火) 01:11:13うぅぅ入門 Ocaml 片手の私には動作がイメージできません・・・
recvしてもすぐsendされて別のに切り替わらないとかになりませんか?
とりあえず挑戦してみます。
0284デフォルトの名無しさん
2008/04/12(土) 21:49:11http://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以下だったそうだ。
---
0285デフォルトの名無しさん
2008/04/12(土) 23:05:220286デフォルトの名無しさん
2008/04/12(土) 23:50:300287デフォルトの名無しさん
2008/04/12(土) 23:54:05冒険してる会社もあるもんだな。
0288デフォルトの名無しさん
2008/04/13(日) 00:36:550289デフォルトの名無しさん
2008/04/13(日) 10:37:390なら0と書くか話題にも上らないかのどっちかだろう
0290デフォルトの名無しさん
2008/04/13(日) 10:56:58検索結果を加工した統計なので。
0291デフォルトの名無しさん
2008/04/20(日) 15:48:14Debian or Ubuntuなら、
# apt-get install coqide
でok
0292デフォルトの名無しさん
2008/04/20(日) 16:30:040293デフォルトの名無しさん
2008/04/23(水) 21:40:54どういうこと???
ここにきても全然わからん。
0294デフォルトの名無しさん
2008/04/23(水) 21:42:190295デフォルトの名無しさん
2008/04/23(水) 22:03:380296デフォルトの名無しさん
2008/04/24(木) 13:36:36# 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]
0297デフォルトの名無しさん
2008/04/24(木) 21:59:44関数の戻り値を次の関数へ放り込んだり、戻り値の一部だけ次の関数に放り込んで、残りをさらに次の関数に放り込んだりするのだ。
0298デフォルトの名無しさん
2008/04/24(木) 22:40:38ちょっと富豪的だが、ループは>>296のようなリストで置き換えると
最初は考えやすいと思う。
大雑把な説明だが
for(int i=1;i<=10;++i){printf("%d\n",i);}は
高階関数mapを使ってこう。
List.map print_endline (1 *.. 10)
0299デフォルトの名無しさん
2008/04/24(木) 23:05:540300デフォルトの名無しさん
2008/04/24(木) 23:39:180301デフォルトの名無しさん
2008/04/24(木) 23:49:18List.iter (fun x -> print_endline (string_of_int x)) (1 *.. 10)
0302デフォルトの名無しさん
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)} じゃないですかね?
0303デフォルトの名無しさん
2008/04/25(金) 21:29:32OCamlで「n秒待つ」関数みたいなのは、何ですか?
次のようなプログラムを書いています。
let rec loop count =
print_endline (print_int count);
(* ここで1秒待ちたい *)
loop (count + 1)
let main =
loop 0
0304デフォルトの名無しさん
2008/04/25(金) 21:41:380305デフォルトの名無しさん
2008/04/25(金) 22:00:51とりあえず正誤表にはなかったよ。もっかいコード見直したら?
ttp://www.sato.kuis.kyoto-u.ac.jp/~igarashi/OCaml/
0306デフォルトの名無しさん
2008/04/25(金) 22:23:27できました!
どうもありがとうございます!!
0307デフォルトの名無しさん
2008/04/26(土) 01:07:52ループは再帰のときに引数を変えれば良い。
して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;;
0308デフォルトの名無しさん
2008/04/27(日) 01:10:460309デフォルトの名無しさん
2008/04/27(日) 08:38:490310sakura
2008/04/27(日) 11:45:530311デフォルトの名無しさん
2008/04/28(月) 00:36:21誰がどう見ても誤植です。どうもありがとうございました。
0312デフォルトの名無しさん
2008/04/29(火) 16:34:33http://www.ps.uni-sb.de/hamlet/CHANGES.txt
SML#にも対応
ベンチマーク用のSML実装としての、あるべき姿か
誰ぞ、SML#をNJ、MLtonとベンチしてたもう
0313デフォルトの名無しさん
2008/05/03(土) 13:29:420314[Power of Scala]
2008/05/03(土) 16:42:43関数型言語Scalaの動画
ttp://d.hatena.ne.jp/video/youtube/SCl0pkrQn1A
0315デフォルトの名無しさん
2008/05/03(土) 18:03:03関数型言語というよりもオブジェクト指向型の印象が強い言語だな。
カリー化すら出来ないし、代数的データ型すらないじゃないか。
関数型言語の特徴というべき代表的な機能が欠如しているのは関数型言語として致命的。
だから、Scalaはオブジェクト指向型言語だ。
0316デフォルトの名無しさん
2008/05/03(土) 19:28:520317Objective Caml
2008/05/03(土) 20:11:11F#じゃないけど
OCamlの動画 - YouTube
ttp://www.youtube.com/watch?v=3A8lEraqGzQ
0318デフォルトの名無しさん
2008/05/04(日) 00:18:19F#って.NETのライブラリが使えるのと、オブジェクトが使えないの以外にどんな点がF#と違うの?
文法面はほぼ同じだと聞いたんだけど。
0319デフォルトの名無しさん
2008/05/04(日) 00:28:24MSの単なるデモンストレーションだから。
0320デフォルトの名無しさん
2008/05/04(日) 01:26:50データの型が.NET互換になってて、演算子がオーバーロードされる。
例えば +. 演算子はなくなってて実数の足し算でも + 演算子を使う。
クラスは.NETのクラスになるので、クラス定義まわりの文法にだいぶ変更がある。
0321デフォルトの名無しさん
2008/05/04(日) 23:20:06Extlibでもcoreでもいいから標準ライブラリに取り込んでくれないかなあ。
0322デフォルトの名無しさん
2008/05/05(月) 01:08:14いや、あるよ>カリー化&代数的データ型
単に紹介されてないだけ
0323デフォルトの名無しさん
2008/05/05(月) 01:13:40case 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の代数的データ型の定義に比べて記述が冗長だけど、機能的には
問題ない。
0324デフォルトの名無しさん
2008/05/10(土) 10:05:39つまりScalaは関数型言語であるっていうこと??
0325デフォルトの名無しさん
2008/05/11(日) 22:57:45定義によるけど、たぶん言って良いと思う。MLが関数型言語であるというのと
同じ程度には。
0326デフォルトの名無しさん
2008/05/12(月) 06:56:300327デフォルトの名無しさん
2008/05/12(月) 13:01:46ただ今時の関数型言語に代数データ型を持っているのが多いというだけ。
0328デフォルトの名無しさん
2008/05/12(月) 17:48:27「典型的な関数型言語」にどれくらい似ているかという尺度で測る他無いんじゃね?
0329デフォルトの名無しさん
2008/05/12(月) 19:25:20ただし、他人の同意を得られるとはかぎりません。
0330デフォルトの名無しさん
2008/05/12(月) 20:02:470331デフォルトの名無しさん
2008/05/12(月) 23:17:55逆だよ。
F#は製品化が決まって現在仕様の取りまとめ中。
0332デフォルトの名無しさん
2008/05/13(火) 08:09:27そんなわけないだろw
代数的データ型があるかどうかは、関数型言語かどうかの尺度にはならない。
>>331
あそこは仕様=実装って会社でしょ。
V0.9的な仕様作ってそれでおしまい。
0333デフォルトの名無しさん
2008/05/13(火) 09:58:170334デフォルトの名無しさん
2008/05/13(火) 14:55:39じゃあ、何が尺度になるの?もちろん、代数的データ型*さえあれば*関数型言語
だとは言うつもりは無いけど、関数型言語の定義なんて人によってかなり曖昧な
わけだ。MLとかHaskellとかのまず間違いなく関数型言語だと認定してもらえる言語と
どれだけ同じ機能を持っているかで比較するしか無いんじゃない?
0335デフォルトの名無しさん
2008/05/13(火) 16:08:24でいいんじゃない?
0336デフォルトの名無しさん
2008/05/13(火) 16:54:44monadでstateは扱えるけど、
stateがあるわけじゃないよね。
stateがないってことを厳密にいうと、
「ある時にy=f(x)ならば、どんな時でもy=f(x)」ってことでいいのかな?
0337デフォルトの名無しさん
2008/05/13(火) 17:17:45じゃあ、MLやOCamlはNGじゃん。ref型があるわけだから。
0338デフォルトの名無しさん
2008/05/13(火) 17:54:46関数だけで構成されていること
でいいんじゃない?
0339デフォルトの名無しさん
2008/05/13(火) 20:49:17それだとHaskellすらNGだな
0340デフォルトの名無しさん
2008/05/13(火) 20:56:340341デフォルトの名無しさん
2008/05/13(火) 21:44:13ないないそれはない
0342デフォルトの名無しさん
2008/05/13(火) 21:47:370343デフォルトの名無しさん
2008/05/13(火) 21:49:08それらしいコードは書けるかもしれない。
0344デフォルトの名無しさん
2008/05/14(水) 07:36:280345デフォルトの名無しさん
2008/05/14(水) 11:58:340346デフォルトの名無しさん
2008/05/14(水) 19:10:580347デフォルトの名無しさん
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 -> ()
0348デフォルトの名無しさん
2008/05/17(土) 10:31:080349デフォルトの名無しさん
2008/05/17(土) 11:19:41なんかAAぽい
0350デフォルトの名無しさん
2008/05/17(土) 13:48:50怒ってため息をついてるね。w
0351デフォルトの名無しさん
2008/05/17(土) 15:38:52標準のSTLだけだと関数型プログラミングは厳しいのでC++は入らないと思う
0352デフォルトの名無しさん
2008/05/17(土) 17:10:34A. 関数型言語が標準でサポートしているプログラミング
0353デフォルトの名無しさん
2008/05/17(土) 21:04:260354デフォルトの名無しさん
2008/05/17(土) 21:44:22無限に再帰してて、止まらないわけですね、わかります。
0355デフォルトの名無しさん
2008/05/17(土) 22:08:010356デフォルトの名無しさん
2008/05/17(土) 22:32:21>今日職場で出た話題。
どこの職場ですか?日本ですか?
0357デフォルトの名無しさん
2008/05/18(日) 00:30:58let 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だからエラーになりそう
でも多相バリアントだからエラーにならないみたいな。
なんか問題がわるいな
0358デフォルトの名無しさん
2008/05/18(日) 00:32:160359デフォルトの名無しさん
2008/05/18(日) 01:16:05{ 変数 : 参照透過; 関数 : 高階; 型 : 代数的; } constraint 'a = 多相
0360デフォルトの名無しさん
2008/05/18(日) 08:22:31個人的にはSTLがどれほど充実しようが、後付けのクロージャが qsort に渡せ
ない時点で除外したい。箱庭の中だけで関数プログラミングをサポートしても、
その言語が関数型とは言い難い。どんな言語でも関数型言語を「実装」する事
は出来るので。
0361デフォルトの名無しさん
2008/05/18(日) 12:09:280362デフォルトの名無しさん
2008/05/18(日) 16:41:500363デフォルトの名無しさん
2008/05/18(日) 16:49:38プラットフォームによるとqsortの方が団地に早かったりするんですが
どのようなプラットフォームでお仕事をしておいででしょうか?
0364デフォルトの名無しさん
2008/05/18(日) 17:12:280365デフォルトの名無しさん
2008/05/18(日) 17:24:49qsort() の呼び出しでは関数ポインタの呼び出しが多いから、インラインで置換するコードには負けてしまうと思います。
0366デフォルトの名無しさん
2008/05/18(日) 18:25:41プラットフォームって、インライン最適化もできない糞コンパイラを使えばって話か?
0367デフォルトの名無しさん
2008/05/18(日) 18:46:200368デフォルトの名無しさん
2008/05/18(日) 20:41:28関数呼び出しコスト以上に速くなる?
0369デフォルトの名無しさん
2008/05/19(月) 07:57:36qsort はただの例。ライブラリの形で別言語を実装しておいて関数型でございっ
てのが気に入らないってだけ。関数ポインタを要求している所に渡したり、新
しい関数ポインタのインスタンスを実行時に作れないと。
0370デフォルトの名無しさん
2008/05/19(月) 08:58:50言語内の機能で実装しているんだぜ?
0371デフォルトの名無しさん
2008/05/19(月) 21:49:060372デフォルトの名無しさん
2008/05/19(月) 22:47:50それいうとあらゆる言語が関数型を名乗れるから。
0373デフォルトの名無しさん
2008/05/19(月) 23:02:44それいったらアセンブラだって関数型だろwww
0374デフォルトの名無しさん
2008/05/20(火) 06:52:470375デフォルトの名無しさん
2008/05/20(火) 08:27:19言語の本来の機能で実装できるのってないんじゃねえ?
0376デフォルトの名無しさん
2008/05/20(火) 10:04:38boost.lambda 見てないんだけど Lisp のマクロ、R6RS のマクロでも無理?
0377デフォルトの名無しさん
2008/05/20(火) 11:19:19zip(list1, list2, _1 + _2) //←こんな感じ。
0378デフォルトの名無しさん
2008/05/20(火) 17:44:55(lambda (lambda (funcname)) (funcname ...))
↑こんなイメージ。これはLISPだったらマクロなしだと実現不可能じゃない?
型システムが閉じてないことが前提だから
OcamlやF#ではこれ、実現不可能だと思う
//ちら裏:自分はBoostが関数型言語やろうと思ったきっかけ
0379デフォルトの名無しさん
2008/05/20(火) 17:52:12マクロ書けばええやん?
言語本来の機能でっせ、Lisp のマクロは…
0380デフォルトの名無しさん
2008/05/20(火) 18:56:16>LISPだったらマクロなしだと
その前提が間違い。何の為の S 式だか。
0381デフォルトの名無しさん
2008/05/20(火) 22:14:56しかし、マクロありでもポリシーによるプログラミングはLISPでは不可能なんじゃね?
ここでS式が出てくるのはなぜ?
静的な型を持つ言語じゃないとコンパイル時型チェックの利点はなくなるし
単なるダックタイピングになってしまう
現時点では閉じていない多態かつ静的な言語って
俺が知る限りC++ぐらいしかないけど他にあるのかな
Template Haskellとかどうなんだろ
0382デフォルトの名無しさん
2008/05/20(火) 22:19:20>ここでS式が出てくるのはなぜ?
興味無いくせに聞くなよ
0383デフォルトの名無しさん
2008/05/20(火) 22:26:20declare すりゃいい話だし、元気があればコンパイラ書き換えれば OK
型推論でも何でもできるんじゃないか?
0384デフォルトの名無しさん
2008/05/20(火) 22:28:550385デフォルトの名無しさん
2008/05/21(水) 21:52:19つか, 処理系自体にシンタックスパーサからコンパイラまで含んでて
そいつらを自前の定義に書き換え可能な言語相手に何を戦ってるんだか
0386デフォルトの名無しさん
2008/05/21(水) 23:06:06すまんが、このコードで何をしてるのか参考までに教えてくれ・・・
>>385
C++に脳を冒されて、そんな言語が存在することを知るよしもないんだろう
0387デフォルトの名無しさん
2008/05/22(木) 05:23:56いや、セーフだろ
0388デフォルトの名無しさん
2008/05/22(木) 07:28:36O'Caml で、v == v は真なのに v = v は偽な値 v は存在するか。
0389デフォルトの名無しさん
2008/05/22(木) 08:16:390390デフォルトの名無しさん
2008/05/22(木) 21:55:52>静的な型を持つ言語じゃないとコンパイル時型チェックの利点はなくなるし
OCamlは型推論で静的な型が付くからC++並にコンパイル時型チェック働くよ
型変換がらみのバグ出づらい分むしろ安全だと思うけど。
(* てかboost:lambdaコンパイル遅すぎ *)
0391デフォルトの名無しさん
2008/05/22(木) 23:38:28OCAMLだとこれに相当することができない(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;
}
0392デフォルトの名無しさん
2008/05/23(金) 00:30:15find(b,v)はdataの型と関係なく定義出来る
(イテレータ関数の型には影響をうける)
クロージャ使えるって忘れてない?
0393デフォルトの名無しさん
2008/05/23(金) 01:10:33> 宣言できる
「定義できる」かな?
宣言ももちろんできるけど。
0394デフォルトの名無しさん
2008/05/23(金) 01:17:03リストは、|でパターンマッチして再帰でグルグルが普通
0395デフォルトの名無しさん
2008/05/23(金) 01:22:070396デフォルトの名無しさん
2008/05/23(金) 01:39:44C++のテンプレートの顕著な特徴は
・型検査と名前解決の一部がインスタンス化まで遅延される
・特殊化(テンプレート引数に対するパターンマッチ)ができる
で、メジャーな言語でこれを備えてるのはC++の他にはDくらいしかないはず
0397デフォルトの名無しさん
2008/05/23(金) 01:55:42http://en.wikipedia.org/wiki/Substitution_failure_is_not_an_error
0398デフォルトの名無しさん
2008/05/23(金) 01:59:04取り敢えず CL はどっちも出来るな
0399デフォルトの名無しさん
2008/05/23(金) 02:06:14良く分からん
CLだと引数の型が確定するのは実行時だから、テンプレートみたいなことはやりようが無いんじゃね?
0400デフォルトの名無しさん
2008/05/23(金) 02:12:170401デフォルトの名無しさん
2008/05/23(金) 02:17:12それならやっぱり実行時ディスパッチだからテンプレートとは比較できないだろ
0402デフォルトの名無しさん
2008/05/23(金) 04:48:43Boostじゃ結構使われてるけど英語しか記事無いのか
0403デフォルトの名無しさん
2008/05/23(金) 08:11:36>>401の書いてるように、実行時の型に基づくディスパッチだから、
コンパイル時にディスパッチが行われるC++のテンプレートの特殊化
とは全然違うでしょ
0404デフォルトの名無しさん
2008/05/23(金) 08:21:470405デフォルトの名無しさん
2008/05/23(金) 08:48:42packageとcompileで頑張れば、
同じようなものを作れないこともないなあ。
おもしろいかもね。SFINAEはCLOSっぽいね。
まあC++だって総称関数族だから当たり前か。
0406デフォルトの名無しさん
2008/06/02(月) 14:56:29let a = "hoge" in
match a with
a -> "this is hoge"
| "hage" -> "this is hage"
| _ -> "other"
みたいにして、a を "hoge" としてマッチさせることが出来ないのはどうしてなの
0407デフォルトの名無しさん
2008/06/02(月) 15:25:34パタン中に変数書くときは束縛になるじゃん。
0408デフォルトの名無しさん
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 だけど、複雑なときに書きたくなる
0409デフォルトの名無しさん
2008/06/02(月) 19:00:310410デフォルトの名無しさん
2008/06/02(月) 19:56:37| user when user=root_user_name -> "this is root user"
| "hage" -> "this is hage"
| _ -> "other"
で合ってる?
0411デフォルトの名無しさん
2008/06/02(月) 20:30:390412デフォルトの名無しさん
2008/06/03(火) 00:08:07ありがとー
知らなかった
すげー恥ずかしい
0413デフォルトの名無しさん
2008/06/03(火) 02:56:54かじりかけじゃしょうがないと思うからがんばれ。
0414デフォルトの名無しさん
2008/06/05(木) 08:27:09入門書は振れるべきかもわからんね。
0415デフォルトの名無しさん
2008/06/05(木) 11:13:110416デフォルトの名無しさん
2008/06/05(木) 19:44:140417デフォルトの名無しさん
2008/06/07(土) 10:41:42List.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))
の部分をもっとこう関数の合成みたいな感じで短く書く方法ってないですかね
0418デフォルトの名無しさん
2008/06/07(土) 12:19:57なぜそんなに短さにこだわる?
0419デフォルトの名無しさん
2008/06/07(土) 12:31:55文字列コピーが多すぎるから。String.concat とか、 Buffer を使うべし。
上の例は、
String.concat "" (List.map conv ["1"; "2"; "3"])
これで十分だろう。(^) を使うなら417で十分。無理に短く書いて喜ぶ言語ではない。
0420デフォルトの名無しさん
2008/06/07(土) 12:36:50/": : : : : : : : \
/-─-,,,_: : : : : : : : :\
/ '''-,,,: : : : : : : :i
/、 /: : : : : : : : i ________
r-、 ,,,,,,,,,,、 /: : : : : : : : : :i /
L_, , 、 \: : : : : : : : :i / λ抽象したら
/●) (●> |: :__,=-、: / < 負けかなと思ってる
l イ '- |:/ tbノノ \
l ,`-=-'\ `l ι';/ \
ヽトェ-ェェ-:) -r'  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ヾ=-' / /
____ヽ::::... / ::::|
/ ̄ ::::::::::::::l `──'''' :::|
0421デフォルトの名無しさん
2008/06/07(土) 14:08:51俺だったら先にmapする
0422デフォルトの名無しさん
2008/06/07(土) 14:42:08List.fold_left conv "1" ["2"; "3"]
0423デフォルトの名無しさん
2008/06/07(土) 21:29:56Buffer は知ってたけど、String.concat は知りませんでした
map 先にやって、String.concat で書くことにします
0424デフォルトの名無しさん
2008/06/07(土) 23:34:58file_descr -> int -> seek_command -> int
でintで足りない場合が多々あるかと思うのですが、
皆さんは大きなファイルのIOをするときはどうしてますか?
オフセットの計算とかも Int64.add pos (Int64.mul index 4L)
みたいにしてやってますか?
0425デフォルトの名無しさん
2008/06/08(日) 01:20:52おまいら、ライブラリ関数で迷ったらまず .mli 読むか、grep するか、
ocamlbrowser でも使えよな。
0426デフォルトの名無しさん
2008/06/08(日) 01:34:33おお、ありがとうございます!
0427デフォルトの名無しさん
2008/06/08(日) 17:22:3831bitがだめなら63bitがあるじゃない。
# 0xffffffff;;
- : int = 4294967295
0428デフォルトの名無しさん
2008/06/09(月) 00:54:23つまらん
0429デフォルトの名無しさん
2008/06/12(木) 18:32:15ifの構文糖衣のようにも思えるけど
0430デフォルトの名無しさん
2008/06/12(木) 19:07:000431デフォルトの名無しさん
2008/06/12(木) 19:48:17もしパターンマッチがないとすれば、代数的データ型から値を取り出したい場合はどうする?
たとえばHaskellのMaybe型のJust 3という値から、3という値を取り出したい場合はどうする?
0432デフォルトの名無しさん
2008/06/12(木) 20:25:170433デフォルトの名無しさん
2008/06/12(木) 20:39:02構文糖には何も利点がないとでも?
0434デフォルトの名無しさん
2008/06/12(木) 22:33:330435デフォルトの名無しさん
2008/06/12(木) 22:41:54x + yって中間記法、よく出てくるけど何が利点なの?
(+ x y)の構文糖衣のようにも思えるけど
0436デフォルトの名無しさん
2008/06/12(木) 22:42:53具体的に実装するとすればどうしますか?
MaybeにはNothingという値もあるんですよ。
0437デフォルトの名無しさん
2008/06/12(木) 23:11:58入力が不適なら例外発生
0438デフォルトの名無しさん
2008/06/12(木) 23:24:50Maybeは代数的データ型のひとつの定義に過ぎませんよ。
Just aとNothing以外にHogeという値がある別の定義があったらどうするんですか?
定義はいくらでも作れますよ。
0439デフォルトの名無しさん
2008/06/12(木) 23:37:45言っている意味が分からん
アクセサの自動生成はHaskellが既にやってること(フィールドラベル使ったときに)だし、技術的な問題はないと思うんだが
0440デフォルトの名無しさん
2008/06/13(金) 03:16:09簡潔 - 記述しやすい (accessors (or deconstructors) for free)
安全 - non exhaustiveness check
速度 - 分岐が集約されているので最適化が楽 (ifの繰り返しを解析するのにくらべて)
以上。他にあるかな?
(というか、そもそもパターンマッチは関数型言語の特徴ではありません。
関数型言語が採用しているADTの特徴というべきでしょ。)
0441デフォルトの名無しさん
2008/06/13(金) 03:29:17パターンマッチを採用している手続き型言語を挙げよ
0442デフォルトの名無しさん
2008/06/13(金) 05:12:140443デフォルトの名無しさん
2008/06/13(金) 08:15:48項書換えシステム全般 (論理型も含む)
0444デフォルトの名無しさん
2008/06/13(金) 08:24:46パターンマッチ渡しはできないが、match case文がある。
http://www.scala-lang.org/intro/caseclasses.html
Extractorはユーザ定義もできる。
http://www.scala-lang.org/intro/extractors.html
0445デフォルトの名無しさん
2008/06/15(日) 00:12:390446デフォルトの名無しさん
2008/06/16(月) 13:51:28JNI(Java Native Interface)の中の人は、
SML/NJのWin32対応をやっていた人だった。
Modular Monadic Semanticsの人。
0447デフォルトの名無しさん
2008/06/16(月) 17:39:37メンバの名前が被らないように注意してレコード作ってますか?
それともクラスにしますか?
0448デフォルトの名無しさん
2008/06/16(月) 21:15:11何か勘違いしていると思われ
0449デフォルトの名無しさん
2008/06/16(月) 21:15:420450デフォルトの名無しさん
2008/06/16(月) 21:18:34モジュール名で区別でおk
OCamlでオブジェクトの濫用はお勧めできない
0451デフォルトの名無しさん
2008/06/16(月) 22:45:230452デフォルトの名無しさん
2008/06/16(月) 22:45:43O堀さんのことだからこれで終りとは思えないが。
0453デフォルトの名無しさん
2008/06/17(火) 03:18:35おお、目から鱗ですありがとう!
このスレは勉強になります。。
俺もできるならクラスは使いたくなかったので助かりましたわ。
0454デフォルトの名無しさん
2008/06/22(日) 02:24:57要素 data[i] と data[j] を入れ替えた配列 を出力する関数
ってどうやればいいんかいな?
0455デフォルトの名無しさん
2008/06/22(日) 22:44:310456デフォルトの名無しさん
2008/06/22(日) 23:37:58何かマズいことあるのかな?
0457デフォルトの名無しさん
2008/06/23(月) 01:54:090458デフォルトの名無しさん
2008/06/23(月) 01:56:52つまりHaskell最高ってことか?
0459デフォルトの名無しさん
2008/06/23(月) 02:57:29色々と工夫というかテクがあるなら教えて頂きたいです。
0460デフォルトの名無しさん
2008/06/23(月) 06:54:26人生、これストリームなり
0461デフォルトの名無しさん
2008/06/23(月) 12:22:57sigma関数の箇所、もっと効率的なやり方があるような気がしてむずがゆい感じがしてます。
何かアドバイスいただけないでしょうか
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];;
0462デフォルトの名無しさん
2008/06/23(月) 13:13:090463デフォルトの名無しさん
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];;
0464デフォルトの名無しさん
2008/06/23(月) 15:38:220465デフォルトの名無しさん
2008/06/23(月) 15:59:00こういった変換は慣れていないので、ちょっと時間がかかりそうです
0466デフォルトの名無しさん
2008/06/23(月) 17:53:21こんなのはどうっすかね?
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"〜{エレガンテ}〜"な方法を希望ならスマソ。
0467デフォルトの名無しさん
2008/06/23(月) 20:17:29reverse $ snd $ foldl (\(a,xs) b -> let x = a + b in (x,x:xs)) (0,[])
Haskellの構文を使ってるがMLでも同様のはず。
0468デフォルトの名無しさん
2008/06/23(月) 20:21:41tail $ reverse $ foldl (\a b -> (head a + b):a) [0]
0469デフォルトの名無しさん
2008/06/23(月) 20:37:13おお、こういうのがノータイムで出てくるようになりたいわ。
0470デフォルトの名無しさん
2008/06/23(月) 21:44:56let rec sum lst =
match lst with
| [] -> []
| car :: cdr -> (List.fold_left (+) 0 lst) :: (sum cdr) in
List.rev (sum (List.rev lst));;
こんなんどうでっしゃろ?
0471デフォルトの名無しさん
2008/06/23(月) 21:48:14おまいらHaskell大好きだなwwwww
0472デフォルトの名無しさん
2008/06/23(月) 22:44:060473デフォルトの名無しさん
2008/06/23(月) 22:46:140474デフォルトの名無しさん
2008/06/23(月) 23:08:55let rec aux store = function
| [] -> []
| x::xs -> x+store :: aux (x+store) xs
in
aux 0 l
これでok。末尾再帰じゃないけど。な。
0475デフォルトの名無しさん
2008/06/23(月) 23:31:25いろんなやり方があって勉強になります
0476デフォルトの名無しさん
2008/06/23(月) 23:39:06let sigma = (fun s -> rev $ fold_left (fun ys x -> s := x + !s; !s::ys) []) (ref 0)
0477デフォルトの名無しさん
2008/06/23(月) 23:43:15let sigma l = (fun s -> rev @@ fold_left (fun ys x -> s := x + !s; !s :: ys) [] l) @@ ref 0
0478デフォルトの名無しさん
2008/06/23(月) 23:47:550479Haskell 修業中
2008/06/24(火) 04:32:12import List
sigma = tail.(scanl (+) 0)
0480デフォルトの名無しさん
2008/06/24(火) 21:58:08let 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;;
0481デフォルトの名無しさん
2008/06/24(火) 23:31:17tail . (scanl (+) 0)
↓
scanl1 (+)
でおっけ
0482Haskell 修業中
2008/06/24(火) 23:48:01おおっ!そんなのがあるんですね。
やっぱ、Haskellすごいわ
スペースを入れてもわずか10文字w
0483デフォルトの名無しさん
2008/06/25(水) 01:45:08逆に、OCamlには関数なさすぎ砂漠なわけだが。
0484デフォルトの名無しさん
2008/06/26(木) 17:36:09ム板住民の半分は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とかかね。
0485デフォルトの名無しさん
2008/06/26(木) 18:20:16Ocamlで書くのが大変なのは…特にないな。遅延計算くらいか。
0486デフォルトの名無しさん
2008/06/26(木) 18:34:02OCamlだとバッファリングするとかストリームとか多少は副作用がある方法を使わなきゃいけないかなー。
まあ他の言語ではみんなそうしてるから特に抵抗は無いが。
0487Haskell 修業中
2008/06/26(木) 18:35:15Streamって遅延計算じゃないんですか?
0488Haskell 修業中
2008/06/26(木) 18:37:26やっぱりStream使うんですね。
0489デフォルトの名無しさん
2008/06/26(木) 18:56:37Haskellでは通常のリスト操作みたいに出来るっていうのはやっぱり魅力だよな。
使い方にもよるがソースがStream.junk ();とかだらけになるのは美しくないので避けたい。
0490デフォルトの名無しさん
2008/06/26(木) 20:28:23たとえば?
俺がHaskellですっきり書いてやるよ。
0491デフォルトの名無しさん
2008/06/27(金) 18:43:09というかこんなことを平気で聞いてもよさげな初心者スレないのかな
0492デフォルトの名無しさん
2008/06/27(金) 22:56:35kwsk
0493デフォルトの名無しさん
2008/06/28(土) 01:38:52ocamldebugを使ってみた
↓
Eventなのに止まらないだと・・・?
↓
きっとコンパイラが最適化してるからだ!
↓
ocamlのコンパイラって最適化無効にするオプションないのかな←今ここ
ocamldebugのstep実行で止まるはずのポイント飛ばされたり、
プロファイラで使われているはずの関数が未使用と判定されたり、
言語以前にツールの使い方覚えるとこで俺\(^o^)/
0494デフォルトの名無しさん
2008/06/28(土) 02:23:23最適化みたいなことはほとんどしてないんで。書いたとおりに実行するよ。
優秀なOCamlプログラマを大勢知っていますが、大多数はデバッガの必要を感じていません。
俺もデバッガは使わないので何ともいえんが、何か使いかたを過っているか、
camlの評価順なぞを未理解なのではないかと思われ…
0495デフォルトの名無しさん
2008/06/28(土) 03:05:49ICFP PC 2007の問題とかどうよ?
RNA実行するだけでも副作用なしだと大変じゃないかな
0496デフォルトの名無しさん
2008/06/28(土) 05:35:04皆使ってなかったのか・・・
ソース解析する際流れ追うのに使えるかと思ったんだが
>何か使いかたを過っているか、
>camlの評価順なぞを未理解なのではないかと思われ…
どっちも怪しいのでもちっと勉強してくる
0497デフォルトの名無しさん
2008/06/28(土) 10:30:39そういうのって全部ログコードはいてチェックするんですか?デバッグとそういうやり方併用してるけれど全部それだとチョイきつそう。
0498デフォルトの名無しさん
2008/06/28(土) 14:39:27デバッガでちまちまやる前に、assertion と Printexc.get_backtrace でかなりのことはわかるはずだが。
Cのデバッガのように必須だという認識の人は少ないと思われ。
もちろん使うなとは言わん。ocamldebugはリプレイとか強力。
0499デフォルトの名無しさん
2008/06/28(土) 23:12:07cの場合は破壊的操作と非破壊的操作をあまり意識せずにプログラミングすることもあるから
余計に必要になってくるのではないか?それに、小さな関数の定義を作って大きくするより、
一つでまとめて操作すると言う習慣も影響してるかも。
0500デフォルトの名無しさん
2008/06/28(土) 23:45:190501デフォルトの名無しさん
2008/06/29(日) 03:08:23http://codepad.org/14IrPYhB
0502デフォルトの名無しさん
2008/06/29(日) 03:21:420503デフォルトの名無しさん
2008/06/29(日) 20:22:57あってもいいんだけど。
0504デフォルトの名無しさん
2008/06/29(日) 20:55:260505デフォルトの名無しさん
2008/06/29(日) 20:58:08C-REPL
http://neugierig.org/software/c-repl/
0506デフォルトの名無しさん
2008/06/29(日) 20:58:590507デフォルトの名無しさん
2008/06/29(日) 22:53:12>Cのデバッガのように必須だという認識の人は少ないと思われ。
だから普通はそういう事なんだろうなww
まあgdbではlispとかcamlとかみたいに書いて即テストって訳にはいかないがgdbは便利だよな。
0508デフォルトの名無しさん
2008/07/05(土) 03:43:57fun 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しておいたほうが綺麗かも
0509デフォルトの名無しさん
2008/07/22(火) 18:35:13例えば正規表現なんかでも使いたいんですが。
0510デフォルトの名無しさん
2008/07/22(火) 20:41:48日本語でもなんでもあり。
ただし、OCamlのソースコードに日本語を埋め込みたいなら、EUC_JP以外使えないと思う。
EUC_JPなら、普通にperl互換正規表現ライブラリのラッパーが使える。
http://pcre-ocaml.sourceforge.net/
データをUNICODEとして扱うなら、Camomileで日本語「文字」を扱えますね。
http://camomile.sourceforge.net/index.html.ja.jis
あと、正規表現で日本語を扱う問題はOCamlに限らずどれでも一緒なので、
http://www.din.or.jp/~ohzaki/perl.htm
あたりをどうぞ。
0511デフォルトの名無しさん
2008/07/22(火) 22:03:32(今や\p{Hiragana}という風に"script"を文字クラスとして指定できるので)
「どれも一緒」というよりも、Ocamlだとこのやり方が有効って事になると思います。
0512デフォルトの名無しさん
2008/07/22(火) 22:16:110513デフォルトの名無しさん
2008/07/23(水) 22:25:46不可能?
0514デフォルトの名無しさん
2008/08/10(日) 15:52:08こんなのをみっけたけど、ゆうめいなん?
0515デフォルトの名無しさん
2008/08/13(水) 08:08:15ttp://indori.blog32.fc2.com/blog-entry-223.html
0516デフォルトの名無しさん
2008/08/13(水) 16:19:540517デフォルトの名無しさん
2008/08/14(木) 08:38:28入門記事というより、入門している記事
0518デフォルトの名無しさん
2008/08/14(木) 08:51:30数ヶ月前に見たので、うろ覚えだけど、optional arguments や polymorphic variants が
かなり早期に出てくる。そういう点では、こういう新しい機能をおまけとして解説してきた、
「OCaml を使ってプログラミングを学ぶ」本とは毛色が違い、より OCaml 自体を学ぶ事に
重点が置かれている。class についても最後にかなりページ数が割かれている。
0519デフォルトの名無しさん
2008/08/14(木) 09:07:36そういうわけで、ひととおり関数型言語のコンセプトについて理解した人には
OCaml リファレンスとしていいんじゃないかと思う。
0520デフォルトの名無しさん
2008/08/14(木) 10:11:59解説ありがとう。なるほど他言語をやっていて、始めようとする人向きだということが
分かりました。
0521デフォルトの名無しさん
2008/08/17(日) 00:31:48Winでパフォーマンス落ちるのはバイトコードの話でしょ?
ネイティブなら問題ない
0522デフォルトの名無しさん
2008/08/24(日) 14:59:04型エラー(?)が出て実行できないのがある.
誰か助けて...
次のレスにエラーが出るプログラムを貼ります.
0523522
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;
0524デフォルトの名無しさん
2008/08/24(日) 15:01:24VIP発でサイトを作ろうと思うんだ。(詳しくはWikiを見てくれ)
パートスレになるんでパー速(GEP)に移動している。
今スタッフを募集しているから、来てくれないか?
■Wiki
http://www36.atwiki.jp/vipvipschool/
■募集スタッフ
プログラム担当(特にErlang、Perl)
デザイナー(サイト上のアイコン、ロゴなど)
WEBデザイナー(サイトデザイン案に沿って、htmlやCSSを書ける)
他にも宣伝担当なども募集している。
■スレ
http://ex14.vip2ch.com/test/read.cgi/news4gep/1219068297/
0525522
2008/08/24(日) 15:02:24structure 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);
0526522
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;
0527522
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
0528522
2008/08/24(日) 15:11:46stdIn: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
0529522
2008/08/24(日) 15:13:41stdIn: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
0530デフォルトの名無しさん
2008/08/25(月) 02:01:56大学入試の問題文の冒頭で
「f(x)=x^3+3x^2とする」とあるのですが
この=はC言語と同様に、右辺の関数にfという名前を付けるという
意味での=つまり;=のことでしょうか?
0531デフォルトの名無しさん
2008/08/25(月) 02:06:580532デフォルトの名無しさん
2008/08/25(月) 02:59:260533デフォルトの名無しさん
2008/08/25(月) 04:08:36すみません、これだけでいいので分かる方いたら教えてください
って読んだんだけどOcamlのコンパイラってCへのトランスレーターなの?
0535デフォルトの名無しさん
2008/08/25(月) 07:18:200537デフォルトの名無しさん
2008/08/25(月) 17:17:37夏休みも終わりだねえ
0538デフォルトの名無しさん
2008/08/25(月) 23:17:08閑古鳥の鳴いてるメーリングリストを活性化するために話題を投げてくれ
0539デフォルトの名無しさん
2008/08/26(火) 20:17:38SML#のバグじゃないかな・・・?
次回アップデートに期待としか。
0540デフォルトの名無しさん
2008/08/27(水) 08:46:120541デフォルトの名無しさん
2008/08/27(水) 08:51:160543デフォルトの名無しさん
2008/09/19(金) 19:00:510545542
2008/09/19(金) 19:29:560546デフォルトの名無しさん
2008/09/19(金) 19:31:39・処理系を関数型言語で書きたい
・関数型言語の処理系を書きたい
どっち?
0547542
2008/09/19(金) 19:38:530548デフォルトの名無しさん
2008/09/19(金) 19:44:240549デフォルトの名無しさん
2008/09/19(金) 20:24:30・コンパイラを関数型言語で書きたい
・関数型言語のコンパイラを書きたい
のどっちなのかということですよ
0550デフォルトの名無しさん
2008/09/19(金) 21:16:48いいかどうかは知らない。
0551デフォルトの名無しさん
2008/09/19(金) 21:25:48EOPLはschemeでML処理系を作るやつだったよね
0552デフォルトの名無しさん
2008/09/19(金) 21:27:18持ってるけど、読んでない…
0553デフォルトの名無しさん
2008/09/19(金) 22:41:490554デフォルトの名無しさん
2008/09/19(金) 23:00:150555デフォルトの名無しさん
2008/09/20(土) 11:27:06なんかあったっけ?
0556デフォルトの名無しさん
2008/09/20(土) 11:54:330557デフォルトの名無しさん
2008/09/20(土) 12:10:110558デフォルトの名無しさん
2008/09/20(土) 17:03:51~/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が必要です。
0559デフォルトの名無しさん
2008/09/23(火) 09:30:04この前提が、なんか、もう。
0560デフォルトの名無しさん
2008/09/27(土) 19:06:570561デフォルトの名無しさん
2008/09/29(月) 10:13:03GODI がインストールできないから使えない、というのは間違ってますね。
逆に、GODI 依存ユーザからお前のライブラリ GODI にポートしろとか
当然のように言われるのも迷惑です。
0562デフォルトの名無しさん
2008/09/29(月) 21:15:320563デフォルトの名無しさん
2008/09/30(火) 11:52:19なんでだろう?
0564デフォルトの名無しさん
2008/09/30(火) 13:34:010565デフォルトの名無しさん
2008/10/01(水) 16:14:100566デフォルトの名無しさん
2008/10/01(水) 16:17:28インストーラーがあるよ
0567デフォルトの名無しさん
2008/10/01(水) 19:53:200568デフォルトの名無しさん
2008/10/01(水) 23:00:11コンパイルできないやつか
コンパイルしても動かないやつしかない
0569デフォルトの名無しさん
2008/10/02(木) 08:45:56cygwin入れれば標準でocaml入ってるよ。
0570デフォルトの名無しさん
2008/10/02(木) 14:34:320571デフォルトの名無しさん
2008/10/03(金) 04:07:140572デフォルトの名無しさん
2008/10/03(金) 12:52:15こーゆー時のためにhttp://ocaml.jp/です。
OCamlのインストール方法からチュートリアルまで揃ってますよ。
0573デフォルトの名無しさん
2008/10/03(金) 15:53:520574デフォルトの名無しさん
2008/10/03(金) 17:01:090575デフォルトの名無しさん
2008/10/04(土) 00:03:39それ扱いやすいって言わないよ〜 orz
普段使いで文字列扱うせいでこまるんだよな、言語自体好きなのに。
0576デフォルトの名無しさん
2008/10/04(土) 09:44:200577デフォルトの名無しさん
2008/10/06(月) 11:30:36pythonならC-b, C-fでカーソルの移動ができたり、
emacsの標準的なキーが使えるから気軽にコンソールでためせる。
0578デフォルトの名無しさん
2008/10/06(月) 11:58:55ledit使え、と思ったらなんか終わってるらしい。
どうしたものか...
0579デフォルトの名無しさん
2008/10/06(月) 12:01:100580デフォルトの名無しさん
2008/10/06(月) 12:14:310581577
2008/10/06(月) 13:12:12ためして見たところrlwrapを使うことにしました。
すごいです!!ありがとう!
0582デフォルトの名無しさん
2008/10/06(月) 21:34:32>ledit使え、と思ったらなんか終わってるらしい。
え、終わってるって、どういうこと?
俺、ledit 使ってるけど
0583デフォルトの名無しさん
2008/10/07(火) 12:19:07ledit終了 でぐぐるとトップに出てくるブログに書かれてる情報絡みのことじゃないかと
0584デフォルトの名無しさん
2008/10/09(木) 11:03:053.11 の目玉
* native判のモジュールの dynamic link
* private abbreviation type
* Printexc.print_backtrace 等、デバッグに役立ちそうな backtrace 系関数数種
* ocamlnat: native の toplevel (デフォルトでは作らないそうな)
0585デフォルトの名無しさん
2008/10/09(木) 12:12:17これって既に10で出来るようになったんじゃなかったけ?
と思ったら、今は dynlink.cmxa をリンクしないといけないのか
これは便利だな
0586デフォルトの名無しさん
2008/10/10(金) 12:01:15http://yk.i.hosei.ac.jp/library/hosei/seminar/caml/miniml/minicaml.sml
をいまどきのSMLNJで動かすにはどう変更したらよいでしょうか.
ord(#"0")はすぐわかりましたが,lookaheadなどがcharを期待してして
いるのが仕様変更になったようで,elem をどうやってやればcharで
使えるのかが判然としません.
0587デフォルトの名無しさん
2008/10/15(水) 09:18:45http://dutherenverseauborddelatable.wordpress.com/2008/10/11/ocaml-batteries-included-version-alpha/
一応前から内容は見ていて、OCamlのベースライブラリをモダンな階層構造に再編集しているのはすばらしいと思う。
ただ、ちょっと既存の外部ライブラリに頼りすぎていて、枝葉になるほど寄せ集め感が否めないのが気になる。
将来これに一本化されていくのかなー?私もこれに乗るのかどうか、今悩み中。
0588デフォルトの名無しさん
2008/10/15(水) 15:52:010589osiire
2008/10/15(水) 19:04:27別にいいですけど、一人称くらい変更してくれてもいいのに。
0590デフォルトの名無しさん
2008/10/24(金) 21:49:05private typesでもなくprivate row typesでもない、なにか?まぎらわしー。
0591デフォルトの名無しさん
2008/10/26(日) 20:54:39俺がocaml勉強日記を書いてあげようか?
わからないことがあったら答えて下さいね!
0592デフォルトの名無しさん
2008/10/26(日) 23:04:300593デフォルトの名無しさん
2008/10/26(日) 23:12:420594デフォルトの名無しさん
2008/10/26(日) 23:21:06おう、かいてたらいいよ。
0595デフォルトの名無しさん
2008/10/27(月) 10:53:31type 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
0596デフォルトの名無しさん
2008/10/27(月) 15:21:06レスどうも。
この例は、signatureでtype natとして隠蔽した場合と何が違うのでしょう?
試してもprinterが<abstr>になるかどうかくらいしか違い分かりませんでした。
どういう利用法があります?
0597デフォルトの名無しさん
2008/10/27(月) 15:53:58ttp://d.hatena.ne.jp/camlspotter/20081027/1225076108
subtypingとは気づかなかった。
0598デフォルトの名無しさん
2008/11/01(土) 12:46:430599デフォルトの名無しさん
2008/11/01(土) 13:20:42nil:食物を、水または調味料を加えた汁に入れて加熱し、食べられる状態にすること。
0600デフォルトの名無しさん
2008/11/01(土) 14:51:15ttp://pc11.2ch.net/test/read.cgi/tech/1203474071/l50
0601デフォルトの名無しさん
2008/11/02(日) 02:49:240602デフォルトの名無しさん
2008/11/02(日) 02:53:01nullはListストラクチャーの、リストを受け取りnilかどうかをboolで返す関数。
0603デフォルトの名無しさん
2008/11/02(日) 03:21:300604デフォルトの名無しさん
2008/11/02(日) 03:35:53ウケ狙いなら、残念。もう一ひねりホシイ。
0605デフォルトの名無しさん
2008/11/02(日) 07:43:26他に何があるというのか小1時間(ry
0606デフォルトの名無しさん
2008/11/04(火) 06:30:51replicate(4);
と打つと、
val it = [1,2,2,3,3,3,4,4,4,4] : int list
といった感じに1を一つ,2を二つ、3を三つ、4を四つといったリストを
出力されるSMLのリカーシブメソッドを書きたいのですが、上手く行きません。分かる方教えていただけると助かります。
0607デフォルトの名無しさん
2008/11/04(火) 07:09:080608デフォルトの名無しさん
2008/11/04(火) 08:14:40リカーシブメソッドっていうのが何を差してるのか分からないけど、
入力: 自然数n
出力: 要素が全てnで長さnのリスト
とするサブ関数使えばいいんじゃない?
0609デフォルトの名無しさん
2008/11/04(火) 08:21:09[1,2,3,...,n]
[1,22,333,...,n,n,n,n,]
の二行目から三行目で>>608使えばいいな。
0610デフォルトの名無しさん
2008/11/04(火) 09:16:29再帰だな。
0611608
2008/11/04(火) 09:29:59>>609のやりかたとは違います。
↓にあっぷしてみたので、ご参考までに。
ttp://www2.uploda.org/uporg1765562.txt.html
(パスは sml です)
入力は自然数(0以上)を仮定しています。
0612デフォルトの名無しさん
2008/11/04(火) 12:47:570613608
2008/11/04(火) 18:17:23やっぱそうだよねぇ。
「独学で」なんて書いてるから、
にっちもさっちも行かなくなったと思っちゃったんだよね。
やっぱ、寝ないとだめだな。
0614デフォルトの名無しさん
2008/11/04(火) 23:34:42良く寝て頭を休めろ。
0615デフォルトの名無しさん
2008/11/05(水) 00:11:55再帰関数はn-1番目からn番目を導出する定義をそのまま書くのがコツ。
もう>>606は見てないだろうけど。
0616デフォルトの名無しさん
2008/11/05(水) 00:43:050617デフォルトの名無しさん
2008/11/05(水) 00:55:48始終荒れまくりの海外サーバ絵チャだ
一人の神プログラマーが強すぎてマクロ荒しが全く太刀打ちできてない。
荒しプログラマーは全員退散!!
誰か倒してくれwwwwww
0618デフォルトの名無しさん
2008/11/05(水) 01:15:09わざわざお答え頂ありがとうございます。
一応こちらもパターンマッチングでない、if - elseの方法で出来ました。ネストしたループのfunctionの前にletが抜けていただけでした。
参考になりました。
0619デフォルトの名無しさん
2008/11/05(水) 04:09:40こういう課題は論理型の方がすっきりした定義になるね。
0620デフォルトの名無しさん
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を返す関数というふうに理解してます。
コードはどのように考えればよいんでしょうか?
0621デフォルトの名無しさん
2008/11/09(日) 12:48:12let func f = (f 1 2) + 3;;
0622デフォルトの名無しさん
2008/11/09(日) 14:05:34ありがとうございます。
理解しました。
0623デフォルトの名無しさん
2008/12/23(火) 03:10:200624デフォルトの名無しさん
2008/12/23(火) 10:16:58Mozartの64bit版も来ないかなぁ・・・クリスマスプレゼントに
0625デフォルトの名無しさん
2008/12/25(木) 13:35:35どなたか導入に関してわかりやすいサイトありましたら、教えてください。
0626デフォルトの名無しさん
2008/12/27(土) 16:39:090627デフォルトの名無しさん
2008/12/29(月) 12:31:58やっと入れられた。ありがとう。
0628デフォルトの名無しさん
2008/12/29(月) 12:34:37なんだ、お前も最近増えてきたにわかマカか
0629デフォルトの名無しさん
2008/12/29(月) 13:04:14人生にお疲れのようですね。
0630デフォルトの名無しさん
2009/01/01(木) 23:05:22http://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以下だったそうだ。
---
0631デフォルトの名無しさん
2009/01/03(土) 03:15:13限られているからな。JavaやC++みたいな糞言語を使う糞グ
ラマがいる限り日本のIT産業の生産性は低いままだろう。
今必要とされているのは我々のような高い能力をもつエンジ
ニアであるにも関わらずスーツ族にはそりがわからんのですよ。
うはwテラガンダムwww俺自重www
こうですかわかりません
0632デフォルトの名無しさん
2009/01/03(土) 05:18:130633デフォルトの名無しさん
2009/01/03(土) 11:20:18職業プログラマは免許制にすればいいんじゃね?
0634デフォルトの名無しさん
2009/01/03(土) 11:43:11情報処理技術者試験の実務への役立ち度を考えると・・・
0635デフォルトの名無しさん
2009/01/03(土) 12:03:450636デフォルトの名無しさん
2009/01/03(土) 13:21:35試験は基本中の基本の事柄が出てくるだけだよ。
実務には直接関係ないかもしれないが、その程度のことも知らないようでは
応用性がなくて35歳で定年を迎えるだけ。
ソフトウェア開発を一生仕事にできるのは基本を知っている人間だけだよ。
0637デフォルトの名無しさん
2009/01/03(土) 13:42:15へえー
0638デフォルトの名無しさん
2009/01/03(土) 16:58:450639デフォルトの名無しさん
2009/01/03(土) 17:58:29盲目的に試験勉強する人間はもううんざりだな。
0640デフォルトの名無しさん
2009/01/03(土) 18:06:33たとえばプログラマでも東大院卒と公立高校卒とでは、やはり東大卒のほうが優秀な奴が多いよ。
0641デフォルトの名無しさん
2009/01/03(土) 18:59:38スタートは同じでも高卒と大卒では行き着く先が違う
0642デフォルトの名無しさん
2009/01/03(土) 19:50:260643デフォルトの名無しさん
2009/01/04(日) 07:25:19私のように35才でPrologを始めて、それでプログラマになれたというケースは
どう考えればいいのかな。大学一年で中退してるから、高卒だけど。
0644デフォルトの名無しさん
2009/01/04(日) 08:44:37まぁ35ではじめてもいけるとは思うけどね。多分それまでに理論的な思考が身についてないときついと思うが。
0645デフォルトの名無しさん
2009/01/04(日) 09:20:24手続き型でやるより長生きできるのかなーとか思ったり
0646デフォルトの名無しさん
2009/01/04(日) 10:09:4540才から始めても大丈夫って言わなくちゃいけないのではないか。
関数型のスレで高卒限定でも35才定年はないと思うよ。
0647デフォルトの名無しさん
2009/01/04(日) 12:15:36辞めた理由による。
高卒と大学中退は若干違う。
0648デフォルトの名無しさん
2009/01/05(月) 18:35:36業界未経験でPrologのみ扱える35歳が職業プログラマとして入り込めるのも、この業界w
かつての業界成長期にはタクシー運転手や大工から転職してきた人も珍しくなかった。
0649デフォルトの名無しさん
2009/01/05(月) 18:57:38それはIT土方。アメリカ的に言えばコーダー。
ちゃんと計算機科学を勉強した人間の仕事じゃない。
0650デフォルトの名無しさん
2009/01/05(月) 20:22:11今だって、エリクソンかなんかでErlangばかりやってて、日本に帰ってきて、
この言語だけは精通していますと言ったら、就職困らないでしょ。希少価値が
あれば、なんとかなるのは今も同じ。
0651デフォルトの名無しさん
2009/01/05(月) 21:34:51困る困る大いに困る
0652デフォルトの名無しさん
2009/01/05(月) 21:46:50変だな。Erlangもそうだが、Scalaなんて、書けるって言ったら、
引く手数多だろう。
0653デフォルトの名無しさん
2009/01/05(月) 21:54:090654デフォルトの名無しさん
2009/01/05(月) 21:58:09ほとんどオープンソースプロジェクトと大学のTAやってたころに問題作成・採点やってたころの経験だな
0655デフォルトの名無しさん
2009/01/05(月) 22:02:16技術は結構あると思うんだけど
人格障害&口下手だから誰も俺なんか雇わないんです。
0656デフォルトの名無しさん
2009/01/05(月) 22:34:27需要はあるところにはあるんだろうがどこにでもあるわけじゃない。
需要のあるところと縁がなければ(ほとんどないわけだが)どうにもならん。
0657デフォルトの名無しさん
2009/01/05(月) 22:46:14クリーク・アンド・リバーのような所はプログラマは対象に
していなのかな。アーティスト主体とは聞いたが。
0658デフォルトの名無しさん
2009/01/05(月) 22:52:59秘密裡に話を進めたい求人っていうのは確かにあるね。
0659デフォルトの名無しさん
2009/01/05(月) 23:06:09スレの流れを読め。
計算機科学を勉強した人間を前提とした話じゃないだろ。
0660デフォルトの名無しさん
2009/01/05(月) 23:25:33その会社ググってみたが、HP何ともセンスねぇな・・・
0661デフォルトの名無しさん
2009/01/06(火) 05:14:07案件ではないかな。ところで話は変わるが、高齢者向きの関数型言語
というと何になるのかな。Windowsアプリを書きたいなんて言わない
人達。
0662デフォルトの名無しさん
2009/01/06(火) 09:00:130663デフォルトの名無しさん
2009/01/06(火) 09:12:480664デフォルトの名無しさん
2009/01/06(火) 12:05:06IT土方というのは専門性を持たずに手を動かすのが仕事の作業員のことで、
呼び名こそプログラマでも、専門知識を携えたプログラマとは大きく異なる。
土掘りしようがレンチ握ろうがキーボード叩こうが一緒の連中。
主に派遣。
0665デフォルトの名無しさん
2009/01/06(火) 12:50:14「頭寒足熱腹八分」。翻訳すると「気取らず、怠けず、欲張らず」くらいになるかな。
1970年代以降の社会では専門知識は現場で帰納的に身につけるもの。仮に前身が、
タクシー運転手であろうと、大工であろうと、あるいは雲助であってもね。
0666デフォルトの名無しさん
2009/01/06(火) 12:54:210667デフォルトの名無しさん
2009/01/06(火) 15:50:42今はmaximaをcommon lispから使ってるのですが
maximaよりも機能が豊富だったりするのでしょうか?
0668デフォルトの名無しさん
2009/01/06(火) 16:22:170669デフォルトの名無しさん
2009/01/06(火) 17:44:34それは好景気の浮かれた古い時代、どんどん経営拡大して人材が追いつかなかった時代の話。
現代は人材にもっとシビアになってきている。
それに〜1995年ごろまではソフトウェア的にはそれほど目覚しい進歩がなかったから、
覚えた知識や技術の劣化が遅かったから専門基礎教育を受けない現場叩き上げだけでも何とかやっていけた。
ところが1995〜1999年ごろに爆発的に情報技術が進歩しはじめ、
それまで現場でソフトウェア開発に携わってきた"叩き上げプログラマ"は新技術についていけずに、
プログラマ35歳定年説の元になったわけだ。
現在の大学の情報学科や情報工学科などはそういった経験を元にして教育カリキュラムを組んでいるわけだよ。
0670デフォルトの名無しさん
2009/01/06(火) 17:55:04もっともらしい大嘘乙
プログラマ35歳定年説ってもっと前からあったろうに。
0671デフォルトの名無しさん
2009/01/06(火) 18:04:39日本のSIとかがやってるのは、今でも右から左にデータを動かすだけの
ユーザプログラミングの代行であり、コンサル業務でしょ
上流にいる奴は業務知識や営業力、調整力が重要で
下流にいる奴は、SQLだの5年も経てば古びるようなフレームワークだの
製品だのの泡沫知識、アジャイルだのデザパタだのについていける程度の
オツムを持っていることだけが重要で、
そこには本物のCSなど影も形も無いように思えるよ
0672デフォルトの名無しさん
2009/01/06(火) 18:11:34あるよw
それがなかったら日本のIT沈没w
0673デフォルトの名無しさん
2009/01/06(火) 18:14:11それって研究所系でなくて?
不景気だと、すぐゼニカネにつながらないところは切られがちだよね?
ゲーム屋は、まだSIよりはまともに「開発」だろうとは思うが
0674デフォルトの名無しさん
2009/01/06(火) 18:56:13無視して沈没した例もあるし。
0675デフォルトの名無しさん
2009/01/06(火) 19:45:20残念だけど、その道の人からは下に見られてるよ。
0676デフォルトの名無しさん
2009/01/06(火) 20:12:150677デフォルトの名無しさん
2009/01/06(火) 20:19:30数学やらないようなものは科学じゃないよ。
0678デフォルトの名無しさん
2009/01/06(火) 23:14:370679デフォルトの名無しさん
2009/01/06(火) 23:22:33明確な違いはないよ。
特に情報工学と計算機科学の間には。
0680デフォルトの名無しさん
2009/01/07(水) 12:56:26二つ合わせるとそのくらい幅が広くなる。
0681デフォルトの名無しさん
2009/01/07(水) 14:45:400682デフォルトの名無しさん
2009/01/07(水) 17:15:020683デフォルトの名無しさん
2009/01/08(木) 07:03:140684デフォルトの名無しさん
2009/01/08(木) 09:18:110685デフォルトの名無しさん
2009/01/08(木) 12:49:430686デフォルトの名無しさん
2009/01/08(木) 12:54:32function pointというのもある
0687デフォルトの名無しさん
2009/01/08(木) 13:57:12知ってた?
A~Bだとフォックが1個
C~Dだと2個
F~だと3個なんだって...
ホント?
自称アゲチンが言ってたんだ。
0688デフォルトの名無しさん
2009/01/08(木) 14:44:080689デフォルトの名無しさん
2009/01/08(木) 19:09:13情報工学と計算機科学はEngineeringとScienceと言うより
EngineeringとMathmaticsと言うべきではなかろうか。
MathmaticsをScienceには含まないとした場合だが。
計算機科学はScience即ち自然科学や社会科学と比較して研究対象と
研究行為の相対位置が異なると言える。
>>675-677
また、所謂"ソフトウェア工学"はソフトウェアではなくソフトウェア開発
という人の営みを研究対象にしている点で情報工学と異なると言える。
むしろ既存のソフトウェアおよびその開発過程を"観察"するという点で
ソフトウェア工学は上に挙げたScienceに近いとも言える。
0690osiire
2009/01/09(金) 11:33:59computer science分かってる人も歓迎ですよぉ。
お給料はご相談ですが。
0691デフォルトの名無しさん
2009/01/09(金) 11:46:44飯島愛乙!
0692デフォルトの名無しさん
2009/01/09(金) 12:09:2061才でもいいかい?
0693デフォルトの名無しさん
2009/01/09(金) 12:28:52理学博士のニートですがいいですか
0694デフォルトの名無しさん
2009/01/09(金) 12:35:02「世界最速のインターネット回線を持っているのは75才のおばあちゃん」なんだぜwwwww111111”!!!W
0695デフォルトの名無しさん
2009/01/09(金) 12:43:13パソコンってなに?みたいな
0697デフォルトの名無しさん
2009/01/09(金) 13:50:11給料悪いし待遇悪いじゃん
さらにページにヒラギノフォント指定ってのがウザ過ぎる
Winにヒラギノ入れてる人のブラウザでヒラギノ表示したら悲惨なことになるの分かっててやってるのか?
0698デフォルトの名無しさん
2009/01/09(金) 14:11:49ほのかに香るブラック臭
0699デフォルトの名無しさん
2009/01/09(金) 14:46:44オープンソースプロジェクトの大半はニートがいないと成り立たないらしいし、
技術力は下手な職業プログラマ以上だったりするんだよな。
おまけに他の企業色に染まっていない。
もしその気にさせることができれば質の高い人材が発掘できそうだね。
0700デフォルトの名無しさん
2009/01/09(金) 19:24:560701osiire
2009/01/09(金) 21:38:20まぁ、給料・待遇についてはご相談という事で。ヒラギノは改善してみます。
>>698
OCamlを使いながらオブジェクト指向を強制する事は無いですよ。
>>700
FXとはいえ相手が大手ばかりなので普通です。ご安心を。
0702デフォルトの名無しさん
2009/01/09(金) 22:58:03質問です
FXはどうして怖いんですか?
0703デフォルトの名無しさん
2009/01/10(土) 09:41:420704デフォルトの名無しさん
2009/01/10(土) 10:37:47なぜ、MLなの? ここではそれが訊きたい。
0705デフォルトの名無しさん
2009/01/10(土) 11:13:240706デフォルトの名無しさん
2009/01/10(土) 11:17:000707デフォルトの名無しさん
2009/01/10(土) 11:18:38読んでみたけど、答えは得られなかったW
0708osiire
2009/01/10(土) 11:28:38具体的な金額までは答えられませんが、OCamlマスターなら即戦力として迎えたいと思います。
>>704
ビジネス的には色々と理由があるのですが、どれも後付けです。
要するに、型安全や代数的データ型やパターンマッチや高階関数といった特徴ゆえに、開発効率がよくて不具合が少なくなるからです。
特にOCamlはライブラリが揃っていて楽です。それ以上でもそれ以下でもないです。
0709デフォルトの名無しさん
2009/01/10(土) 11:44:02朗報だ。
0710デフォルトの名無しさん
2009/01/10(土) 11:51:33F#じゃあかん?
0711デフォルトの名無しさん
2009/01/10(土) 14:55:57所謂ベンチャーですか?
0712osiire
2009/01/10(土) 16:15:46F#で具体的な案件をこなした事はまだありません。だた、今後VisualStudioに標準搭載されてくれば、案件によってはF#を選択するかもしれません。
>>711
うちも小さい会社なのでよくベンチャーと言われるのですが、実質的にはベンチャーではなくスモールビジネスです。
0713デフォルトの名無しさん
2009/01/10(土) 19:11:57OCAMLコミュニティで知名度のある社員はいますか?
0714デフォルトの名無しさん
2009/01/10(土) 19:15:05それ重要だな
0715osiire
2009/01/11(日) 01:13:370716デフォルトの名無しさん
2009/01/11(日) 10:27:39その本良くなかったわ。
プログラミング in OCamlは良かった。
0717デフォルトの名無しさん
2009/01/11(日) 12:25:30店頭で見たけど、五十嵐淳さんの授業ページと本家ドキュメントだけで十分だと思ったから買わなかった。
言語解説書なんて今日日はやらないと思うなぁ。
0718デフォルトの名無しさん
2009/01/11(日) 12:30:28Haskell覚えようとするような奴が英語読めないとも思えないし、英語読めるなら本家ドキュメントぐらい読めるだろうし。
読んで理解できないような難しい文書でもないしな。
0719デフォルトの名無しさん
2009/01/11(日) 13:08:340720デフォルトの名無しさん
2009/01/11(日) 14:41:19英語読めないけどHaskell覚えようとするような奴ですが何か?w
0721osiire
2009/01/11(日) 15:04:05ただ、とにかく私はMLのようなすばらしい言語をもっと開発現場に普及させていきたいのです。
書籍の発行はそのための具体的な行動の一つです。
0722デフォルトの名無しさん
2009/01/11(日) 16:07:03Haskell本出せっていう要求は5〜6年ぐらい前の話。
0723デフォルトの名無しさん
2009/01/11(日) 17:15:33言語解説書も出版されないような言語は消え去る他ないだろう。
そういう意味でOCamlはクリアできてるんだから結構ではないか。
0724デフォルトの名無しさん
2009/01/11(日) 17:19:10OCamlにも不満はあるんだけどねぇ。
かといって言語を作る気はない。作った時点で満足して宣伝する気まで起こりそうにないから。
0725デフォルトの名無しさん
2009/01/11(日) 17:29:46OCamlもHaskellも一般人にとっては決定的に情報不足。
0726デフォルトの名無しさん
2009/01/11(日) 17:33:440727デフォルトの名無しさん
2009/01/11(日) 17:37:260728デフォルトの名無しさん
2009/01/11(日) 17:43:440729デフォルトの名無しさん
2009/01/11(日) 17:47:350730デフォルトの名無しさん
2009/01/11(日) 17:48:50camlp4だった
0731デフォルトの名無しさん
2009/01/11(日) 18:36:020732デフォルトの名無しさん
2009/01/11(日) 18:50:19ゴメンなさいね
英語わからんけど飯の種なんでやめられないですw
0733デフォルトの名無しさん
2009/01/11(日) 19:31:10お前みたいな質の低いプログラマがいるからこの業界なめられるんだよ。
分かったら土堀りでもやってろ。
0734デフォルトの名無しさん
2009/01/11(日) 19:34:51「五十嵐淳さんの授業ページと本家ドキュメントだけで十分」なんていう人が
いるから関数型がなめられるんでしょ。
0735デフォルトの名無しさん
2009/01/11(日) 19:37:18素朴な疑問だけど、Lisp系のマクロのような機能が無いOcamlじゃ
作成時間と共に開発効率が上がるようには思えないけど・・・
ある程度の腕があればライブラリーなんて持ってると思うし、
Gaucheとかと競合したら負けそうな希ガス…
0736733
2009/01/11(日) 19:51:19俺じゃねーしw
てか、入門Ocamlだっけ?あの程度の言語解説書ならいらねーよ。
俺が関数型言語を使うようになったのはMLを大学の授業で知ったのがきっかけだが、
別に参考書なんて一冊も買ってないぞ。立ち読みはするが。
初心者向きの言語解説書にはもはや価値がない。
ネット情報だけで十分なんだよね。
>>735
マクロがそんなに重要な機能には思えない。
大して作業効率にも反映されない。
Lisp系なら価値があるかもしれないが、ML系にはさほど意味はないだろうな。
0737デフォルトの名無しさん
2009/01/11(日) 19:59:24そうか、別人か。そんな気もした。それはともかく、
君はそれで学べたかも知れないが、それでは普及は
しないということ。
0738デフォルトの名無しさん
2009/01/11(日) 20:00:18オマエがマクロを知らないのは分かったから黙ってろw
0739733
2009/01/11(日) 20:07:21ゴミ本いくら増やしても普及はしないと思うね。
優れた海外の本の翻訳なら価値があると思うがね。
だからプログラマには英語が必須なわけだけど。
0740733
2009/01/11(日) 20:10:31ここで書いても仕方ないが、俺はとあるSchemeライブラリ作者だ。
Lisp系にある程度精通している。
MLでマクロを実装してもあまり価値はないよ。
0741デフォルトの名無しさん
2009/01/11(日) 20:10:52つーか、普及してほしいの?
MLが普及するぐらいならとっくにLispが世界を制覇してるよ
0742デフォルトの名無しさん
2009/01/11(日) 20:14:19Haskell > SML > Scheme > Common Lisp
0743デフォルトの名無しさん
2009/01/11(日) 20:15:31底の浅い知ったかだねw
マクロで開発効率を上げるといえばライブラリなんか関係ないんだよ。
0744デフォルトの名無しさん
2009/01/11(日) 20:21:24Haskellのポイントフリースタイルならそもそもマクロは必要ないと思えると思うんだがね
0745デフォルトの名無しさん
2009/01/11(日) 20:22:10Haskellなんかが評価されてるのって
参照透明だからマルチコア当り前の時代のプログラミングに向いてるっていうか、
Lispとは勝負所が違う気がする
0746デフォルトの名無しさん
2009/01/11(日) 20:27:24勝負どころの振り分けはどのように?
0747デフォルトの名無しさん
2009/01/11(日) 20:27:45え?俺にレス?
そういう方向でも、やはりMLに目は無いよね
素直にErlang使っとけって話になるじゃん
0748デフォルトの名無しさん
2009/01/11(日) 20:32:01Erlangでプログラミングしてて分かったわ。
0749デフォルトの名無しさん
2009/01/11(日) 20:32:58タコ!マクロ生成マクロに煩雑もクソもあるかw
0750デフォルトの名無しさん
2009/01/11(日) 20:41:24鯖で強いErlangは勝ち組
0751デフォルトの名無しさん
2009/01/11(日) 20:41:330752デフォルトの名無しさん
2009/01/11(日) 20:44:24使うけど。
それはさておき、まぁLispのマクロそのものということじゃなくて、
それ相当のものがあるかってことでしょ。
たとえばRubyは、eval とかその他動的な機能でALGOL系の
言語での 「マクロ相当」 を導入しようという試みだと思うけど
(それがどれくらい成功といえるかは意見が分かれるとして)
Ocamlとかはそれ相当の機能や試みとしてはなにがあるの?
camlp4を知らないで書いてるけど。
0753デフォルトの名無しさん
2009/01/11(日) 20:45:57っつーか、デフォでそういうオモチャがついてる
0754デフォルトの名無しさん
2009/01/11(日) 20:48:28オモチャっていうのは、実用に堪えないっていうニュアンス?
0755デフォルトの名無しさん
2009/01/11(日) 20:49:29いや、オマケ&デモって意味
本気で使わせたいんなら、最初からそれを言語仕様にするか
トップレベルに組み込むんじゃね?
まあ、単に俺がそう思っただけで、詳しいことは白根
0756デフォルトの名無しさん
2009/01/11(日) 20:59:17Scheme > Common Lisp > Haskell > SML/OCaml
0757デフォルトの名無しさん
2009/01/11(日) 21:37:10>>690のように仕事で使う上での「開発効率」を考えたことある?
0758デフォルトの名無しさん
2009/01/11(日) 21:47:05ゲームやGUIアプリの類に関数型は正気とは思えんし
ドカタ仕事の類にも向いてねえだろ
ド汚くてもいいから仕事を簡単にやっつけられるってのが「開発効率」じゃねえの?
0759デフォルトの名無しさん
2009/01/11(日) 22:02:41だから他の言語にはない。
0760デフォルトの名無しさん
2009/01/11(日) 22:12:550761デフォルトの名無しさん
2009/01/12(月) 00:41:18>>735
>>760
Dylanはscheme/Lispとの差別化が出来なかったんだよね。むしろ劣化版。
最終的にObj-Cでいいやってことになって中止になったし。
0762デフォルトの名無しさん
2009/01/12(月) 00:41:42むしろ、あなたのような人が人間の質として低い気がしますが?
英語ができた方がいいとは思いますが、必須とは思いませんね。
0763デフォルトの名無しさん
2009/01/12(月) 00:48:25ところがどっこい、Unreal Engineの開発者がHaskellに注目してたりするんだ。
確か国内のゲーム開発者が、関数型に注目してるという記事も以前見かけた。
正気じゃないと言うほどでもないと思うけど。
それと、汚い仕事をやっつけ、って、割と関数型のフィールドじゃない?
関数こねくり回すのが本領の訳だしさ。
0764デフォルトの名無しさん
2009/01/12(月) 00:52:030765デフォルトの名無しさん
2009/01/12(月) 01:16:12英語必須ですよ。
英語ドキュメント避けて日本語ドキュメント探しているうちに日が暮れるような非効率な奴は3流
0766デフォルトの名無しさん
2009/01/12(月) 07:49:20ことは稀だと思いますよ。通信規格のようなものは参照しま
すが。
0767デフォルトの名無しさん
2009/01/12(月) 08:49:25ところとかあると挫折しそうになる。
0768デフォルトの名無しさん
2009/01/12(月) 08:54:540769デフォルトの名無しさん
2009/01/12(月) 08:59:00700ページとか厳しい。
0770デフォルトの名無しさん
2009/01/12(月) 08:59:140771デフォルトの名無しさん
2009/01/12(月) 09:41:39>>>757-758
> >>735
お前は何が言いたいのだ?
0772デフォルトの名無しさん
2009/01/12(月) 12:09:39documentって英単語は書き物全般を指すと思うんだが?w
最新の論文はもちろんのこと、RFCの一部なども日本語に訳されていないこともあるから、
やっぱり英語ができなきゃ支障がでるね。
特にアルゴリズムの論文は読むことも多いんじゃないかな。
0773デフォルトの名無しさん
2009/01/12(月) 12:18:14私もあなたも同じだと思うけど、このム板に書き込んでいるような
奇人プログラマでないかぎり英文のドキュメントなんて読まないと
いうことです。研究者は別ですよ。
0774772
2009/01/12(月) 12:22:02どっちかっつーと天文台に住んでる実験系の物理屋だ。
プログラミングもするからプログラマで通してる。
0775デフォルトの名無しさん
2009/01/12(月) 12:29:370776デフォルトの名無しさん
2009/01/12(月) 12:29:41という主旨の書き込みがありました。しかし、英文情報を渉猟して
いる方が珍しいのであって、当然そんなことをしていない人の中に
一流の人はいっぱいいると確信できるので、ちょっと反撥してみま
した。
0777デフォルトの名無しさん
2009/01/12(月) 12:32:13一流なら当然名前は売れてるんだろ?
例を挙げてくれよ。
0778デフォルトの名無しさん
2009/01/12(月) 12:33:29英文を読めない人間は、プログラマとしては情報弱者であることが
確定したようなものだ
そんな「一流のプログラマ」などあり得ないと俺なら確信できるが
英論文を読めない研究者などあり得ないのと同じだと考えてよい
0779デフォルトの名無しさん
2009/01/12(月) 13:02:04日本発の情報がウンコなので英文を読むほかないのです。
0780デフォルトの名無しさん
2009/01/12(月) 13:04:30昔と今じゃ状況が違うんだよ、馬鹿
ノーベル賞剥奪しちまえよ
0781デフォルトの名無しさん
2009/01/12(月) 13:25:370782デフォルトの名無しさん
2009/01/12(月) 13:27:310783デフォルトの名無しさん
2009/01/12(月) 13:27:53「英語が読めなくても大丈夫」と主張するやつは駄目だな。
0784デフォルトの名無しさん
2009/01/12(月) 13:30:28中学以来英語教育を受けてる筈なんだしね
まあネイティブ同然に読めなくてもそれは仕方が無いが
誰もそこまでは言ってない
0785デフォルトの名無しさん
2009/01/12(月) 13:33:47何がだめだったんだろ。
言語体系の違いか?
0786デフォルトの名無しさん
2009/01/12(月) 13:36:45日本語をファインマンに教えていたのが朝永の研究室の連中だったんだよね。
日本語の教え方がへたくそだったんじゃないかな。
それで、ファインマンもうんざりして日本語習得あきらめたんじゃないかと思うね。
0787デフォルトの名無しさん
2009/01/12(月) 13:41:140788デフォルトの名無しさん
2009/01/12(月) 13:51:09この馬鹿が。
日本語は世界でも最も難しい言語の一つなんだよ。
英語みたいに単純明解ではないのだよ。
0789デフォルトの名無しさん
2009/01/12(月) 14:00:26日本語:述語を中心とした後置型(Forthチック)
だとオモ。と無理矢理スレに繋げてみる。
0790デフォルトの名無しさん
2009/01/12(月) 14:04:48並川じゃなくて益川
漢字も読めないようじゃ現場では使えないな
0791デフォルトの名無しさん
2009/01/12(月) 14:57:09俗説
0792デフォルトの名無しさん
2009/01/12(月) 14:59:530793デフォルトの名無しさん
2009/01/12(月) 15:03:06日本語が英語に比べて体系化しにくい複雑な言語だということなんだよね。
英語が世界中で愛用されて、日本語が日本国内でしか使われない理由が良く分かるよ。
やっぱ言語はシンプルじゃないと駄目ってことだ。
Scheme最強!!
0794720
2009/01/12(月) 15:24:53>>720 英語読めないけどHaskell覚えようとするような奴ですが何か?w
>>726 英語も分からないような人はプログラミングなんかしなくていいよ
>>732 英語わからんけど飯の種なんでやめられないですw
>>733 お前みたいな質の低いプログラマがいるからこの業界なめられるんだよ。
>>762 英語ができた方がいいとは思いますが、必須とは思いませんね
>>765 日本語ドキュメント探しているうちに日が暮れるような非効率な奴は3流
つまり、
1.英語読めない奴は3流である
2.3流の奴はプログラミングしなくていい
3.プログラミングを仕事にしてるなら転職しろ
って、こってすね?
1.はともかくとして2.と3.には同意しかねますね。
>>787
スレチ失礼しました。
私はこのレスで終了とします。
0795デフォルトの名無しさん
2009/01/12(月) 15:31:370796デフォルトの名無しさん
2009/01/12(月) 15:59:16manだのinfoだのMSDNだのコンパイラの吐くメッセージだのを
「英文なので自分には読めません」で仕事になるのか分からないが
それで済んでいるのならある意味幸運なことだ
俺には関係ないしな
0797デフォルトの名無しさん
2009/01/12(月) 16:23:47どんな自然言語もそう。
完全に体系付けできる言語は人工言語だけ。
0798デフォルトの名無しさん
2009/01/12(月) 16:55:04「Javascript大系」出すのは不可能。
0799デフォルトの名無しさん
2009/01/12(月) 17:24:34つまり例外が多すぎる、と。
0800デフォルトの名無しさん
2009/01/12(月) 19:14:290801デフォルトの名無しさん
2009/01/12(月) 19:17:420802デフォルトの名無しさん
2009/01/12(月) 23:56:120803デフォルトの名無しさん
2009/01/13(火) 00:01:31[1..10]みたいな記法を使えるようになるんでしょうか
0804デフォルトの名無しさん
2009/01/13(火) 00:46:07流行に流されてるなぁ
0805デフォルトの名無しさん
2009/01/13(火) 00:53:19lablgtkとかはいいんだけど、自分で使う分にはいらないよね、オブジェクト指向要素。
でもそこを否定すると"O"Camlじゃなくなるww
0806デフォルトの名無しさん
2009/01/13(火) 01:10:01発展してるの?というか、継続的に開発されているの?
0807デフォルトの名無しさん
2009/01/13(火) 02:29:32副作用使いまくり、オブジェクト指向使いまくりで
関数型の要素もある手続き型言語ですみたいな感じで書いてたりするんだろうなあ。。。
0808デフォルトの名無しさん
2009/01/13(火) 03:58:12なんか偏見?そりゃHaskellよりはゆるいかもしれないけど。
バリバリのOCaml使いが作ったと思われるJane Street Capitalのcoreライブラリとか読んでもそんな感じはしないよ。
0809デフォルトの名無しさん
2009/01/13(火) 04:00:47バリバリのC使いがにわかOCaml使いになってプログラムしたんだろ。
0810デフォルトの名無しさん
2009/01/13(火) 07:01:13mldonkeyとか読んだ。でもあんま沢山のアプリを読んでないのですまん。
0811デフォルトの名無しさん
2009/01/13(火) 09:07:42wikipediaひとつみてもフランス語が断然情報量が多いね。
フランス語
http://fr.wikipedia.org/wiki/Objective_Caml
日本語
http://ja.wikipedia.org/wiki/Ocaml
英語
http://en.wikipedia.org/wiki/Objective_Caml
0812デフォルトの名無しさん
2009/01/13(火) 09:39:21http://d.hatena.ne.jp/camlspotter/20080906/1220723583
http://d.hatena.ne.jp/camlspotter/20080908/1220846961
0813デフォルトの名無しさん
2009/01/13(火) 10:25:503日じゃ無理?
0814デフォルトの名無しさん
2009/01/13(火) 12:24:203時間ぐらい
0815デフォルトの名無しさん
2009/01/13(火) 18:09:270816デフォルトの名無しさん
2009/01/13(火) 18:17:27lispマスターがOCamlわかるのには大体3週間ぐらい。(これはマジレス)
lispわかってる人がOCamlマスターできないと悟るのが3分くらい。
0817デフォルトの名無しさん
2009/01/17(土) 20:38:13階乗計算を2通りやってみた。
http://codepad.org/5vBjk9Cm
どっちの書き方の方が多い?
0818デフォルトの名無しさん
2009/01/17(土) 21:00:36| 0 -> 1
| x -> x*fac(x-1);;
はどうよ?
0819デフォルトの名無しさん
2009/01/17(土) 21:13:25同意。
0820デフォルトの名無しさん
2009/01/17(土) 21:16:503通り
http://codepad.org/5bAL8aRu
0821デフォルトの名無しさん
2009/01/17(土) 21:54:19http://codepad.org/UGqmVJcb
0822デフォルトの名無しさん
2009/01/17(土) 22:01:22C や Java だと、その括弧は関数の引数を括るための特別な記号だけど、
OCaml だとそういう意味はなく、単に演算の優先順位を示す普通の括弧だから
2 * (3 + 4) の括弧に空白を入れるのと同じ理由で fact の後の括弧にも空白を入れる。
0823デフォルトの名無しさん
2009/01/17(土) 23:08:59http://codepad.org/i8vprhP5
0824デフォルトの名無しさん
2009/01/17(土) 23:20:24とか書けたらいいのにと思いますた
遅延計算で
0825デフォルトの名無しさん
2009/01/17(土) 23:23:22http://codepad.org/x8n2Lk8r
0826デフォルトの名無しさん
2009/01/17(土) 23:51:52http://codepad.org/oGJ4Mwzh
0827デフォルトの名無しさん
2009/01/17(土) 23:53:36相互再帰を入れれば全部で6通り。
0828デフォルトの名無しさん
2009/01/18(日) 00:24:56Haskellならできるね
fact n = foldl1 ( * ) [1..n]
0829デフォルトの名無しさん
2009/01/18(日) 00:35:06from operator import mul
fact = lambda n: reduce(mul, xrange(1, n+1))
0830デフォルトの名無しさん
2009/01/18(日) 15:24:18http://codepad.org/vE2CJfG0
0831デフォルトの名無しさん
2009/01/18(日) 20:08:54http://codepad.org/VJydA6mc
0832デフォルトの名無しさん
2009/01/18(日) 20:16:02それ>>164まんまw
0833デフォルトの名無しさん
2009/01/18(日) 20:16:180834デフォルトの名無しさん
2009/01/18(日) 20:32:39ありがとう。どうやらcodepadでは
#use "topfind";;
#require "extLib";;
が使えないみたい。
0835デフォルトの名無しさん
2009/01/22(木) 19:43:52http://codepad.org/v0ANkxs1
(* helloオブジェクトのメソッドprintを呼び出す。 *)
hello#print ;;
0836デフォルトの名無しさん
2009/01/22(木) 19:58:40http://codepad.org/kJsrhxd6
let hello = new c_hello ;;
0837デフォルトの名無しさん
2009/01/22(木) 20:30:48http://codepad.org/Q1xMkrvt
0838デフォルトの名無しさん
2009/01/23(金) 19:01:06http://codepad.org/Ggh5Z9mp
0839デフォルトの名無しさん
2009/01/24(土) 05:42:37else
0840デフォルトの名無しさん
2009/01/24(土) 05:44:24和集合は
else h :: union t b
よりも
else union t (h::b)
のがいいんじゃね?
0841デフォルトの名無しさん
2009/01/24(土) 16:43:36いいわけないだろ。
hが加わった分だけ再帰に余計な計算が加わって遅くなる。
ばか?
0842デフォルトの名無しさん
2009/01/24(土) 16:48:47入力が正しくないときなんて考えるだけ無駄か。
0843デフォルトの名無しさん
2009/01/24(土) 17:20:19>>840方式なら、計算ステップ数は同じで、末尾再帰になりませんか?
>>838のコードは末尾再帰になっていない分効率が悪いですよね
0844843
2009/01/24(土) 17:21:39再帰のステップ数は変わらないけど、memberpの計算量が増えていくのですね
理解しました
0845デフォルトの名無しさん
2009/01/24(土) 21:43:51http://codepad.org/NLLYr3fJ
http://codepad.org/KnzRmJjp
よくそんな嘘を平気で言えたもんだw
0846デフォルトの名無しさん
2009/02/05(木) 13:14:19どういうものなのか教えていただけませんか?
0847デフォルトの名無しさん
2009/02/06(金) 09:08:33linux, gcc, ocaml3.11, OMake/Makefile, emacs, tuareg1.46.2,
80chars/line, indent 2chars
とか、そういうこと知りたいの?
0848デフォルトの名無しさん
2009/02/06(金) 10:06:070849デフォルトの名無しさん
2009/02/06(金) 22:25:20システムキッチン/エアコン/冷房/暖房/BSアンテナ/CATV/エレベータ/
オートロック/収納/フローリング/分譲賃貸/駐輪場/ガス2口/浴室乾燥機/
シャワー付トイレ/バルコニー/外壁タイル/クロゼット/宅配ロッカ/CS/照明/
インターネット接続可
0850デフォルトの名無しさん
2009/02/06(金) 22:34:40ログオンしてemacs起動してサーバーサイドを作成してる。
0851sage
2009/02/07(土) 08:21:54多くの人は同じじゃね?
0852デフォルトの名無しさん
2009/02/07(土) 13:00:09・コンパイラに○○、
・デバッグのために○○と○○、
・エディタには○○、
・IDEを使う場合は○○、
・開発用と検証用のPCを分けたり、
・開発用・検証用PC間のデータ共有にLANを使ったり、
・通信にRS232Cを使ったり、
・コンパイルするまえに検証したりするかどうかとか、
・バグが見つかったときの対処方法など、
ですね。
ほかにも必要な要素があればぜひ付け加えてください。
どういうプログラムを作るかにも因るかもしれませんが、
要するにどういう種類のプログラムを作るときどういう手順を踏んでいるのか、
ということを教えていただければ幸いです。
0853852
2009/02/07(土) 13:03:48ソースコード管理や配布などについても教えていただければ幸いです。
0854デフォルトの名無しさん
2009/02/07(土) 20:34:010855デフォルトの名無しさん
2009/02/08(日) 07:22:46デバッグは主にextlibのdumpで画面表示. 超絶困ったときにはocamldebug.
エディタはemacs. IDEはいまのところ使ってない.
全体をコンパイルする前に大きく編集したファイルは-iオプションで個別に型をチェック.
-annotオプションは殆ど常に付けていて、謎な動きで困ったときには型とかも参考にしながら動作を追う.
上で抑えられているはずの(match文とかの)ありえない遷移にはassertとかも付けている. ヒットしたことないが.
0856デフォルトの名無しさん
2009/02/08(日) 10:52:48> ・開発用と検証用のPCを分けたり、
> ・開発用・検証用PC間のデータ共有にLANを使ったり、
> ・通信にRS232Cを使ったり、
これは OCaml と何の関係もないと思うが。必要な人はそうするだけの話でしょう。
> ・コンパイルするまえに検証したりするかどうかとか、
質問の意図がよくわかりません。
コンパイラに通す、という事以上に意味のある検証を、
コンパイラに通す前にできるとは思えませんが。
通した後にモデルチェッカとか定理証明器でさらに検証する、
というのなら判りますが、実際やっている所を聞いたことがありません。
あれば是非話を伺いたいです。
> ・バグが見つかったときの対処方法など、
printf debug は馬鹿にできない。
assert して backtrace とかかな?
最悪 ocamldebug。gdb は意外といける。
0857デフォルトの名無しさん
2009/02/08(日) 11:37:12>>853
質問の対象が広すぎて良い答が得られるとは思えません。
- なぜこういう質問をしたくなったのか (会社で OCaml を導入しようとしているとか)、
- 現在こういう手順で他言語で開発を行っている、OCaml を使っても同じようにできるか知りたい
とか、背景説明していただかないと、答える側としても的を得た答を出しにくいです。
0858852
2009/02/08(日) 12:09:49明確な答えは求めておりません。
質問というよりは
「オレはこういうやり方で開発やってるぜ」
という話が聞けたらなぁという感じですね。
どちらかというとブレインストーミングに近いかも。
0859デフォルトの名無しさん
2009/02/08(日) 20:44:49こんなことになっている、ということはその原因の候補は……
と考えるだけでもわりととれるもんだよ、バグ。
0860デフォルトの名無しさん
2009/02/08(日) 20:57:18・デバッグのはprint
・エディタにはEmacs + caml-mode
・IDEは使わない
・コンパイルするまえに検証 <- ??? そんなことできるの?
・バグが見つかったときの対処方法 printデバッグ
0861デフォルトの名無しさん
2009/02/08(日) 22:50:040862デフォルトの名無しさん
2009/02/08(日) 23:29:520863デフォルトの名無しさん
2009/02/08(日) 23:35:130864デフォルトの名無しさん
2009/02/08(日) 23:51:490865デフォルトの名無しさん
2009/02/09(月) 07:42:470866デフォルトの名無しさん
2009/02/09(月) 12:34:14それは深読みすぎ
0867デフォルトの名無しさん
2009/02/09(月) 21:43:11それでよくね?セーブしてコンパイル の時間がそんなに惜しい?一瞬でしょ
0868デフォルトの名無しさん
2009/02/11(水) 00:08:11-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.
このレスポンスを一度体験すると割とはまる。
let ( ) = print_string "Hello World\n"
ってのは何を意味するのですか? let の後には関数名とか変数名とかじゃないのですか?
let ( ) = ってのがわかりません。
教えてください。
0870デフォルトの名無しさん
2009/02/24(火) 12:04:36let 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 には
() しか値がないから、マッチは必ず成功する。なので、コンパイラはわざわざこの
マッチを行うようなコードは生成しない。結果、この式は、右辺を実行するだけ。
Ocamlにパターンマッチがあるのは知ってましたが、これがそうだとは気づきませんでした。
詳しくありがとうございました。
0872デフォルトの名無しさん
2009/02/28(土) 19:37:03とかの方がわかりやすいと思うけどなあ。俺はこっち(let main = ...)を使っている。
let () = ... ってなんでこうするんだろ。何かメリットあるのかな?
何にせよ右側の式が評価されることにはかわらないからどっちでもよいとは思うが。
0873デフォルトの名無しさん
2009/02/28(土) 19:46:51だって、将来使わないものをわざわざ定義したら、後で読み返したときややこしくなるじゃん。
0874デフォルトの名無しさん
2009/02/28(土) 21:34:47関数型言語の良い所は名前をイチイチ考えなくて良い事だよね。
0875デフォルトの名無しさん
2009/02/28(土) 21:44:440876デフォルトの名無しさん
2009/02/28(土) 22:02:320877デフォルトの名無しさん
2009/02/28(土) 23:06:580878デフォルトの名無しさん
2009/03/01(日) 09:30:13名前を付けたくないなら、普通 let _ = ... じゃね?
0879デフォルトの名無しさん
2009/03/01(日) 14:04:44どこで生まれたかとんと見当がつかぬ。何でも薄暗いじめじめした所で他の関数に渡された事だけは記憶している。
0880デフォルトの名無しさん
2009/03/01(日) 14:08:470881デフォルトの名無しさん
2009/03/01(日) 20:51:42関数型言語でそれをやると馬鹿にされそうで、ためらってしまうな
0882デフォルトの名無しさん
2009/03/01(日) 21:32:47unitを返すのが分かるなんて 何て素敵な!
0883デフォルトの名無しさん
2009/03/02(月) 09:44:11>>882 の通りで、
let _ = Printf.printf "%d %d" 1
のようなコードを書いて、先生、何も起こらないんですが、と聞かれたことがある。
そりゃ見た目何も起こりませんがな。
0884デフォルトの名無しさん
2009/03/02(月) 12:06:10let _ = ...
の場合、副作用がなく返り値に意味がある別の関数を誤って呼んでしまうミスを見つけづらい。
たとえば 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 () = ...
なら、そのミスも型検査で検出できる。
0885デフォルトの名無しさん
2009/03/16(月) 09:11:080886デフォルトの名無しさん
2009/03/31(火) 20:32:14http://alain.frisch.fr/soft.html#patches
の patch_record が凄く魅力的なんだけど、同じことを camlp4 で
できないかな。
0887デフォルトの名無しさん
2009/04/01(水) 17:52:22local 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
0888デフォルトの名無しさん
2009/04/08(水) 15:10:44コピペだけど
【手続き型】
吾輩は猫である。
名前はまだ無い。
どこで生れたかとんと見当がつかぬ。
何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。
吾輩はここで始めて人間というものを見た。
【関数型】
人間というものを始めて見た薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶しているがどこで生まれたかとんと見当がつかず名前がまだ無い猫である吾輩。
0889デフォルトの名無しさん
2009/04/08(水) 19:53:44【手続き型】
吾輩は猫である。
親ゆずりの無鉄砲で子供の頃から損ばかりしている。
「おい、地獄さ行ぐんだで!」
ウスウスと目を覚ました時、蜜蜂の唸るような音は、まだ、その弾力の深い余韻を、私の耳の穴の中にハッキリと引き残していた。
国境の長いトンネルを抜けると雪国であった。
名前はまだない。
0890デフォルトの名無しさん
2009/04/09(木) 16:10:180891デフォルトの名無しさん
2009/04/09(木) 19:16:00SML/NJで、use文のカスケードではロードが厳しくなってきたので、
CMに移行しようとしているのですが、以下の点で困っています。
(1) 対話型環境を使って計算したい。そのため、トップレベルに関数を
展開したいが、.cmにはトップレベル関数・値を書けない。
今のところ、open XXX; がならんだ .smlを作って、これをuseしている。
(2) 中置演算子の割り当てをトップレベルに置きたい
目的は、(1)と同じ。こちらは、実現方法が見つからない。
0892デフォルトの名無しさん
2009/04/26(日) 17:14:43レイトレースのベンチマークで C++ と勝負できる位置にいるのはなんで?
0893デフォルトの名無しさん
2009/04/26(日) 20:17:02関数型言語は手続き型言語より最適化しやすいよ
関数型は中間表現で CPS 使ってる奴が多いから、 気合いが入って
なくても SSA 使ってる手続き型言語程度のコードは吐き出しそうな
気がする
fortran を除くと、手続き型言語のコンパイラの内部表現に SSA を
使うのが一般的になったのは、わりと最近じゃなかったっけ?
gcc だと 4 系列から SSA だっけか?
0894デフォルトの名無しさん
2009/04/26(日) 20:46:10immutableにするとMapReduceみたいにナイスに並列化も出来てクールだぜというのはわかったんですが、その結果とかで何処かにステートのチェンジが起きますよね?
Haskellのゲームかなんかでキャラの移動とかされた結果のそのシーンの状態を新しいWorldとして作っていくことでimmutableを維持してるとか言ってたんですが、業務アプリとかだと同なるんざんしょ。
別の記事か何かで、全体のデータ構造をobject-oriented西といて、その間の処理とかをfunctionalにするのが現実的だとかも言ってたんですが。
教えてエロイ人
0895デフォルトの名無しさん
2009/04/29(水) 00:17:23させたいときって、どうすればいいんですか?printの引数はstring型でsring
にするにはInt.toString(a)などとすればできますが、intとchar型くらいしかできませんよね?
新しくつくった型には使えないのでどうすればよいかわからなくて・・・
誰か教えて下さい。
0896デフォルトの名無しさん
2009/04/29(水) 07:05:490897デフォルトの名無しさん
2009/04/29(水) 09:25:160898デフォルトの名無しさん
2009/04/29(水) 22:16:45普通は関数的なデータ構造では更新後と更新前が「ある程度共有される」。
たとえばリスト構造の先頭のほうを作り直す場合とかそうでしょ。
なおかつ共有されちゃっててもこまらないのはデータがimmutableだからこそだともいえる。
そしていろいろなデータ構造でimmutableでありながらも空間効率や時間効率のいいアルゴリズムが開発されてる。
Haskellのゲームかなんかで云々っていうのもデータを毎回全部作り直すという話じゃないと思うよ。
0899デフォルトの名無しさん
2009/05/01(金) 20:03:46他の言語経験が無くOCamlがわからない人でもついていけますか?
0900デフォルトの名無しさん
2009/05/01(金) 20:24:05もう少し高度な機能が知りたくなったら「プログラミング in OCaml」。
0901デフォルトの名無しさん
2009/05/02(土) 01:25:00ぱっと思いついたのは、print関数自作かSMLFormat使う
0902デフォルトの名無しさん
2009/05/09(土) 19:04:23ML系またはHaskell系言語でGUI開発に便利なRAD環境が充実している言語って何でしょうか?
できれば個人的なお勧め開発環境も教えていただければうれしいです。
0903デフォルトの名無しさん
2009/05/09(土) 19:22:560904デフォルトの名無しさん
2009/05/09(土) 19:37:350905デフォルトの名無しさん
2009/05/09(土) 22:12:060906デフォルトの名無しさん
2009/05/09(土) 22:30:470907デフォルトの名無しさん
2009/05/11(月) 11:28:080908デフォルトの名無しさん
2009/05/11(月) 14:22:490909デフォルトの名無しさん
2009/05/11(月) 15:00:29で?
0910デフォルトの名無しさん
2009/05/11(月) 15:01:42誰も強制なんかしてないんだし。
ここでそんなこと表明する意味がわからん。
0911デフォルトの名無しさん
2009/05/11(月) 16:25:14インストールするとき、最近はGUIツールキットまで一緒に入れようと
するのが結構あってうざいんだよね。幸いML関連でそういうのにあたった
ことはないけど、こないだMacPortsでSWI-PrologとErlangを入れたら
いろいろ勝手に入って来て大変だった。オプションでも外せないし。
将来lablgtkなんかを強制されるようになったらOCaml捨てたくなる。
こっちは今後もコマンドラインだけでひっそり生きていきたいんだから
ほっといてほしい。
0912デフォルトの名無しさん
2009/05/11(月) 16:42:41GUI無きゃないで、
「今時、言語側でdefaultでGUIぐらいつけろ。」
とか言う人出そうだし。
オメーン所の、パッケージ作成者に言うことだろうが。
0913デフォルトの名無しさん
2009/05/11(月) 16:50:45もしデフォルトで付いていればインストールの手間もなくなるし、
公式お墨付きということでヒューマンインターフェースが共通化されて利用者にとって便利になる。
どうしてもそれに不満があれば別のライブラリをインストールすればいいだけのことだし。
言語にGUIライブラリがくっついていたら何が不満なのかわからん。
容量にしてもインストール時間にしても対して違わない。
処理系を自前でコンパイルしてるやつは多少コンパイル時間が長くなるが、些細な問題だよな。
0914デフォルトの名無しさん
2009/05/11(月) 17:53:25たとえば、SWI-Prologのインストールで入ったライブラリのために、
別の言語のインストールでエラーになるということはあるよ。
0915デフォルトの名無しさん
2009/05/11(月) 17:56:07入れられるとうっとおしい、とか、サーバサイドアプリで、サーバには
あれこれ入れたくないとか、パッケージ管理システムがバイナリベース
じゃなくてゴリゴリコンパイルするのでやってられない、とか。
(パッケージのメンテナが)簡単に分離できるような構成にしておいて
ほしい、という要望はありなんじゃないか?
0916デフォルトの名無しさん
2009/05/11(月) 18:10:000917デフォルトの名無しさん
2009/05/11(月) 18:20:41MacPortsならパッケージ作成者がGUI無しのvariantsを用意すればいいだけの
話だよな。それが嫌だったらパッチ書いて送るしかないだろ。
0918デフォルトの名無しさん
2009/05/11(月) 18:21:16> (パッケージのメンテナが)簡単に分離できるような構成にしておいて
> ほしい、という要望はありなんじゃないか?
それはアリだな
0919デフォルトの名無しさん
2009/05/11(月) 18:28:08X関連をいろいろ入れろと要求するのは勘弁してほしいよね。
あくまで言語を入れたいんだからGUIはあくまでオプションにしていてほしい。
こっちはGnomeみたいなリッチなデスクトップじゃなくてまだtwmなんだよ。
0920デフォルトの名無しさん
2009/05/11(月) 19:12:50twmって割と重くて使いにくいと思ってたんだがまだ使ってる人いたんだww
みんなawesomeとかfluxboxとかに移行しちゃったと思ってた。
0921デフォルトの名無しさん
2009/05/11(月) 19:24:48言語は片っ端から使ってみているのだけど。
# 言語もある意味UIの一種だというツッコミを受けそうだ :-)
0922デフォルトの名無しさん
2009/05/11(月) 19:39:25どうせ論文にもならないような研究ごっこやって妄想して遊んでるだけだろ。
0923デフォルトの名無しさん
2009/05/11(月) 21:38:300924デフォルトの名無しさん
2009/05/11(月) 21:44:550925デフォルトの名無しさん
2009/05/11(月) 22:25:07俺は自宅で10台ぐらいのクラスタで論文にできる研究やってるよ
0926デフォルトの名無しさん
2009/05/11(月) 22:27:37査読するたびにうんざりする
0927デフォルトの名無しさん
2009/05/11(月) 22:35:02InfiniBandか10GbEか分からんけど、電気代凄そうだな
0931デフォルトの名無しさん
2009/05/11(月) 22:58:290932デフォルトの名無しさん
2009/05/12(火) 00:46:290933デフォルトの名無しさん
2009/05/12(火) 12:42:55macports使ってるけど、Xがからまないと確かに気楽だなあ。
macportsだったら、swi-prolog-liteがおすすめ。
0934デフォルトの名無しさん
2009/05/12(火) 13:12:16ライブラリが豊富なのが魅力で最近やっとSML/NJからOCamlに移行したんだが、
SMLで書いたコードを書き換えるのが結構面倒。
文法的にもOCamlって面倒臭く感じるんだけど、単なる慣れの問題?
0935デフォルトの名無しさん
2009/05/12(火) 13:20:43何が面倒なのかわからんが、camlp5 には pa_sml があるのでそれを使ってみ?
0936デフォルトの名無しさん
2009/05/12(火) 14:15:41let funcName = function ... | ... のように書くのが面倒に思えたんで。
確かにSMLにも冗長な部分はあるし、慣れだとは思うんだが。
何らかのトランスレータはあると思っていたのだが、camlp5なんて便利なものが
あったとは。2000行程のSMLコードをうまく変換出来たよ。どうもありがとう。
0937デフォルトの名無しさん
2009/05/12(火) 14:50:17どうでもいいけど、計算そのものの研究ならクラスタであれば台数は関係ないのでは?
0938デフォルトの名無しさん
2009/05/12(火) 16:03:34ホントに変換できたんだ!知らずに教えといてすまんが、使ったことなかったんで。
0939デフォルトの名無しさん
2009/05/12(火) 16:45:46camlp5 pa_sml.cmo pr_o.cmo -impl MyModule.sml
で変換できた。printをprint_stringに置換する必要はあったけど。
まじで助かった。
0940デフォルトの名無しさん
2009/05/12(火) 17:41:590941デフォルトの名無しさん
2009/05/12(火) 23:47:13科学技術計算を中心にした関数型言語の入門書でなにかいいのありますか?
0942デフォルトの名無しさん
2009/05/13(水) 00:31:280943デフォルトの名無しさん
2009/05/13(水) 14:36:30なぜ自宅で?
まともな研究じゃないな
0944デフォルトの名無しさん
2009/05/13(水) 14:37:240945デフォルトの名無しさん
2009/05/13(水) 14:38:10早ッ!!
0946デフォルトの名無しさん
2009/05/13(水) 14:39:01Harrop の本なんか読むなよ、頼むから。
0947デフォルトの名無しさん
2009/05/13(水) 14:57:42大学にいる人間じゃないから、そういう研究は自宅でしかできないんだよ。
0948デフォルトの名無しさん
2009/05/13(水) 22:16:09その著者が書いた唯一の本のようだが。
0949デフォルトの名無しさん
2009/05/13(水) 22:52:58計算機科学の研究は分野によってはPC1台でも十分に出来るのが良い所。
ぜひ成果を出して論文投稿してくれ。
0950デフォルトの名無しさん
2009/05/13(水) 22:56:190951デフォルトの名無しさん
2009/05/14(木) 08:42:20その著者が書いたSpamは山程ある。
0952デフォルトの名無しさん
2009/05/14(木) 22:02:270953デフォルトの名無しさん
2009/05/17(日) 19:01:26kwsk
0954デフォルトの名無しさん
2009/05/21(木) 09:43:340955デフォルトの名無しさん
2009/05/21(木) 14:26:160956デフォルトの名無しさん
2009/05/25(月) 20:26:320957デフォルトの名無しさん
2009/05/25(月) 21:23:460958デフォルトの名無しさん
2009/05/25(月) 22:56:09うまいやり方を教えてもらえませんか
今はこんな感じでやってます
let decomposeString str =
let rec decomposeString_ str i lst =
if i = String.length str
then lst
else decomposeString_ str (i + 1) (str.[i] :: lst)
in
List.rev (decomposeString_ str 0 []);;
0959デフォルトの名無しさん
2009/05/25(月) 23:09:23http://caml.inria.fr/pub/old_caml_site/Examples/oc/basics/explode.ml
0960デフォルトの名無しさん
2009/05/25(月) 23:45:04そのサイトにあったのか
ありがとうございます
0961デフォルトの名無しさん
2009/05/26(火) 23:04:290962デフォルトの名無しさん
2009/05/31(日) 17:35:57「ファイル名が名前になる自分自身」モジュールをファンクタに渡したいんですけどそれってできますか?
0963デフォルトの名無しさん
2009/06/01(月) 09:11:43日本語でおk
適当に解釈して答えると m.ml は非再帰なモジュール M を定義するのでその内部で自分自身 M を使うことは出来ん。
0964デフォルトの名無しさん
2009/06/01(月) 20:36:40買ってきました。なんだか自分でも読めそうな感じです。
0965デフォルトの名無しさん
2009/06/09(火) 00:46:03ttp://www.shido.info/gb/guestbook.php?id=1985
@がどうのコメントがどうのってただのいちゃもんのような気もするんだが
0966デフォルトの名無しさん
2009/06/09(火) 00:52:480967デフォルトの名無しさん
2009/06/09(火) 00:58:39記号がキモイというのは自分も思ったよ。
確かに Haskell は見た目が奇麗だし OCaml は如何にも見栄えに気を使ってない感じがする。
それがイチャモンだと思う人も居れば最重要項目に挙げる人もいるから、人それぞれかと。
Python は奇麗、Perl は汚い
Scheme は奇麗、CL は汚い
SML は奇麗、OCaml は汚い
C は奇麗、C++ は汚い
Haskell は奇麗、Smalltalk も奇麗
でも汚い事をするには汚い言語の方が使い勝手が良かったりもするんだよね。
ちょっと脱線し過ぎた。↓なんかコード書いてくれ。
0968デフォルトの名無しさん
2009/06/09(火) 02:39:08この辺だけ同意
どういうセンスなのか
0969デフォルトの名無しさん
2009/06/09(火) 13:30:15;;だけは未だに抵抗を感じる。ファイルに書くときはどうせ最後にしか書かないから
ほぼ関係ないが、toplevelを使うときにはやっぱり面倒くさい。
一体どんな経緯で;;になったの?
0970デフォルトの名無しさん
2009/06/09(火) 17:48:16ごめんオビワン、僕にはスルーできない!!
http://anond.hatelabo.jp/20090609174454
0971デフォルトの名無しさん
2009/06/09(火) 19:29:31何でネタという事にしたくなったのかは知らんけど、
もう少し時間差とか工夫しろよ
0972デフォルトの名無しさん
2009/06/09(火) 19:36:550973デフォルトの名無しさん
2009/06/09(火) 19:50:020974デフォルトの名無しさん
2009/06/09(火) 23:38:140975デフォルトの名無しさん
2009/06/10(水) 00:29:420976デフォルトの名無しさん
2009/06/10(水) 23:59:540977デフォルトの名無しさん
2009/06/13(土) 19:47:110978デフォルトの名無しさん
2009/06/13(土) 20:22:03define-syntaxマクロが理解しやすいのは確か
しかし、継続は全然理解出来ん
0979デフォルトの名無しさん
2009/06/13(土) 21:58:500980デフォルトの名無しさん
2009/06/14(日) 02:16:470981デフォルトの名無しさん
2009/06/14(日) 02:32:270982デフォルトの名無しさん
2009/06/14(日) 02:46:53・ただの○○じゃん
・無いよりはマシだな
・これって便利だね ←パターンマッチはここら辺にあると思う
・無いとやってらんねー
0983デフォルトの名無しさん
2009/06/14(日) 02:57:41それってORパターンにしか言えないんじゃん
let束縛でパターンマッチとかどう説明するよ
まあこういうのも語弊があるんだろうけど
むしろユニフィケーション的な文脈で語られるべき
機能なんじゃないかね、パターンマッチング
と、雑なことをいって識者の登場を期待するテスト
0984デフォルトの名無しさん
2009/06/14(日) 03:04:24>>981
で、何が言いたいの?
0985デフォルトの名無しさん
2009/06/14(日) 03:10:510986デフォルトの名無しさん
2009/06/14(日) 03:25:20馬鹿?
パターンマッチングはif + let
レス数が950を超えています。1000を超えると書き込みができなくなります。