1 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 07:15:21 .net] 関数型言語MLについて語るスレッドです。 MLは、確固とした理論的背景を持つ言語でありながら、 現実的なソフトの開発にも使用できる実用性を備えた言語です。 また、プログラミングの初心者が最初に学習する言語としても優れています。 総本山 Standard ML www.smlnj.org/ Objective Caml caml.inria.fr/ocaml/ 前スレ 関数型言語ML(SML, OCaml, etc.), Part 5 pc12.2ch.net/test/read.cgi/tech/1186292994/
222 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 03:16:53 .net] やめてけーれ
223 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 03:50:10 .net] >>217 72年生まれでびっくり日本新記録を見ていた私はなんですか?
224 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 12:01:06 .net] びっくり日本新記録は1975年から1985年までやっていたようだから、 72年生まれなら13歳中一まで見れていたことになる。 特別なことはなにもないと思うが。 マッハGoGoGoとか鉄腕アトムの第一作目をリアルタイムに見ていたとかいうなら驚愕ものだが。
225 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 19:34:27 .net] ここに1967年生まれの俺が居るわけだが
226 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 20:22:40 .net] 5年前の俺なら老害呼ばわりしたかもしれないが、 最近はむしろ尊敬するようになってきた。 なんつーか、歳を重ねるってのはそれだけで立派だよ。 対して俺はゆとりに「この昭和生まれが」と言われてショックを受けた
227 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 20:26:52 .net] >>223 rougai
228 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 21:29:42 .net] >>223
229 名前:そうは思わない > 最近はむしろ尊敬するようになってきた。 ああ・・・ついにお前も老害の仲間入りか。 人間というのは自分の置かれた環境や立場によって考え方を変える生き物だというだけのこと。 お前が老害ジジイを擁護するようになったということは、 老害扱いされる時期がもうすぐ目の前に来ている証拠なんだよ。 たしか60歳以上の老人たちは日本が持っているカネの55%を持っているんだよな。 そしてそのカネを何に使うかというアンケートによると、 がんばってきた自分へのご褒美に贅沢するために使うのだそうだ。 若者が苦しんでいるときにそんなことを許していいわけがないだろ。 老人を過剰に保護するのをやめても老人は困らないし、 財源確保のために老人たちから搾り取ればいいと思う。 [] [ここ壊れてます]
230 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 21:37:01 .net] あと、就業における年齢制限もやめるべきだと思う。 定年を設けている企業や官公庁が大半だと思うけど、それって年齢差別だよね。 60歳でもまだまだ働ける人がほとんどなのに定年で辞めさせるのはどうかと思う。 そうする代わりに、経営者に自由に解雇する権利を与えて、年功上列・終身雇用も撤廃して、 終身雇用に安住している無能なやつ(老害)をどんどん解雇していけばいいと思う。 無能な奴は一生平社員の単純労働でこき使えばいいよ。 長い間単純労働してるからといって才能の無い奴を無理に昇進させる必要もないと思う。
231 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 21:41:57 .net] アホかw
232 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 21:42:48 .net] >>223 歳を重ねるだけで得られるようなものなら誰でも手に入るから価値は無い。
233 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 21:45:57 .net] >>226 解雇すればいいのに、こき使うの?
234 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 21:49:56 .net] 俺も高齢者は手厚く保護されすぎているように思う。 もっと若者と同じように扱えばいいのにね。 具体的にどこか体が故障している人を障害者認定して、 障害者として文化的な生活をおくるために補助をするなら分かるけど、 高齢者だからという理由だけで保護するのは過保護というものじゃないかな。
235 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 21:52:31 .net] ML と関係ない話は他所でやれ
236 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 21:53:24 .net] ジジババとかマジいらねえ 団塊世代は頭が鈍くて経験も役に立たないし物事を計画的にするのも下手だし散らかすのだけは一流で後片付けのことは微塵も考えないゴミなんだよなぁ
237 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 21:53:31 .net] >>225 > がんばってきた自分へのご褒美に贅沢するために使うのだそうだ。 金が回るならいいことじゃないか
238 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 21:54:24 .net] そう、そのウンコどもが苦手な分野こそが関数型言語
239 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 21:56:33 .net] >>233 ところが、使った分が戻っていくのが世にも奇妙な現象
240 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 21:57:38 .net] さっさとMLをブームにして金を使わせろ
241 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 22:02:41 .net] >>236 ダメ、ジジババはコンピュータ音痴だから。
242 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 22:17:02 .net] なにやら怨念めいたものを感じるな 南無阿弥陀仏
243 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 12:41:38 .net] 'M`L < 新言語できたよー
244 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 15:44:50 .net] 団塊世代は経済の成長期に楽しくお仕事して、下向きになったらつまらないから働くのやめるとか言い出す。 おいしいところだけ食べてトンズラとかマジきめえw 自分たちの責任を後世に押し付けて、自分は今まで楽しく稼いだお金で楽しく老後を過ごす予定なのか? そんなことが許されるわけがない。 世の中みんなが辛いと思っているんだから自分だけ良い思いをしようとするなんて許されるわけがない。 団塊世代は身勝手だ。 搾取されるべきは団塊世代だ。 金があるんだから搾取してもかまわないだろ?
245 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 16:25:40 .net] 一番の癌は大企業にぶらさがってる労組だな 特にJALやJRや某新聞社の労組 それから日教組 こいつらが日本のまじめな生産者の利益を貪ってる
246 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 16:27:14 .net] 企業経営者が自由に社員をクビにできないのが問題。
247 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 16:47:17 .net] 正社員を簡単にクビに出来ないから 会社は正社員じゃなくて派遣を使いたがる 派遣ピンハネ業だけが儲かる
248 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 16:52:24 .net] クビにできないのを良いことに労働組合を背景にやりたい放題やって楽して金だけもらって逃げた団塊世代
249 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 16:53:19 .net] 良いこと考えた 正社員を派遣すればいいんじゃん
250 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 18:11:29 .net] マルチのコピペにいちいち釣られてんのか コピペした奴が自分で反応してんのか どっちにしてもアホだ
251 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 18:58:16 .net] >>245 面倒だから経営も外注するか。 労組嫌ってるやつは公務員か?死ねよ
252 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 19:03:43 .net] pc12.2ch.net/test/read.cgi/tech/1189246532/l50
253 名前:デフォルトの名無しさん [2009/12/06(日) 22:09:27 .net] >>243 欧州のどこだかは、派遣使うとそれだけ割高になるような法律になってるとか 聞いたことある。
254 名前:デフォルトの名無しさん [2009/12/07(月) 00:49:50 .net] >>245 プログラマの派遣なら、正社員の派遣が主流じゃないか? >>249 法律なんか作らなくても、市場原理に任せておけば派遣のほうが高くなる。 レンタルとリースのどっちが割高かってこと。 むしろ、法律によって市場を歪めているのが諸悪の原因。
255 名前:デフォルトの名無しさん [2009/12/31(木) 15:29:23 .net] >>250 どの法律のこと?
256 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 19:26:50 .net] おい、押すなよ、、絶対だぞ」
257 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 21:53:25 .net] ポチっとな
258 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 16:49:17 .net] val () = print "あけおめ\n"
259 名前:デフォルトの名無しさん mailto:sage [2010/01/07(木) 21:35:11 .net] OCaml用のlibcurlバインディングらしい、ocurlを入れようとしたのですがエラーが出ます。 curl-helper.c 主に「dereferencing pointer to incomplete type」というエラーが大量に出ます。 どうすればいいのでしょうか。 ./configやlibcurlのインストールなどは済ませています。 環境はMSYS + MinGW、Windows 7です。
260 名前:デフォルトの名無しさん [2010/01/08(金) 18:36:46 .net] libcurl のバージョンは。
261 名前:デフォルトの名無しさん [2010/01/08(金) 18:43:34 .net] バージョンはよいみたい。一度古いので苦労した記憶がある
262 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 03:51:07 .net] libcurlはWindows版では最新の7.19.7を入れました。 MinGWは最新のものを入れています。 ところで、jocaml.inria.fr/ や caml.inria.fr/ が落ちているのですが。
263 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 04:31:29 .net] caml.inria.fr/pub/docs/manual-ocaml/manual032.html#toc135 ここの例通りにCでOcamlのモジュール使おうと試してるんだけどうまくいかない。 最後の手順の cc -o prog main.c mod.a -lcurses で詰まっています。 mod.a(startup.o):startup.c:(.text+0x9e): undefined reference to `__lseeki64' mod.a(startup.o):startup.c:(.text+0x240): undefined reference to `__lseeki64' mod.a(startup.o):startup.c:(.text+0x2e7): undefined reference to `__lseeki64' mod.a(startup.o):startup.c:(.text+0x93b): undefined reference to `__beginthread' mod.a(sys.o):sys.c:(.text+0x7): undefined reference to `__errno' mod.a(sys.o):sys.c:(.text+0xf7): undefined reference to `__errno' mod.a(sys.o):sys.c:(.text+0x101): undefined reference to `__errno' mod.a(str.o):str.c:(.text+0x30f): undefined reference to `__imp___pctype' mod.a(str.o):str.c:(.text+0x32c): undefined reference to `__isctype' こんなエラーが大量に出る。 libcamlrun.aが怪しいと思うのだけれどどうすればいいかわからない。 環境はXPでCygwin Ocamlは3.10.2 Cygwinでocamlc -c modwrap.cすると何故かアクセスが拒否されるので modwrap.cとmod.mlのコンパイルはMinGWでやりました。
264 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 08:51:21 .net] >>259 Cランタイムのシンボルを見つけられてない、ということで >Cygwinでocamlc -c modwrap.cすると何故かアクセスが拒否されるので modwrap.cとmod.mlのコンパイルはMinGWでやりました。 が怪しい。 この部分MinGWとCygwinの互換性はあるの?Cygwin知らんけど、全部-mnocygwinならどうだろう。
265 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 09:28:15 .net] >260 >この部分MinGWとCygwinの互換性はあるの? エラーが出てるのは正に MinGW と Cygwin で互換性のなさそうな部分だね。 >259 >何故かアクセスが拒否される modwrap.c を Windows ネイティブのアプリで編集していたりすると発生する場合もあるので ・Cygwin アプリで編集する ・mkpasswd とか使って /etc/passwd を見直してみる ・とりあえず chown / chmod してみる ・ACL 周りの設定を変えてみる(mount とか環境変数 CYGWIN とか) あたりはどうだろ。
266 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 21:48:13 .net] >>260 >>261 助言ありがとうございます。 レスを頼りにいろいろ試してみましたが、だめでした。 OcamlもCygwinも使ってまだ日が浅いので大事なところを見落としているのかもしれません。 今忙しいのであまり時間が取れないのですが、Cygwinで揃えてまたいろいろと試してみようと思います。 本当にありがとうございました。
267 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 21:54:14 .net] Moscow ML 使ってみようと思ったら、もうずっと更新されてないんだね…
268 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 00:01:29 .net] SchemeとMLは、心が洗われるわー
269 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 23:52:14 .net] あー汚れてるんですね
270 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 10:15:16 .net] はい
271 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 18:43:33 .net]
272 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 02:27:03 .net] OCamlはCにembedできますか?
273 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 23:27:08 .net] Milnerが亡くなったそうだね
274 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 23:32:10 .net] lambda-the-ultimate.org/node/3863 ホントだ。ご冥福をお祈りします。 ML は勉強していて楽しかったです。
275 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 22:50:27 .net] 『プログラミングの基礎』 浅井健一著 を買ってポチポチ楽しく やってるんですが、著者のサポートサイトに書いてあるように やっても、未だに日本語の表示が出来ません。 ttp://pllab.is.ocha.ac.jp/~asai/book/Linux.html 環境はWinXPのVMPlayer上のDebian(lenny)でやってます。 端末でインタープリタ走らせてる場合も、Emacs上でtuareg- modeでやってる場合も文字コードが表示されてしまいます。 助けてけろ〜
276 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 23:42:03 .net] 分からんけど、なんでLANG=en_USのISOなんとかなんだろ?ja_JP.eucJPとかじゃないのか
277 名前:デフォルトの名無しさん mailto:sage [2010/04/09(金) 23:58:56 .net] OCamlはoreilly本来ないね
278 名前:デフォルトの名無しさん mailto:sage [2010/04/11(日) 20:56:52 .net] >>270 奥さん亡くなった三日後に心筋梗塞か。
279 名前:デフォルトの名無しさん mailto:sage [2010/04/11(日) 21:10:03 .net] ご冥福をお祈りします。
280 名前:デフォルトの名無しさん mailto:sage [2010/04/12(月) 22:51:23 .net] あの世で福??
281 名前:デフォルトの名無しさん [2010/04/21(水) 21:04:50 .net] signatureのfunctorの使い方がよくわかりません。 signatureを受け取ってstructureを返すfunctor Aと、 signatureを受け取ってsignatureを返すfunctor Bを定義したとします。 signature CにAとBを適用したものをA(C), B(C)としたとき、 A(C)にB(C)を適用したstructureはどうしたら使えますか?
282 名前:277 mailto:sage [2010/04/21(水) 21:06:26 .net] 言い忘れました。OCamlの話です。
283 名前:277 mailto:sage [2010/04/21(水) 22:56:41 .net] すみません、自己解決しました。
284 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 01:34:18 .net] あれ?OCamlのfunctorってsignatureを受け取ったり返したり出来るの? 受け取るのも返すのstructureだけだと思ってた
285 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 01:38:21 .net] ドキュメント読んでみたけど、 caml.inria.fr/pub/docs/manual-ocaml/manual019.html#toc67 やっぱりfunctorがsignatureを受け取れるようには見えないなぁ
286 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 12:26:40 .net] 質問していいですか。 'a * 'bの値を受け取り、型'aと'bが等しいか否かを判定する関数はo'camlで書けますか?
287 名前:デフォルトの名無しさん [2010/04/25(日) 22:33:07 .net] >>283
288 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 22:54:26 .net] >>284
289 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 00:03:13 .net] >>282 何がしたいのか分からないけど OCamlでは型情報は実行時には残っていないので そういう型を扱うプログラムは一切かけないとおもう
290 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 21:09:56 .net] OCamlってなんで最上位ビットをゴミ集め様に使っちゃうようにしたのかな。 なんか、これが凄くアダになってるように思えるのだが
291 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 20:51:34 .net] Lisp系含めてわりと見かける仕様なんじゃ
292 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 20:07:48 .net] $ sudo aptitude install ocaml … 以下の新規パッケージがインストールされます: camlp4{a} ledit{a} libdrm2{a} libgl1-mesa-glx{a} libpthread-stubs0{a} libpthread-stubs0-dev{a} libx11-dev{a} libxau-dev{a} libxaw7{a} libxcb-xlib0-dev{a} libxcb1-dev{a} libxdmcp-dev{a} libxext-dev{a} libxi-dev{a} libxmu6{a} libxpm4{a} libxtst6{a} libxv1{a} libxxf86dga1{a} libxxf86vm1{a} ocaml ocaml-base{a} ocaml-base-nox{a} ocaml-interp{a} ocaml-nox{a} tcl8.4{a} tk8.4{a} x11-utils{a} x11proto-core-dev{a} x11proto-input-dev{a} x11proto-kb-dev{a} x11proto-xext-dev{a} xbitmaps{a} xterm{a} xtrans-dev{a} 0 個のパッケージを更新、 35 個を新たにインストール、 0 個を削除予定、0 個が更新されていない。 29.4MB のアーカイブを取得する必要があります。 展開後に 97.0MB のディスク領域が新たに消費されます。 (#^ω^)ピキピキ
293 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 20:14:14 .net] >>288 ocaml-nox
294 名前:デフォルトの名無しさん mailto:sage [2010/04/30(金) 12:32:47 .net] こそは自分でMakeだろJK
295 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 16:43:51 .net] SML#は生きていた
296 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 01:19:01 .net] 音沙汰なくてちょっと諦めかけてたから新バージョンリリースめでたい
297 名前:デフォルトの名無しさん [2010/05/05(水) 04:16:18 .net] OCamlの型で 'a. 'a list というのを見たんですけど、この「.」って何ですか?
298 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 07:24:38 .net] 「.」が何かと言われるとむずいな 「'a.」は「任意の型パラメータを'aとし、その'aついて...(for all)」の意味 例えば、 type 'a t = { e : 'a } は'aを型パラメータに取るけど、 type 'a t = { e : 'a; p : 'b. 'b list } とすると、任意の型'bをパラメータに持つ型をレコードの要素にできる もちろん type 'a t = { a : 'a; p : 'b list } は'bがunboundだからエラー
299 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 15:33:12 .net] >>294 ありがとうございます
300 名前:デフォルトの名無しさん [2010/05/15(土) 22:35:32 .net] SMLにはレコード更新の機能がなく、日常的に苦労しているので、ネイティブコードが はけるSML#のリリースは待ち遠しかった。 ただ、欲を言うと、レコード拡張も言語としてサポートして欲しかった。
301 名前:デフォルトの名無しさん mailto:sage [2010/05/16(日) 08:50:49 .net] >SMLにはレコード更新の機能がなく、日常的に苦労している すげえ、日常的にか。仕事に使ってるの? >ただ、欲を言うと、レコード拡張も言語としてサポートして欲しかった。 レコード拡張って?
302 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 17:27:31 .net] MLton って無限ストリーム使ったプログラムも最適化してくれるの?
303 名前:デフォルトの名無しさん [2010/05/18(火) 22:20:33 .net] >>297 小規模な数値計算をしているだけで、すごいことはしていません。 Fortranで十分ですが、いくつかの部品を定義して、NJの対話環境 で評価することで、試行錯誤できて重宝してます。 レコードの拡張 連結と言うべきだった。 {a=1,b=2}#{c=3} val it={a=1,b=2,c=3} ができると嬉しい。
304 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 01:51:26 .net] Vimのインデントファイルで ocaml.vimやomlet.vimより いいものありませんか?
305 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 21:02:03 .net] MLで書くときはスタイルに悩むね。 inの前で改行すべきか? 連続するletはインデントすべきか? などなど
306 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 23:36:50 .net] スタイルは悩みますね。 今のところ連続するletもinの後も インデントしないようにしています。 ただ、こう書きたいという思いがあっても Vimのインデントファイルでは うまくいかないことがあって困ります。 ユーザーの多そうなEmacsを使った方が いいのかもしれません。ま、それを 言ったら関数型言語もHaskellということ になるかもしれませんが…
307 名前:デフォルトの名無しさん [2010/06/04(金) 16:33:24 .net] Ocamlで let plus x y = x + y があるとき xより先にyに代入する方法はあるますか?
308 名前:デフォルトの名無しさん [2010/06/04(金) 20:40:08 .net] λ式を使えば良いのでは。 すでに、y = aの代入が決まっているときは、 (fun x -> plus x a) まだのときは、 (fun y -> fun x -> plus x y) を使う。 ※SML使いなので、構文上の間違いはあるかもしれぬ。
309 名前:デフォルトの名無しさん [2010/06/04(金) 20:44:13 .net] これも、一種のスタイル問題だが、 列挙型を定義するときに、 datatype X = X1 | X2 | X3 | ... とするか type X = int val X1 = 1 val X2 = 2 ... とするかで悩んでしまう。最初は、vector (ランダムアクセス)を使わない 見込みだったのだが、必要になったときのことを心配してしまう。
310 名前:デフォルトの名無しさん [2010/06/04(金) 22:34:46 .net] そういう心配をしなくていいくらいコンパイラの最適化は賢いから安心して代数データ型を使えという話をどこかで見た気がするのだがどこだか忘れてしまったな。
311 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 22:41:07 .net] succ X1が欲しいという話だと思ったんだが。 ……俺ならObj.magicしちゃうな
312 名前:デフォルトの名無しさん [2010/06/04(金) 22:44:58 .net] d.hatena.ne.jp/sumii/20060918/1158537612 これだった。あんまり突っ込んだこと書かれてなかったな。でもこういう話じゃないの?
313 名前:デフォルトの名無しさん [2010/06/05(土) 18:55:54 .net] >>304 ありがとうございます。
314 名前:デフォルトの名無しさん [2010/06/05(土) 23:46:13 .net] >> 308, 307 ありがとうございます。そうです、O(1)で整数に変換できるかを心配していました。
315 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 00:10:32 .net] O(1)での変換速度を気にしなきゃいけないくらい沢山定義するなら、 DEFINEマクロ使った方がいいんじゃないかなぁ。あ、OCamlの場合だけど。 (* compile with -pp "camlp4orf" *) DEFINE A = 1 let _ = print_int A
316 名前:デフォルトの名無しさん [2010/06/14(月) 19:50:39 .net] >> 311 Ocamlマクロ使えましたね。いいなぁ〜
317 名前:デフォルトの名無しさん [2010/06/14(月) 19:54:03 .net] 破壊的代入(参照型)の利用はひかえめに、とはいろんなガイド/教科書に書いて あるけど、どの程度が許容範囲なんだろう。 与えられたリストの部分和を要素とするリストを返す関数を書いてみると、 破壊的代入を使ったバージョンが一番短く直観的に思う。 fun series xs = (fn s => map (fn i => i + !s before s := !s + i) xs) (ref 0) fun series2 xs = (rev o #2) (foldl (fn (i,(s,ys)) => (i+s,(i+s)::ys)) (0,nil) xs) fun series3' s (i::is) = (i+s) :: series3' (i+s) is | series3' s nil = nil; val series3 = series3' 0 関数プログラマ的には、どれがいいのだろう。 (もっといい書き方もあるかもしれない)
318 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 19:58:31 .net] 個人的にはこだわらずに破壊的代入もがんがん使えって思うけど、その前にmapの捜査順は前からって保証されてるのか?
319 名前:デフォルトの名無しさん [2010/06/14(月) 21:34:29 .net] 確かに、一般的には規格違反かもしれない。ちなみに www.smlnj.org/doc/basis/pages/list.html には map f l applies f to each element of l from left to right, returning the list of results. と書かれているが、"from left to right"を副作用を持つfを考慮して、そう書いているのか は不明。
320 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 05:25:03 .net] >>313 効率気にしないなら下のようにも. fun series nil = nil | series (h::t) = h :: map (fn x => x + h) (series t) 効率を気にするなら,series3がいいと思った. refを使うと現在の変数の状態を気にする必要があって大変. series2はやってることはわかったけど,コードがなんとなく見づらい.
321 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 12:11:01 .net] >現在の変数の状態を気にする必要があって大変 refが大変で、引数変数が大変でないと思う辺り、関数型言語プログラマだなあ。 俺はまだそこまでの境地には達してないや
322 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 18:09:00 .net] 「こんなこともあろうかと」いいながら、用意しておいたscanlを使うのが一番直感的。