関数型言語MLについて語るスレッドです。
MLは、確固とした理論的背景を持つ言語でありながら、
現実的なソフトの開発にも使用できる実用性を備えた言語です。
また、プログラミングの初心者が最初に学習する言語としても優れています。
総本山
Standard ML http://www.smlnj.org/
Objective Caml http://caml.inria.fr/ocaml/
前スレ
関数型言語ML(SML, OCaml, etc.), Part 5
http://pc12.2ch.net/test/read.cgi/tech/1186292994/
関数型言語ML (SML, OCaml, etc.), Part 6
レス数が900を超えています。1000を超えると表示できなくなるよ。
2009/06/15(月) 07:15:21
814デフォルトの名無しさん
2014/01/27(月) 00:37:41.63 VBAを捨てて関数型言語がデフォルトでサポートされるのは、いつだろうか
815デフォルトの名無しさん
2014/01/27(月) 01:45:51.79 そんな日は来なくていい
816デフォルトの名無しさん
2014/01/28(火) 03:59:19.18 ExcelマクロにVBAとF#の選択肢が標準だったなら、関数型は主流になれる
817デフォルトの名無しさん
2014/01/28(火) 04:04:55.48818デフォルトの名無しさん
2014/01/29(水) 01:01:52.05 口を・・・つむぐ?
819デフォルトの名無しさん
2014/01/29(水) 01:04:27.44 口をつぐんだ人ならいるかもね
820デフォルトの名無しさん
2014/01/29(水) 21:56:44.82 あれでしょ、世の中に不満があるなら自分を変えろ、それが嫌なら耳と目を閉じ、口を紡いで…あれ?
821デフォルトの名無しさん
2014/01/29(水) 21:58:26.24 お口にチャックノリス
822デフォルトの名無しさん
2014/02/12(水) 23:38:39.41 Batteriesを使用しているコードをjs_of_ocamlで変換するとMissing primitivesという警告?が出て
JavaScriptの実行時エラーが出てしまいます
これはどうしたら解消できるのでしょうか
コマンド
ocamlfind ocamlc -syntax camlp4o -package lwt,js_of_ocaml.syntax,batteries -g -c foo.ml
ocamlfind ocamlc -package lwt,js_of_ocaml,batteries -linkpkg -o foo.byte foo.cmo
js_of_ocaml foo.byte
出ているメッセージ
Missing primitives:
caml_ba_init
caml_sys_const_big_endian
caml_sys_const_ostype_cygwin
caml_sys_const_ostype_unix
caml_sys_const_ostype_win32
caml_sys_const_word_size
create_nat
incr_nat
initialize_nat
mult_digit_nat
set_digit_nat
set_to_zero_nat
unix_inet_addr_of_string
JavaScriptの実行時エラーが出てしまいます
これはどうしたら解消できるのでしょうか
コマンド
ocamlfind ocamlc -syntax camlp4o -package lwt,js_of_ocaml.syntax,batteries -g -c foo.ml
ocamlfind ocamlc -package lwt,js_of_ocaml,batteries -linkpkg -o foo.byte foo.cmo
js_of_ocaml foo.byte
出ているメッセージ
Missing primitives:
caml_ba_init
caml_sys_const_big_endian
caml_sys_const_ostype_cygwin
caml_sys_const_ostype_unix
caml_sys_const_ostype_win32
caml_sys_const_word_size
create_nat
incr_nat
initialize_nat
mult_digit_nat
set_digit_nat
set_to_zero_nat
unix_inet_addr_of_string
823デフォルトの名無しさん
2014/02/13(木) 19:52:50.09 いくつかはjs_of_ocamlを更新すれば定義されてる
nat関係のは提供されてないのでダミーの関数を
funciton create_nat(){}のように自分で追加するか
batteriesのサブセットを切り出して使うか
core_kernel使ってる人もいるらしい
nat関係のは提供されてないのでダミーの関数を
funciton create_nat(){}のように自分で追加するか
batteriesのサブセットを切り出して使うか
core_kernel使ってる人もいるらしい
824デフォルトの名無しさん
2014/02/13(木) 23:42:09.86 js_of_ocaml 1.4.0を使っていますがこれではダメなのでしょうか?
nat関係は適当にスクリプトを書いて対応しようと思います
unix_inet_addr_of_stringはbatteries関係なく出てしまうようですね
nat関係は適当にスクリプトを書いて対応しようと思います
unix_inet_addr_of_stringはbatteries関係なく出てしまうようですね
825デフォルトの名無しさん
2014/02/13(木) 23:59:27.54 bigarrayサポートがまだgit版にしかない
unix_inet_addr_of_stringはruntime/unix.jsをリンクすれば大丈夫だけど
opamで入れたなら多分入ってない
unix_inet_addr_of_stringはruntime/unix.jsをリンクすれば大丈夫だけど
opamで入れたなら多分入ってない
826デフォルトの名無しさん
2014/02/14(金) 00:28:20.76 bigarrayサポートはnat関係のことですよね?
もしそうだとするとcaml_XXXは一体何が原因なのでしょう
それとunix_inet_addr_of_stringはopamで入れている以上直る?ことはないということなのでしょうか
もしそうだとするとcaml_XXXは一体何が原因なのでしょう
それとunix_inet_addr_of_stringはopamで入れている以上直る?ことはないということなのでしょうか
827デフォルトの名無しさん
2014/02/14(金) 00:35:30.75 調べてから書くべきでした
caml_XXXがbitarrayの関数ですね
caml_XXXがbitarrayの関数ですね
828デフォルトの名無しさん
2014/02/14(金) 00:36:59.24 big・・・
829デフォルトの名無しさん
2014/02/14(金) 00:45:48.03 > それとunix_inet_addr_of_stringはopamで入れている以上直る?ことはないということなのでしょうか
公式のも唯の空の関数なんで自分で定義しても一緒だし
開発版では修正済みだから1.99だか2.0が出てopamパッケージになれば大丈夫
公式のも唯の空の関数なんで自分で定義しても一緒だし
開発版では修正済みだから1.99だか2.0が出てopamパッケージになれば大丈夫
830デフォルトの名無しさん
2014/02/14(金) 01:06:19.10 なるほど
いずれ修正されることと今でも少し手を入れれば動くことがわかったので良かったです
親切にありがとうございました
いずれ修正されることと今でも少し手を入れれば動くことがわかったので良かったです
親切にありがとうございました
831デフォルトの名無しさん
2014/02/16(日) 20:02:36.51832デフォルトの名無しさん
2014/02/24(月) 14:22:45.10 toplevelで、コンパイルした自作のライブラリを使いたいとき、
#load "/foo/bar/my.cmo";;
とやったのですが、モジュールMyが無いと怒られたため、試行錯誤した結果、toplevelで
#directory "/foo/bar";;
#load "my.cmo";;
と2段階に分けるか、コマンドラインで -I /foo/bar としなければならなかったのですが、こんな不便な仕様が存在しているはずがないと感じました。
別ディレクトリにあるファイルを読み込む正しいやり方ではどうすればいいのでしょうか。誰か教えていただけたらと思います。
my.cmoは/foo/bar内で:`ocamlfind ocamlc -pkg batteries my.ml`とやって生成しています。
#load "/foo/bar/my.cmo";;
とやったのですが、モジュールMyが無いと怒られたため、試行錯誤した結果、toplevelで
#directory "/foo/bar";;
#load "my.cmo";;
と2段階に分けるか、コマンドラインで -I /foo/bar としなければならなかったのですが、こんな不便な仕様が存在しているはずがないと感じました。
別ディレクトリにあるファイルを読み込む正しいやり方ではどうすればいいのでしょうか。誰か教えていただけたらと思います。
my.cmoは/foo/bar内で:`ocamlfind ocamlc -pkg batteries my.ml`とやって生成しています。
834832
2014/02/24(月) 21:13:12.02 findlibのソースを読み、ocamlのソースを読んだ結果、不便な仕様は不便な仕様のようです。
諦めます。
諦めます。
835デフォルトの名無しさん
2014/04/20(日) 03:11:50.67ID:8gJTdsza 初学者の質問で申し訳ないのですが、
type hoge ={ t : 'a. ('a -> 'a) -> 'a -> 'a };;
という型で'a.('a -> 'a)の「 . (ドット)」は何を意味するのでしょうか?
type hoge ={ t : 'a. ('a -> 'a) -> 'a -> 'a };;
という型で'a.('a -> 'a)の「 . (ドット)」は何を意味するのでしょうか?
836デフォルトの名無しさん
2014/04/20(日) 10:33:29.81ID:Ar2j+hn/ ∀x. P(x) とかλx. x のドットと同じなんじゃない。
837デフォルトの名無しさん
2014/04/20(日) 15:50:34.61ID:jkTnuZFL structureのドットじゃないのか
838デフォルトの名無しさん
2014/04/23(水) 20:07:50.69ID:yuYA7aLZ >>835
型hogeは('a -> 'a) -> 'a -> 'aという関数tを持つものだよ、というだけなんだが、
まずその'a.っていう表記が無いとエラーが出る。
エラーメッセージに脊髄反射してtype 'a hoge = { t : ('a -> 'a) -> 'a -> 'a }と定義すると、
hoge型の値を作ったときint hogeとかstring hogeとかになって、
tも(int -> int) -> int -> intとかになっちゃう。
いや違う、オレはhoge型の値にidentity:'a -> 'aや(=): 'a -> 'a -> boolのように、多相性を持った関数tが欲しいんだって時に
'a.っていう表記を使う。
用途は何と問われるとちょっと困る程度にはマイナー。
型hogeは('a -> 'a) -> 'a -> 'aという関数tを持つものだよ、というだけなんだが、
まずその'a.っていう表記が無いとエラーが出る。
エラーメッセージに脊髄反射してtype 'a hoge = { t : ('a -> 'a) -> 'a -> 'a }と定義すると、
hoge型の値を作ったときint hogeとかstring hogeとかになって、
tも(int -> int) -> int -> intとかになっちゃう。
いや違う、オレはhoge型の値にidentity:'a -> 'aや(=): 'a -> 'a -> boolのように、多相性を持った関数tが欲しいんだって時に
'a.っていう表記を使う。
用途は何と問われるとちょっと困る程度にはマイナー。
839デフォルトの名無しさん
2014/04/23(水) 20:47:43.26ID:Rx5WvURy 何言ってるか分からないですね
840デフォルトの名無しさん
2014/04/23(水) 22:11:28.21ID:fVb21MOO aはずっと自由変数ですよ、特殊化されませんよ、ってのを明示するのに使うのか
841デフォルトの名無しさん
2014/04/23(水) 22:41:15.05ID:OJl2bhdr 基本的に、変数は(もし多相性を持っていても)初期化された時点で単相型になる
関数は呼び出されると引数が初期化されるのでその時点で単相型になる
関数自身を変数に入れると、呼び出してなくても変数を初期化しただけで単相型になる
>>835のhoge型の変数は基本とは違って、初期化しただけでは単相型にならないっぽい
関数は呼び出されると引数が初期化されるのでその時点で単相型になる
関数自身を変数に入れると、呼び出してなくても変数を初期化しただけで単相型になる
>>835のhoge型の変数は基本とは違って、初期化しただけでは単相型にならないっぽい
842デフォルトの名無しさん
2014/04/23(水) 23:18:57.87ID:ddVBuvib ためになるわー。
843835
2014/04/24(木) 21:17:13.51ID:4Y8KSBKa 回答ありがとうございます。与えられたチャーチ数の定義がこれだったのですが、周りに聞いてもあまり良い回答を得られなかったので、とても助かりました。
確かにチャーチ数であれば、多相性が維持されなければ駄目ですね。
確かにチャーチ数であれば、多相性が維持されなければ駄目ですね。
844デフォルトの名無しさん
2014/05/09(金) 06:41:29.78ID:gmFOA17u 最近JITが高速と聞くのですが
MLtonよりもJITが高速になる場合も
あったりするのでしょうか
MLtonよりもJITが高速になる場合も
あったりするのでしょうか
845デフォルトの名無しさん
2014/05/09(金) 11:29:52.70ID:88BxxZ+X 早くなるケースもあるけど
大抵のケースは、工夫しないと遅いので作り込みが大変
なので、大体が学生の研究で作って、終わっちゃうんじゃないかな。
速さというより、F#みたいにVM環境向けにbytecodeに落とし込むケースは、あるかも。
C言語の例だと、CERNで、HPのGotoさんが作ってたCINTというCインタプリタがインターラクティブ環境が必要ということで採用されてた。
現在は、規格に追従&共通基盤の恩恵を受けられるllvmベースのclingを開発中。
大抵のケースは、工夫しないと遅いので作り込みが大変
なので、大体が学生の研究で作って、終わっちゃうんじゃないかな。
速さというより、F#みたいにVM環境向けにbytecodeに落とし込むケースは、あるかも。
C言語の例だと、CERNで、HPのGotoさんが作ってたCINTというCインタプリタがインターラクティブ環境が必要ということで採用されてた。
現在は、規格に追従&共通基盤の恩恵を受けられるllvmベースのclingを開発中。
846デフォルトの名無しさん
2014/05/09(金) 12:50:13.67ID:viF1oq7i 10年以上前だがJavaのShuJITとかあったけど、その作者のプロジェクトを終えるに
あたってのまとめが、少々の理論的な優位点なんて、カネとヒトがたくさんある奴
(よーするにSun(当時)やIBMやHPの作ってるJVM)のパワーの前には吹き飛ぶ、
だった。
あたってのまとめが、少々の理論的な優位点なんて、カネとヒトがたくさんある奴
(よーするにSun(当時)やIBMやHPの作ってるJVM)のパワーの前には吹き飛ぶ、
だった。
847デフォルトの名無しさん
2014/05/09(金) 23:01:59.86ID:2uUNFhKi いまは、LLVM使うと巨人の肩に乗れるね。
JVMはHotSpotVMベースになってOpenJDKがオープンソースになってるからその上でいじれるように
JSのVMは激戦だけど、IEの実装以外はオープンソースという。
LuaJITは、個人でつくってるのでオーパーツ。
JVMはHotSpotVMベースになってOpenJDKがオープンソースになってるからその上でいじれるように
JSのVMは激戦だけど、IEの実装以外はオープンソースという。
LuaJITは、個人でつくってるのでオーパーツ。
848デフォルトの名無しさん
2014/05/10(土) 22:51:43.07ID:SJ0/UQRG 言語処理系の最適化はマンパワーが必要なので……今はトレンドがLLVMに色々集まる方向性かな
849デフォルトの名無しさん
2014/05/12(月) 21:26:19.65ID:dnbz3Cdj C++11という巨人の肩に乗ろう
850デフォルトの名無しさん
2014/05/12(月) 22:10:36.00ID:xvKPpHt2 コンパイラは、MLで作ると楽という話もあるが、、、
そこらへんはジレンマ?
そこらへんはジレンマ?
851デフォルトの名無しさん
2014/05/13(火) 09:28:41.53ID:34BaoroY >>848 js_of_ocaml ってJavaScriptで書くより最適化で高速になるからそういう方向もあるかも。
ttp://jsperf.com/js-of-ocaml
ttp://jsperf.com/js-of-ocaml
852デフォルトの名無しさん
2014/05/13(火) 20:13:34.93ID:5OIUPatf Excelのセル中で、F#で定義した関数が使えたら面白いかもと思った。
853デフォルトの名無しさん
2014/05/16(金) 08:18:12.70ID:72NRi/gE altJS としては最適化手法が数学的に議論されていて論文も出ている js_of_ocaml が最強なのでは:
ttp://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.224.7457&rep=rep1&type=pdf
ttp://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.224.7457&rep=rep1&type=pdf
854デフォルトの名無しさん
2014/05/16(金) 16:19:49.33ID:PtE4FBA8 LuaJITって個人のなの?ブラジル生まれだとは知ってたが。
あとllvmってコンパイラ基盤としては楽だけど、インタプリタとしてはちょっと難ありじゃないかしら。
適当に使うと最初の起動時間がかなり遅い。
あとllvmってコンパイラ基盤としては楽だけど、インタプリタとしてはちょっと難ありじゃないかしら。
適当に使うと最初の起動時間がかなり遅い。
855デフォルトの名無しさん
2014/05/17(土) 03:51:33.29ID:RMSyflwZ Luaは、ブラジル、リオデジャネイロの大学の研究グループから
LuaJIT作ってるのはドイツ、ミュンヘンの人
LuaJIT作ってるのはドイツ、ミュンヘンの人
856デフォルトの名無しさん
2014/06/01(日) 17:00:19.03ID:3NiYSkpU TAPLのexercise 3.2.5が分からん。なんで3.2.3の定義で S_i ⊆ S_{i+1} になるんだ?
各S_iは最初のS_1とかを除いて、disjointになるように思える。
本持ってる人教えて
各S_iは最初のS_1とかを除いて、disjointになるように思える。
本持ってる人教えて
857デフォルトの名無しさん
2014/06/01(日) 20:16:49.72ID:dwNATPFa858デフォルトの名無しさん
2014/06/09(月) 23:28:07.14ID:g6XVfS4Z ocamlの演算子、**より~-.の方が優先順位が高いのはなぜ?
859デフォルトの名無しさん
2014/06/22(日) 23:27:34.81ID:kfNNTRTT 単項だからでは
860デフォルトの名無しさん
2014/07/05(土) 07:26:50.37ID:uomUGxMD OCamlの日本語の文字列扱うのて
上手く行かないものですか?
上手く行かないものですか?
861デフォルトの名無しさん
2014/08/01(金) 09:24:52.78ID:Z/VI2an6 どの程度のレベルで上手くやろうとしているのか分からないけど、単純にstring型に代入、表示は何も無しでも動作するが、Stringモジュールは多言語に対応しているわけではない。String.lengthなどは狙い通りには動かない。
ライブラリ(Batteries, Camomile)等を使えば日本語できる。
と思ってBatUTF8を弄ってみたが、containsとかiterとかでBatUChar.tを取り扱う必要があるくせに、
BatUChar.t型を作る方法が面倒だなあ。of_digitしか無い。BatUTF8.get "あ" 0で誤魔化せるが、迂遠。
ライブラリ(Batteries, Camomile)等を使えば日本語できる。
と思ってBatUTF8を弄ってみたが、containsとかiterとかでBatUChar.tを取り扱う必要があるくせに、
BatUChar.t型を作る方法が面倒だなあ。of_digitしか無い。BatUTF8.get "あ" 0で誤魔化せるが、迂遠。
862デフォルトの名無しさん
2014/08/28(木) 00:17:52.33ID:KKzfTscW SML/NJ version 110.77 リリース!
バージョン番号を4.0にリセットする前に、数回のリリースがあって、その中に64bitサポート
が含まれるらしいが、今回はbugfixのマイナー・リリースらしい。
外部関数の32bitコンパイルがそろそろサポートされなくなりつつあるので、64bitサポートが
はやくリリースされてほしい。
バージョン番号を4.0にリセットする前に、数回のリリースがあって、その中に64bitサポート
が含まれるらしいが、今回はbugfixのマイナー・リリースらしい。
外部関数の32bitコンパイルがそろそろサポートされなくなりつつあるので、64bitサポートが
はやくリリースされてほしい。
863デフォルトの名無しさん
2014/08/28(木) 00:31:14.45ID:3eVJnuNA まだやってるんだな NJ
864デフォルトの名無しさん
2014/08/28(木) 22:23:43.51ID:fRdOqM0/ camomileの使い方が全然わからないんですがどこを読めばいいんでしょうか
主に文字コード変換と正規表現について知りたいです
主に文字コード変換と正規表現について知りたいです
865デフォルトの名無しさん
2014/08/29(金) 22:52:22.51ID:LjCjaXt3 いつの間にかOCaml4.02.0
866デフォルトの名無しさん
2014/08/30(土) 23:41:43.96ID://K1VbLN test
867デフォルトの名無しさん
2014/09/02(火) 08:32:32.40ID:3nEDqgz+ OCamlのマニュアルにocamlbrowserがまだあるのはバグっすな
ocamldoc/trunk/manual/cmds/Makefile line#2
remove "browser.tex "
ocamldoc/trunk/manual/cmds/Makefile line#2
remove "browser.tex "
868デフォルトの名無しさん
2014/09/02(火) 22:57:08.51ID:h4iRRc1G ocaml標準のlexでは日本語が扱えないのでulexに差し替えたらparserが死んだでござる。
ダメだこりゃ
ダメだこりゃ
869デフォルトの名無しさん
2014/09/16(火) 16:34:15.58ID:smkPtKEd870デフォルトの名無しさん
2014/09/24(水) 22:11:44.77ID:ChDiOOXp ocaml 4.01.0で
# Obj.size @@ Obj.repr 1
がバグるんだけど、理由わかる?
# Obj.size @@ Obj.repr 1
がバグるんだけど、理由わかる?
871デフォルトの名無しさん
2014/09/24(水) 23:08:38.11ID:wtmzOZEz 仕様です。
ソースはおろかドキュメントすら読まずにObjを使うとはアホの極みです。
Chapter "Interfacing C with OCaml", Section 2..3
ソースはおろかドキュメントすら読まずにObjを使うとはアホの極みです。
Chapter "Interfacing C with OCaml", Section 2..3
872デフォルトの名無しさん
2014/09/26(金) 02:16:11.74ID:63HfXufw OCamlのすごさはもっと知られるべき #オブジェクト指向 や #関数型 は「敗者の道具」である http://itpro.nikkeibp.co.jp/atcl/watcher/14/334361/092200062/?ST=develop&P=3
873デフォルトの名無しさん
2014/09/26(金) 11:58:16.90ID:p4JSIuT/ >>872
これタイトルで損してる記事だろ
これタイトルで損してる記事だろ
874デフォルトの名無しさん
2014/09/26(金) 11:59:36.06ID:LJo7FzMV みかかデータ、マンセー記事っぽかったけど
875デフォルトの名無しさん
2014/09/26(金) 12:42:39.46ID:/S6uCtFc 関数型とかマルチパラ代務とかドカタには無理。オブジェクトだって散々語られてようやく、いや未だ、か
一部の突出した集団以外は、ほかにどうしようもない人が沈殿する職業になってるイメージ
一部の突出した集団以外は、ほかにどうしようもない人が沈殿する職業になってるイメージ
876デフォルトの名無しさん
2014/09/26(金) 20:12:51.02ID:+dkMIegW do構文の使用禁止の規約って全部>>=で書くってことなのだろうか。理由も含めて気になる。
877デフォルトの名無しさん
2014/09/26(金) 20:54:07.13ID:mU/FSdzC >>872
前半で散々オブジェクト指向をこきおろしておきながら、
中盤でOCamlを推すという意味不明な文章の論理の展開がある
ML族を推すのなら Caml か SML にしないと一貫性が無いし、
Caml にオブジェクト指向を後付けした "O"Caml 開発時の判断は
今となっては流行に踊らされた大きな失敗であったと断罪すべき
おまけに「個人的にOCamlがすごいと思う」とあるから何かと読んでみたら、
単なるパラメタ型多相の話でしかないことに笑ってしまった
「とがった」とか「すごい」とか、小学生の感想文とレベルは変わらない
こんなポエム記事で給料をもらえるのだから、日経ITproの記者とは楽な職業だね
>>873
タイトル以前の問題で、記事に中身が無くて話にならん
>>876
ソースコード解析ツールなら言語処理系と似た構造になるから、
(一般的には副作用を模倣するために使われる)do記法を使う必要性は無いと思われ
前半で散々オブジェクト指向をこきおろしておきながら、
中盤でOCamlを推すという意味不明な文章の論理の展開がある
ML族を推すのなら Caml か SML にしないと一貫性が無いし、
Caml にオブジェクト指向を後付けした "O"Caml 開発時の判断は
今となっては流行に踊らされた大きな失敗であったと断罪すべき
おまけに「個人的にOCamlがすごいと思う」とあるから何かと読んでみたら、
単なるパラメタ型多相の話でしかないことに笑ってしまった
「とがった」とか「すごい」とか、小学生の感想文とレベルは変わらない
こんなポエム記事で給料をもらえるのだから、日経ITproの記者とは楽な職業だね
>>873
タイトル以前の問題で、記事に中身が無くて話にならん
>>876
ソースコード解析ツールなら言語処理系と似た構造になるから、
(一般的には副作用を模倣するために使われる)do記法を使う必要性は無いと思われ
878デフォルトの名無しさん
2014/09/26(金) 21:11:21.88ID:+dkMIegW ちょっとぐぐってみたらこういうページがあった。
http://www.haskell.org/haskellwiki/Do_notation_considered_harmful
http://www.haskell.org/haskellwiki/Do_notation_considered_harmful
879デフォルトの名無しさん
2014/09/26(金) 21:24:18.32ID:rzI+KhbO たしかにタイトルで損したみたいだな
880デフォルトの名無しさん
2014/09/27(土) 09:02:30.03ID:aRJ76A2x ああいう煽り記事読んでドキドキするのは思春期の子供だけ
もっと大人向けの真面目に面白い記事は無いのか?
もっと大人向けの真面目に面白い記事は無いのか?
881デフォルトの名無しさん
2014/09/27(土) 09:08:36.15ID:V9AoMXji もし完全無欠のプログラマが存在するのであれば、そうした方法論に頼らなくても、
完全に意図通りに動作するプログラムを頭から書き下していけばいいのです。
オブジェクト指向プログラミングや関数型プログラミングは、不完全な人間のために用意されたもの、
いわば「敗者の道具」といえます。
もちろん、これは極端すぎる表現です。例えば、人は空を飛べないので飛行機に乗ります。
このことをもって「飛行機は敗者の道具である」と言う人はいません。
そうした意味では、オブジェクト指向プログラミングや関数型プログラミングを敗者の道具と呼ぶのは、
単なる言葉遊びにすぎません。人間が全知全能でないのは当たり前ですから。
完全に朝日脳だな
完全に意図通りに動作するプログラムを頭から書き下していけばいいのです。
オブジェクト指向プログラミングや関数型プログラミングは、不完全な人間のために用意されたもの、
いわば「敗者の道具」といえます。
もちろん、これは極端すぎる表現です。例えば、人は空を飛べないので飛行機に乗ります。
このことをもって「飛行機は敗者の道具である」と言う人はいません。
そうした意味では、オブジェクト指向プログラミングや関数型プログラミングを敗者の道具と呼ぶのは、
単なる言葉遊びにすぎません。人間が全知全能でないのは当たり前ですから。
完全に朝日脳だな
882デフォルトの名無しさん
2014/09/27(土) 17:11:59.10ID:lJpImKEe 産経信者も一緒に死ねカス
883デフォルトの名無しさん
2014/09/28(日) 11:09:58.25ID:yTX/1oq/ 今回朝日がしでかしたことを誰かまとめてくれ
884デフォルトの名無しさん
2014/09/28(日) 12:21:46.09ID:MFWVwvB9 スレ違いカスはお引き取り下さい
885デフォルトの名無しさん
2014/09/28(日) 12:22:16.97ID:/z7vQ2zP >>883
どいたかこ死亡
どいたかこ死亡
886デフォルトの名無しさん
2014/09/28(日) 12:38:21.08ID:3fm9b2hk 土井たか子がリアルに退いた過去になったのか
887デフォルトの名無しさん
2014/09/28(日) 12:39:24.70ID:/z7vQ2zP 土井がどいた過去
888デフォルトの名無しさん
2014/09/28(日) 12:40:25.54ID:/z7vQ2zP おんたけさんが噴火して
おたけさんが逝った
おたけさんが逝った
889デフォルトの名無しさん
2014/10/07(火) 01:19:25.02ID:RDe60glL 対話環境を再起動せずに、リコンパイルしたライブラリをロードし直す方法ってありますか?
#load でもう一度ロードすると、シグニチャが異なると怒られてしまいます
#load でもう一度ロードすると、シグニチャが異なると怒られてしまいます
890デフォルトの名無しさん
2014/11/07(金) 22:47:28.24ID:jjvVlXlA OCamlで型クラスを実現する方法ある?
あとカインドも
あとカインドも
891デフォルトの名無しさん
2014/12/28(日) 01:38:33.30ID:t9XFY33G モジュールで型クラス的なものを作ることができる。便利とは言いがたいが
892デフォルトの名無しさん
2015/02/05(木) 08:14:28.48ID:0RN82SQI Haskell より OCaml の方が部分部分で好みなんだけど、
OCaml は最近何か進展とか発展とか無いのかな。
OCaml は最近何か進展とか発展とか無いのかな。
893デフォルトの名無しさん
2015/02/05(木) 13:15:20.83ID:tkrhoEGU 4.0出たばっかじゃなかったっけ
894デフォルトの名無しさん
2015/02/05(木) 14:50:21.24ID:j+EW35P1 岡村はソース醜いのがなあ
895デフォルトの名無しさん
2015/02/05(木) 19:17:09.87ID:Omd6cUWA >>894
たとえば?
たとえば?
896デフォルトの名無しさん
2015/02/05(木) 20:40:25.53ID:SFYHhnYx 上から読んでいけば何しているのか分かるOCamlのソースは読みやすい部類
batteriesとかcoreといった大きいライブラリでも、モジュールと同名のファイル見ればいいだけなので、
どこに何があるのか探しやすい
基本的に手続き脳なので、haskellはどこから読めばいいのか分からない
悪名高いimport文のおかげでもっと読めない
batteriesとかcoreといった大きいライブラリでも、モジュールと同名のファイル見ればいいだけなので、
どこに何があるのか探しやすい
基本的に手続き脳なので、haskellはどこから読めばいいのか分からない
悪名高いimport文のおかげでもっと読めない
897デフォルトの名無しさん
2015/02/05(木) 21:27:52.95ID:uGoWQo5h OCamlなんとなくソースの見た目のバランスが悪いっていうのはなんかわかるわ。
899デフォルトの名無しさん
2015/02/06(金) 11:46:04.54ID:qvKWViHE ソースが読みにくい言語は致命的に生産&保守効率が悪い。
900デフォルトの名無しさん
2015/02/06(金) 11:56:15.06ID:uqQOSJHn901デフォルトの名無しさん
2015/02/19(木) 21:32:44.77ID:VWBqr6Q7 レコード型ある言語、多相レコードある言語、フィールドがファーストクラスにできる言語
おしえて。
ぜんぶもってるのがいい。
おしえて。
ぜんぶもってるのがいい。
902デフォルトの名無しさん
2015/02/19(木) 22:31:13.58ID:/rXoqLFu >>901
SML# という Standard ML の処理系は「ぜんぶもってる」よ
# fun get_x {X = x, ...} = x;
val get_x = fn : ['a#{X: 'b}, 'b. 'a -> 'b]
# val point_2d = {X=1.0, Y=2.0};
val point_2d = {X = 1, Y = 2} : {X: real, Y: real}
# val point_3d = {X=10.0, Y=20.0, Z=15.0};
val point_3d = {X = 10, Y = 20, Z = 15} : {X: real, Y: real, Z: real}
# get_x point_2d;
val it = 1 : real
# get_x point_3d;
val it = 10 : real
Standard ML の場合、前2つは言語仕様で規定されているからすべての処理系で利用できるけど、
最後の「フィールドがファーストクラス」であることは仕様では要求されていない
たとえば SML/NJ という処理系だと、上記のコードはエラーになる
- fun get_x {X = x, ...} = x;
stdIn:1.2-1.28 Error: unresolved flex record
(can't tell what fields there are besides #X)
SML# が独自に拡張したレコード型に関しては、SML# プロジェクトのホームページに
日本語の解説があるから、まず最初に読んでみるのがいいと思う
・SML#の拡張機能:レコード多相性 in プログラミング言語SML#解説
http://www.pllab.riec.tohoku.ac.jp/smlsharp/docs/2.0/ja/Ch7.xhtml
SML# という Standard ML の処理系は「ぜんぶもってる」よ
# fun get_x {X = x, ...} = x;
val get_x = fn : ['a#{X: 'b}, 'b. 'a -> 'b]
# val point_2d = {X=1.0, Y=2.0};
val point_2d = {X = 1, Y = 2} : {X: real, Y: real}
# val point_3d = {X=10.0, Y=20.0, Z=15.0};
val point_3d = {X = 10, Y = 20, Z = 15} : {X: real, Y: real, Z: real}
# get_x point_2d;
val it = 1 : real
# get_x point_3d;
val it = 10 : real
Standard ML の場合、前2つは言語仕様で規定されているからすべての処理系で利用できるけど、
最後の「フィールドがファーストクラス」であることは仕様では要求されていない
たとえば SML/NJ という処理系だと、上記のコードはエラーになる
- fun get_x {X = x, ...} = x;
stdIn:1.2-1.28 Error: unresolved flex record
(can't tell what fields there are besides #X)
SML# が独自に拡張したレコード型に関しては、SML# プロジェクトのホームページに
日本語の解説があるから、まず最初に読んでみるのがいいと思う
・SML#の拡張機能:レコード多相性 in プログラミング言語SML#解説
http://www.pllab.riec.tohoku.ac.jp/smlsharp/docs/2.0/ja/Ch7.xhtml
903デフォルトの名無しさん
2015/02/19(木) 22:34:08.05ID:VWBqr6Q7 ↑ありがと。
ほんとにぜんぶ!? フィールドファーストクラスなのその言語?
ほんとにぜんぶ!? フィールドファーストクラスなのその言語?
904デフォルトの名無しさん
2015/02/19(木) 22:35:11.19ID:VWBqr6Q7 あ、かいてあった、ごめん。
905デフォルトの名無しさん
2015/02/19(木) 22:37:49.31ID:VWBqr6Q7906デフォルトの名無しさん
2015/02/20(金) 03:39:21.83ID:V63A/fo0 1.レコード型、あるいは、それに類する型を持つ
2.レコード型(or それに類する型)の構造的部分型関係を扱える
3.できれば、多相レコード型とかそれと同様なのを持つ
4.できれば、レコードのフィールド名がファーストクラス
( x = [name = 3] : [name : int] なら nameがファーストクラス)
これカバーできる言語ない?
うえでおしえてもらったのしらべてみたけど
SML/NJってのは1,2を満たしてそう
SML#ってのが1,2,3を満たしてそう、
あと
scalaが無名オブジェクトみたいなやつで1,2,3を満たしてそう?
型を一部か書かないとダメだけど
ほかにこの辺でなんかいい言語ない?
clojure? ってのが4みたして相だけどコンパイル時に型ちぇっくしてくれないよねそれ?
うーんなんかない?
2.レコード型(or それに類する型)の構造的部分型関係を扱える
3.できれば、多相レコード型とかそれと同様なのを持つ
4.できれば、レコードのフィールド名がファーストクラス
( x = [name = 3] : [name : int] なら nameがファーストクラス)
これカバーできる言語ない?
うえでおしえてもらったのしらべてみたけど
SML/NJってのは1,2を満たしてそう
SML#ってのが1,2,3を満たしてそう、
あと
scalaが無名オブジェクトみたいなやつで1,2,3を満たしてそう?
型を一部か書かないとダメだけど
ほかにこの辺でなんかいい言語ない?
clojure? ってのが4みたして相だけどコンパイル時に型ちぇっくしてくれないよねそれ?
うーんなんかない?
907デフォルトの名無しさん
2015/02/20(金) 09:34:49.39ID:vrO8Sxqb 1
908デフォルトの名無しさん
2015/02/20(金) 10:31:17.89ID:N6pKHonh じゃあ俺は2
909デフォルトの名無しさん
2015/02/20(金) 10:55:47.88ID:sOgXDRpH 宿題は自力でやれw
910デフォルトの名無しさん
2015/02/21(土) 00:55:59.35ID:KgB/c0aN >>906
Standard ML のレコード型は構造的部分型関係を持たないよ
構造的部分型関係を持つレコード型に類する型を持つのは OCaml や Java
いわゆるオブジェクト指向におけるクラスとそれらの間の継承関係のこと
また「多相レコード型」という用語の意味が「パラメタ型多相なレコード型」
であるならば、Standard ML は多相レコード型を持つことになる
ここでパラメタ型多相は、Java だとジェネリクス(総称型)と呼ばれている
結論として、Standard ML(とその処理系 SML/NL および SML#)は1と3を満たす
次にファーストクラスについて、>>902 のコードにおける関数 get_x の定義だけど、
「フィールドとはレコード値からフィールド値への写像(関数)である」
という関係に気付けば、その定義は以下のように簡潔になる
# val get_x = #X;
val get_x = fn : ['a#{X: 'b}, 'b. 'a -> 'b] (* SML/# *)
つまりフィールド #X は(val宣言で)識別子に束縛したり、他の関数へ適用したり。
ある関数の評価結果として返すことができる
こうした数値や文字列といった値と同等に扱える性質を指してファーストクラスと呼ぶ
さらに上記の例は SML# だけど、SML/NJ も型システムが単純たから型推論に失敗するだけで、
データ型を明示的に宣言すれば関数 get_x を定義できる
- val get_x = #X : {X: real, Y: 'a} -> real;
val get_x = fn : {X:real, Y:'a} -> real (* SML/NJ *)
型システムの制約とファーストクラスという性質をごっちゃにすべきではない
まとめると、Standard ML(とそのすべての処理系)のフィールドはファーストクラスである
Standard ML のレコード型は構造的部分型関係を持たないよ
構造的部分型関係を持つレコード型に類する型を持つのは OCaml や Java
いわゆるオブジェクト指向におけるクラスとそれらの間の継承関係のこと
また「多相レコード型」という用語の意味が「パラメタ型多相なレコード型」
であるならば、Standard ML は多相レコード型を持つことになる
ここでパラメタ型多相は、Java だとジェネリクス(総称型)と呼ばれている
結論として、Standard ML(とその処理系 SML/NL および SML#)は1と3を満たす
次にファーストクラスについて、>>902 のコードにおける関数 get_x の定義だけど、
「フィールドとはレコード値からフィールド値への写像(関数)である」
という関係に気付けば、その定義は以下のように簡潔になる
# val get_x = #X;
val get_x = fn : ['a#{X: 'b}, 'b. 'a -> 'b] (* SML/# *)
つまりフィールド #X は(val宣言で)識別子に束縛したり、他の関数へ適用したり。
ある関数の評価結果として返すことができる
こうした数値や文字列といった値と同等に扱える性質を指してファーストクラスと呼ぶ
さらに上記の例は SML# だけど、SML/NJ も型システムが単純たから型推論に失敗するだけで、
データ型を明示的に宣言すれば関数 get_x を定義できる
- val get_x = #X : {X: real, Y: 'a} -> real;
val get_x = fn : {X:real, Y:'a} -> real (* SML/NJ *)
型システムの制約とファーストクラスという性質をごっちゃにすべきではない
まとめると、Standard ML(とそのすべての処理系)のフィールドはファーストクラスである
911デフォルトの名無しさん
2015/02/21(土) 01:03:27.14ID:KaIHMFIz > - val get_x = #X : {X: real, Y: 'a} -> real;
でもこの get_x って、>>902 の point_3d には使えないよね。
でもこの get_x って、>>902 の point_3d には使えないよね。
912デフォルトの名無しさん
2015/02/21(土) 01:45:43.43ID:KgB/c0aN うん、使えない
それが >>910 で書いた(Standard ML言語仕様における)「型システム」の制約だね
その制約を無くした SML# が特異なだけで、SML/NJ 以外の大半の SML 処理系に同じ制約がある
それが >>910 で書いた(Standard ML言語仕様における)「型システム」の制約だね
その制約を無くした SML# が特異なだけで、SML/NJ 以外の大半の SML 処理系に同じ制約がある
913デフォルトの名無しさん
2015/02/21(土) 20:03:59.94ID:KgB/c0aN >>910
>Standard ML のレコード型は構造的部分型関係を持たないよ
>構造的部分型関係を持つレコード型に類する型を持つのは OCaml や Java
>いわゆるオブジェクト指向におけるクラスとそれらの間の継承関係のこと
自己レスだけど、この段落は間違いが含まれていたので訂正する
まず:
>Standard ML のレコード型は構造的部分型関係を持たないよ
この文章は正しいけど、SML# は「構造的」部分型関係に類する型を持つ
だから >>902 の関数 get_x は point_2d とpoint_3d のどちらにも適用できる(>>911)
そして SML# だと、point_2d と point_3d のそれぞれの型について、
{X: real, Y:real} >= {X: real, Y:real, Z: real} という部分型関係を持ち、
ここで 関係 a >= b は「a の部分型が b である」ことを意味する
次に:
>構造的部分型関係を持つレコード型に類する型を持つのは OCaml や Java
>いわゆるオブジェクト指向におけるクラスとそれらの間の継承関係のこと
この文章は完全な間違いで、正しくは
「「非構造的」部分型関係を持つレコード型に類する型を持つのは OCaml や Java (...後略)」になる
たとえば(架空言語で)二次元座標上の点として 抽象クラス {} を定義し、その具象クラスとして
{X軸: real, Y軸: real} および(原点からの相対的な) {角度: real, 距離: real} を定義できる
ここで、2つの具象クラスのフィールド構成(=内部的構造)は全く異なるけれど、
{} >= {X軸: real, Y軸: real} および {} >= {角度: real, 距離: real} という部分型関係を持つ
>Standard ML のレコード型は構造的部分型関係を持たないよ
>構造的部分型関係を持つレコード型に類する型を持つのは OCaml や Java
>いわゆるオブジェクト指向におけるクラスとそれらの間の継承関係のこと
自己レスだけど、この段落は間違いが含まれていたので訂正する
まず:
>Standard ML のレコード型は構造的部分型関係を持たないよ
この文章は正しいけど、SML# は「構造的」部分型関係に類する型を持つ
だから >>902 の関数 get_x は point_2d とpoint_3d のどちらにも適用できる(>>911)
そして SML# だと、point_2d と point_3d のそれぞれの型について、
{X: real, Y:real} >= {X: real, Y:real, Z: real} という部分型関係を持ち、
ここで 関係 a >= b は「a の部分型が b である」ことを意味する
次に:
>構造的部分型関係を持つレコード型に類する型を持つのは OCaml や Java
>いわゆるオブジェクト指向におけるクラスとそれらの間の継承関係のこと
この文章は完全な間違いで、正しくは
「「非構造的」部分型関係を持つレコード型に類する型を持つのは OCaml や Java (...後略)」になる
たとえば(架空言語で)二次元座標上の点として 抽象クラス {} を定義し、その具象クラスとして
{X軸: real, Y軸: real} および(原点からの相対的な) {角度: real, 距離: real} を定義できる
ここで、2つの具象クラスのフィールド構成(=内部的構造)は全く異なるけれど、
{} >= {X軸: real, Y軸: real} および {} >= {角度: real, 距離: real} という部分型関係を持つ
レス数が900を超えています。1000を超えると表示できなくなるよ。
ニュース
- トランプ米大統領声明 「中国はパニックに陥った」 [お断り★]
- 【宗教】日本、仏教国で仏教離れ最多 信者の4割、現在「無宗教」 米研究所調査 ★4 [樽悶★]
- 米商務長官 トランプ関税「撤回の可能性ない。 世界はアメリカから搾取やめるべき。関税率是正なら交渉の余地あり」 [Hitzeschleier★]
- 長野智子 フジテレビ報告書で〝誤報〟判明「文春は謝罪するべき」…女性アナF氏を「3悪人」扱い ★2 [ぐれ★]
- 注文した料理が来ないまま45分経過 → 食べてないのに「席を空けて」と店員に退店を促されて激怒、トラブルになった男性 [パンナ・コッタ★]
- 中居正広の弁護士・犬塚氏、直撃にダッシュで逃走…被害女性を「不快」にさせた“フジと利益相反”の受任 [Ailuropoda melanoleuca★]
- 【訃報】株安、円安という最悪なパターンになりそう、日本経済ガチで詰みかけ [943688309]
- 【火だるま】「NISA損切り」すべきか否か、ガチで意見が割れる [458340425]
- 朝9:00に起こしてくれ
- 【動画】ダウンタウンのお笑い、「最悪の性暴力」「何が笑えるの」と現代人に大炎上してしまう [485187932]
- トランプ「利下げしろ😡」→FRB議長「トランプ関税でインフレの可能性大 だから利下げしない」 [175344491]
- 【競技】お前らがeスポーツに飽きてしまった理由😶 [986198215]