関数型言語ML (SML, OCaml, etc.), Part 6at TECH
関数型言語ML (SML, OCaml, etc.), Part 6 - 暇つぶし2ch750:デフォルトの名無しさん
13/10/11 03:24:27.66 .net
>>738
>>734の場合でも、f(n)はf(n-1), f(n-2)がメモ化されている場合常にO(1)
メモ化していない場合(最初の一回目)は再帰計算だからO(n)
これはわかるな?

その後 再帰メモ化版のfib(n)は、
それまでn以上の値が呼び出されていたならO(1)であり、
fib nをm回呼び出すならO(m)、2つ合わせて O(m+n)

アキュムレータだけの場合、fib(n)は "常に" O(n)
つまりfib nをm回呼び出すならO(nm)
わかったか?

751:デフォルトの名無しさん
13/10/11 04:17:04.97 .net
HaMLet がまさかのニューバージョン。

URLリンク(www.mpi-sws.org)

752:デフォルトの名無しさん
13/10/11 10:20:41.62 .net
>>740
あー >>734はメモ化の再帰バージョンの話ね
理解した

とすると
>>729この違いは
使い捨てならアキュムバージョンは
簡潔に書けて早く
使いまわすならメモ化した方が
再呼び出しは早くていいって感じか

753:デフォルトの名無しさん
13/10/11 19:30:47.32 .net
SMLも開発すすんでるんだな

754:デフォルトの名無しさん
13/10/14 18:44:12.10 .net
URLリンク(www.pllab.riec.tohoku.ac.jp)
SMLの開発って、もしかしてSML#のこと?

755:デフォルトの名無しさん
13/10/14 18:45:23.58 .net
あ、上のhamletのことか。

756:デフォルトの名無しさん
13/10/14 18:54:06.65 .net
SML#は64ビット対応せんのかな。結構期待してるんだけど。

757:デフォルトの名無しさん
13/10/15 01:40:51.77 .net
SML/NJとかも

758:デフォルトの名無しさん
13/10/15 01:52:43.43 .net
Standard SMLってなんだろ?

759:デフォルトの名無しさん
13/10/15 15:17:19.69 .net
int型のmaxって1073741823ですよね
これを超えたらBig_intに切り替えたいんですが
int型の計算でmax_intを超えたかどうかの判定って
どうやったらいいですか?

760:デフォルトの名無しさん
13/10/15 17:14:51.41 .net
無理じゃね
最初からBig_int使えばいいんじゃね

761:デフォルトの名無しさん
13/10/15 18:42:26.56 .net
大学の研究室のプロジェクトだと、パワーのある院生がいる時にどかっと
進んだりするんだよなぁ。

762:デフォルトの名無しさん
13/10/15 22:18:09.71 .net
キャリーフラグを無視しない高級言語ってごくわずかしかないよね。

763:デフォルトの名無しさん
13/10/15 23:25:06.01 .net
そもそも1bit分フラグに使ってるからキャリーフラグなんて役に立たんでしょ
SML#はどうか知らんけど

764:デフォルトの名無しさん
13/10/16 22:57:21.15 .net
C++
URLリンク(blog.regehr.org)
ocaml batteriesには、SafeIntというのがあるらしい。参考になるかもよ。
URLリンク(dutherenverseauborddelatable.wordpress.com)

765:デフォルトの名無しさん
13/10/18 10:52:33.25 .net
オブジェクトがさっぱりわからん
レコードと何が違うんだ・・・

766:デフォルトの名無しさん
13/10/18 12:04:36.71 .net
Obj.magic使えば
型なんて関係無くなる?

767:デフォルトの名無しさん
13/10/18 12:12:18.87 .net
[Obj.magic 'a'; Obj.magic "abc"; Obj.magic 123];;
すげー リストに型が違っても入るぞ
何に使えるんだろ?

768:デフォルトの名無しさん
13/10/18 12:52:31.16 .net
Obj.magic 'a' + 1 ;;
すげー こんなのもできるんだwwww
関数型言語界のgotoやで

769:デフォルトの名無しさん
13/10/18 14:08:58.82 .net
奇跡も魔法もあるんだよ。

770:デフォルトの名無しさん
13/10/18 18:35:29.49 .net
ただしよくわからんで使うと死ぬ

771:デフォルトの名無しさん
13/10/18 18:46:15.03 .net
OCamlって最強の言語じゃね?
なんでみんなやらないんだろ

772:デフォルトの名無しさん
13/10/18 18:49:32.53 .net
変なライセンスだから

773:デフォルトの名無しさん
13/10/18 18:53:24.02 .net
intが1ビット少ないとか、モジュールの仕様上スマートリンクができないとか
ファーストクラスモジュールでOCamlのOたるオブジェクトがゴミになりましたとか
そのファーストクラスモジュールは後付けで構文がカオスですとか、あと+.(笑)とかGC遅いとか
ケチを付けようと思ったらいくらでも付けられるからなあ

774:デフォルトの名無しさん
13/10/18 19:13:13.78 .net
Windows版の更新サボってるのが一番の原因だな

775:デフォルトの名無しさん
13/10/18 19:31:42.10 .net
みんなって誰だよ

776:デフォルトの名無しさん
13/10/18 19:33:25.20 .net
研究室ではよく使ってる

777:デフォルトの名無しさん
13/10/18 20:02:22.74 .net
>>765
健常者の集合

778:デフォルトの名無しさん
13/10/18 22:46:49.64 .net
言語の素性はともかくマンパワーは全然足りてないしな

779:デフォルトの名無しさん
13/10/18 23:43:15.36 .net
スマートリンクってなんぞ?

780:デフォルトの名無しさん
13/10/18 23:50:11.98 .net
sageたら教えてやる

781:sage
13/10/18 23:56:08.97 .net
教えてください

782:sega
13/10/19 19:03:49.62 .net
俺にも教えて

783:デフォルトの名無しさん
13/10/19 22:25:27.91 .net
じゃあおれも

784:デフォルトの名無しさん
13/10/28 11:48:04.04 .net
汎関数と高階関数って同じ意味ですか?

785:デフォルトの名無しさん
13/10/28 13:22:54.90 .net
ちがいます

786:デフォルトの名無しさん
13/10/28 13:38:38.58 .net
おなじです

787:デフォルトの名無しさん
13/10/28 13:43:33.45 .net
どっちだよ・・・

788:デフォルトの名無しさん
13/10/28 13:58:52.58 .net
>>774
関数を計算の対象とすること、いいかえると、関数を引数として受け付けたり
関数を返す関数のことを「高階の関数」または「高階関数」という
さらに、高階関数の中で計算の対象が関数だけなものを「汎関数」という
つまり高階関数は広い概念で、汎関数は狭い概念

たとえば関数 map や filter は高階関数であるけれど、リストも計算対象だから汎関数ではない
それに対して、合成関数 o は高階関数であるし汎関数でもある

789:デフォルトの名無しさん
13/10/28 14:26:11.39 .net
let foo f g x = g (f x) ;;
val foo : ('a -> 'b) -> ('b -> 'c) -> 'a -> 'c = <fun>
って合成関数があったとして
'aの引数は計算対象外になるの?

790:デフォルトの名無しさん
13/10/28 15:17:35.72 .net
>>779
記法のせいでわかりにくいけど
('a -> 'b) -> ('b -> 'c) -> ('a -> 'c) って考えればいい

791:デフォルトの名無しさん
13/10/28 15:25:02.71 .net
あと汎関数は量を返す物をいうはず。
だから合成関数は汎関数でなく、高階関数。

792:デフォルトの名無しさん
13/10/28 15:27:39.31 .net
間違えた
合成関数を"返す" 関数は汎関数でなく、高階関数。

793:デフォルトの名無しさん
13/10/28 15:32:51.19 .net
>>779
まず 'a は型変数だから、「'a の引数は...」という用法は日本語として不適切

で、もし質問の意図が「関数 foo の定義における第三引数 x は、関数 foo の計算対象外か?」
であるならば、答えは Yes
引数 x は関数 f の計算対象であるけれど、汎関数 foo の計算対象ではない

汎関数を定義する場合、>>779 も決して間違いではないが、以下のように書いたほうが、
「x は(fooの引数ではなく)無名関数の引数である」という意図が理解しやすいだろう(言語はSML)

- fun foo f g = fn x => g (f x);
> val ('a, 'b, 'c) foo = fn : ('a -> 'b) -> ('b -> 'c) -> 'a -> 'c


>>781
では、その量を返すという汎関数の具体例を挙げてみてくれないか?

794:デフォルトの名無しさん
13/10/28 16:06:23.87 .net
例えばmapをばらしたときに

let rec map f ls = match ls with
[] -> []
| x::xs -> f x :: map f xs ;;

val : ('a -> 'b) -> 'a list -> 'b list = <fun>

たぶんこんな感じで再帰になってるけど
無名関数は再帰で書けないから
無名関数で書けたら汎関数でよい?

795:デフォルトの名無しさん
13/10/28 16:10:19.68 .net
>>783
>では、その量を返すという汎関数の具体例を挙げてみてくれないか?
なんで?
とりあえず、定義っぽいのは見つけたよ。
URLリンク(www.encyclopediaofmath.org)

796:デフォルトの名無しさん
13/10/28 16:41:42.96 .net
ん?schemeはYコンビネータを使って
Y = (λf . (λx . f (x x)) (λx . f (x x)))
無名再帰ができると書いてあるな
何が違うんだろ?動的言語だと出来るとか?

797:デフォルトの名無しさん
13/10/28 17:26:32.96 .net
>>784
汎関数の定義に無名関数を使うことは多いけど、
だからといって、すべての無名関数を用いた定義が汎関数となる訳ではない
だから「無名関数で書けたら汎関数でよい?」という質問については No だ
ただし「引数としてある関数を渡すとmapと同等な無名関数を返す」汎用的な関数が
定義できるのであれば、その関数は汎関数であるといえるだろう

なお、再帰と汎関数は直交するから再帰を伴わない汎関数も存在する(たとえば合成関数 o)
したがって「再帰で書けたら汎関数でよい?」という質問についても No となる


>>785
数学における用語「汎関数」と計算機科学における「汎関数」をごっちゃにしているのでは?
で、ここは(数学板ではなく)プログラム板だ

798:デフォルトの名無しさん
13/10/28 17:37:07.70 .net
>>787
>数学における用語「汎関数」と計算機科学における「汎関数」をごっちゃにしているのでは?
えええー!初耳だよそんなの。
計算機科学の汎関数の定義は?

799:デフォルトの名無しさん
13/10/28 19:17:55.24 .net
同値再帰型なんてのもあるんだね
OCamlって最強言語じゃね?

800:デフォルトの名無しさん
13/10/30 09:26:41.50 .net
高階関数のままと
簡約した形と
評価までの速度に違いがあるのかな?
見やすさで選ばれてるだけ?

801:デフォルトの名無しさん
13/10/30 13:20:56.16 .net
cygwin64bitにもOCaml登場

802:デフォルトの名無しさん
13/10/30 19:40:53.15 .net
簡約した形とは

803:デフォルトの名無しさん
13/10/31 18:52:31.73 .net
ゴルフに出てくる;;の後の
1@0
って何ですか??

804:デフォルトの名無しさん
13/11/01 12:27:52.67 .net
kwsk >>793 #ゴルフ

805:デフォルトの名無しさん
13/11/01 21:39:55.79 .net
コードゴルフか?
'a list -> 'a list -> 'a list じゃなさそうだし自分で定義してるんじゃね?

806:デフォルトの名無しさん
13/11/02 18:53:12.88 .net
S式みたいに
(< 1 2 3 4 5 6 7 8 9)
でtrue みたいに一発で計算ってできますか?

807:デフォルトの名無しさん
13/11/02 19:14:43.17 .net
そういうの書けばできるでしょ

808:デフォルトの名無しさん
13/11/03 00:39:10.77 .net
let rec less_than lst = match lst with
[] -> None
| x :: [] -> Some true
| x :: y :: xs -> if x < y then less_than (y :: xs)
else Some false ;;

なんか一行ですっきり書きたい

809:デフォルトの名無しさん
13/11/03 09:57:51.24 .net
f op xs = and $ zipWith op xs (tail xs)

810:デフォルトの名無しさん
13/11/03 11:18:30.19 .net
ん?それHaskellじゃね?

811:デフォルトの名無しさん
13/11/03 11:27:32.82 .net
こうかな。

fun lessThanForAll l = ListPair.all (op <) (l, tl l);

812:デフォルトの名無しさん
13/11/03 21:33:04.10 .net
ocamlだとむずい

813:デフォルトの名無しさん
13/11/21 06:02:11.85 .net
盛り上がってるね。

814:デフォルトの名無しさん
13/11/25 19:28:29.05 .net
camlp4の入手先を教えて下さい

815:デフォルトの名無しさん
13/11/25 20:49:45.57 .net
URLリンク(github.com)

816:デフォルトの名無しさん
13/11/25 23:43:19.04 .net
camlp4ってなんか開発側のよくわからない方針により大幅に変更されてもともと乏しかったドキュメントが一層整備されてない状態になってから使う気なくした。

817:デフォルトの名無しさん
13/12/13 08:01:15.59 .net
ああ、ハームが強いとか言ってたキルハイエナさんか

818:デフォルトの名無しさん
13/12/13 08:02:13.53 .net
誤爆

819:デフォルトの名無しさん
13/12/14 16:52:12.01 .net
fezにお帰りください

820:デフォルトの名無しさん
13/12/19 13:30:02.87 .net
ABC予想をOCamlで書いて

821:デフォルトの名無しさん
14/01/16 19:03:28.13 .net
row polymorphism(< method_foo : foo -> bar ; .. >の"..")が何か泥臭い感じがしてOCamlのOが好きじゃないのですが、
row polymorphismとexact typeを区別するべき理由ってあるのでしょうか。

822:デフォルトの名無しさん
14/01/20 01:16:23.89 .net
こんな本でた

JavaScriptで学ぶ関数型プログラミング
URLリンク(www.amazon.co.jp)

なんか面白そう

823:デフォルトの名無しさん
14/01/25 20:39:37.59 .net
みんなどこいったんや

824:デフォルトの名無しさん
14/01/27 00:37:41.63 .net
VBAを捨てて関数型言語がデフォルトでサポートされるのは、いつだろうか

825:デフォルトの名無しさん
14/01/27 01:45:51.79 .net
そんな日は来なくていい

826:デフォルトの名無しさん
14/01/28 03:59:19.18 .net
ExcelマクロにVBAとF#の選択肢が標準だったなら、関数型は主流になれる

827:デフォルトの名無しさん
14/01/28 04:04:55.48 .net
>>813
クオンツやアクチュアリーもどきの個体数が増えすぎて、
市場価値が下がらないように口を紡ぎだしたとみた

828:デフォルトの名無しさん
14/01/29 01:01:52.05 .net
口を・・・つむぐ?

829:デフォルトの名無しさん
14/01/29 01:04:27.44 .net
口をつぐんだ人ならいるかもね

830:デフォルトの名無しさん
14/01/29 21:56:44.82 .net
あれでしょ、世の中に不満があるなら自分を変えろ、それが嫌なら耳と目を閉じ、口を紡いで…あれ?

831:デフォルトの名無しさん
14/01/29 21:58:26.24 .net
お口にチャックノリス

832:デフォルトの名無しさん
14/02/12 23:38:39.41 .net
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

833:デフォルトの名無しさん
14/02/13 19:52:50.09 .net
いくつかはjs_of_ocamlを更新すれば定義されてる
nat関係のは提供されてないのでダミーの関数を
funciton create_nat(){}のように自分で追加するか
batteriesのサブセットを切り出して使うか

core_kernel使ってる人もいるらしい

834:デフォルトの名無しさん
14/02/13 23:42:09.86 .net
js_of_ocaml 1.4.0を使っていますがこれではダメなのでしょうか?
nat関係は適当にスクリプトを書いて対応しようと思います
unix_inet_addr_of_stringはbatteries関係なく出てしまうようですね

835:デフォルトの名無しさん
14/02/13 23:59:27.54 .net
bigarrayサポートがまだgit版にしかない
unix_inet_addr_of_stringはruntime/unix.jsをリンクすれば大丈夫だけど
opamで入れたなら多分入ってない

836:デフォルトの名無しさん
14/02/14 00:28:20.76 .net
bigarrayサポートはnat関係のことですよね?
もしそうだとするとcaml_XXXは一体何が原因なのでしょう
それとunix_inet_addr_of_stringはopamで入れている以上直る?ことはないということなのでしょうか

837:デフォルトの名無しさん
14/02/14 00:35:30.75 .net
調べてから書くべきでした
caml_XXXがbitarrayの関数ですね

838:デフォルトの名無しさん
14/02/14 00:36:59.24 .net
big・・・

839:デフォルトの名無しさん
14/02/14 00:45:48.03 .net
> それとunix_inet_addr_of_stringはopamで入れている以上直る?ことはないということなのでしょうか
公式のも唯の空の関数なんで自分で定義しても一緒だし
開発版では修正済みだから1.99だか2.0が出てopamパッケージになれば大丈夫

840:デフォルトの名無しさん
14/02/14 01:06:19.10 .net
なるほど
いずれ修正されることと今でも少し手を入れれば動くことがわかったので良かったです
親切にありがとうございました

841:デフォルトの名無しさん
14/02/16 20:02:36.51 .net
URLリンク(www.reddit.com)

842:デフォルトの名無しさん
14/02/24 14:22:45.10 .net
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`とやって生成しています。

843:832
14/02/24 14:28:40.75 .net
>>832
あ、使用しているOSはLinuxで、OCamlのバージョンは4.01.0です。

844:832
14/02/24 21:13:12.02 .net
findlibのソースを読み、ocamlのソースを読んだ結果、不便な仕様は不便な仕様のようです。
諦めます。

845:デフォルトの名無しさん
14/04/20 10:33:29.81 Ar2j+hn/.net
∀x. P(x) とかλx. x のドットと同じなんじゃない。

846:デフォルトの名無しさん
14/04/20 15:50:34.61 jkTnuZFL.net
structureのドットじゃないのか

847:デフォルトの名無しさん
14/04/23 20:07:50.69 yuYA7aLZ.net
>>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.っていう表記を使う。

用途は何と問われるとちょっと困る程度にはマイナー。

848:デフォルトの名無しさん
14/04/23 20:47:43.26 Rx5WvURy.net
何言ってるか分からないですね

849:デフォルトの名無しさん
14/04/23 22:11:28.21 fVb21MOO.net
aはずっと自由変数ですよ、特殊化されませんよ、ってのを明示するのに使うのか

850:デフォルトの名無しさん
14/04/23 22:41:15.05 OJl2bhdr.net
基本的に、変数は(もし多相性を持っていても)初期化された時点で単相型になる
関数は呼び出されると引数が初期化されるのでその時点で単相型になる
関数自身を変数に入れると、呼び出してなくても変数を初期化しただけで単相型になる

>>835のhoge型の変数は基本とは違って、初期化しただけでは単相型にならないっぽい

851:デフォルトの名無しさん
14/04/23 23:18:57.87 ddVBuvib.net
ためになるわー。

852:835
14/04/24 21:17:13.51 4Y8KSBKa.net
回答ありがとうございます。与えられたチャーチ数の定義がこれだったのですが、周りに聞いてもあまり良い回答を得られなかったので、とても助かりました。
確かにチャーチ数であれば、多相性が維持されなければ駄目ですね。

853:デフォルトの名無しさん
14/05/09 06:41:29.78 gmFOA17u.net
最近JITが高速と聞くのですが
MLtonよりもJITが高速になる場合も
あったりするのでしょうか

854:デフォルトの名無しさん
14/05/09 11:29:52.70 88BxxZ+X.net
早くなるケースもあるけど
大抵のケースは、工夫しないと遅いので作り込みが大変
なので、大体が学生の研究で作って、終わっちゃうんじゃないかな。

速さというより、F#みたいにVM環境向けにbytecodeに落とし込むケースは、あるかも。

C言語の例だと、CERNで、HPのGotoさんが作ってたCINTというCインタプリタがインターラクティブ環境が必要ということで採用されてた。
現在は、規格に追従&共通基盤の恩恵を受けられるllvmベースのclingを開発中。

855:デフォルトの名無しさん
14/05/09 12:50:13.67 viF1oq7i.net
10年以上前だがJavaのShuJITとかあったけど、その作者のプロジェクトを終えるに
あたってのまとめが、少々の理論的な優位点なんて、カネとヒトがたくさんある奴
(よーするにS


856:un(当時)やIBMやHPの作ってるJVM)のパワーの前には吹き飛ぶ、 だった。



857:デフォルトの名無しさん
14/05/09 23:01:59.86 2uUNFhKi.net
いまは、LLVM使うと巨人の肩に乗れるね。
JVMはHotSpotVMベースになってOpenJDKがオープンソースになってるからその上でいじれるように
JSのVMは激戦だけど、IEの実装以外はオープンソースという。
LuaJITは、個人でつくってるのでオーパーツ。

858:デフォルトの名無しさん
14/05/10 22:51:43.07 SJ0/UQRG.net
言語処理系の最適化はマンパワーが必要なので……今はトレンドがLLVMに色々集まる方向性かな

859:デフォルトの名無しさん
14/05/12 21:26:19.65 dnbz3Cdj.net
C++11という巨人の肩に乗ろう

860:デフォルトの名無しさん
14/05/12 22:10:36.00 xvKPpHt2.net
コンパイラは、MLで作ると楽という話もあるが、、、
そこらへんはジレンマ?

861:デフォルトの名無しさん
14/05/13 09:28:41.53 34BaoroY.net
>>847 js_of_ocaml ってJavaScriptで書くより最適化で高速になるからそういう方向もあるかも。
URLリンク(jsperf.com)

862:デフォルトの名無しさん
14/05/13 20:13:34.93 5OIUPatf.net
Excelのセル中で、F#で定義した関数が使えたら面白いかもと思った。

863:デフォルトの名無しさん
14/05/16 08:18:12.70 72NRi/gE.net
altJS としては最適化手法が数学的に議論されていて論文も出ている js_of_ocaml が最強なのでは:
URLリンク(citeseerx.ist.psu.edu)

864:デフォルトの名無しさん
14/05/16 16:19:49.33 PtE4FBA8.net
LuaJITって個人のなの?ブラジル生まれだとは知ってたが。
あとllvmってコンパイラ基盤としては楽だけど、インタプリタとしてはちょっと難ありじゃないかしら。
適当に使うと最初の起動時間がかなり遅い。

865:デフォルトの名無しさん
14/05/17 03:51:33.29 RMSyflwZ.net
Luaは、ブラジル、リオデジャネイロの大学の研究グループから
LuaJIT作ってるのはドイツ、ミュンヘンの人

866:デフォルトの名無しさん
14/06/01 17:00:19.03 3NiYSkpU.net
TAPLのexercise 3.2.5が分からん。なんで3.2.3の定義で S_i ⊆ S_{i+1} になるんだ?
各S_iは最初のS_1とかを除いて、disjointになるように思える。
本持ってる人教えて

867:デフォルトの名無しさん
14/06/01 20:16:49.72 dwNATPFa.net
URLリンク(bitbucket.org)

868:デフォルトの名無しさん
14/06/09 23:28:07.14 g6XVfS4Z.net
ocamlの演算子、**より~-.の方が優先順位が高いのはなぜ?

869:デフォルトの名無しさん
14/06/22 23:27:34.81 kfNNTRTT.net
単項だからでは

870:デフォルトの名無しさん
14/07/05 07:26:50.37 uomUGxMD.net
OCamlの日本語の文字列扱うのて
上手く行かないものですか?

871:デフォルトの名無しさん
14/08/01 09:24:52.78 Z/VI2an6.net
どの程度のレベルで上手くやろうとしているのか分からないけど、単純にstring型に代入、表示は何も無しでも動作するが、Stringモジュールは多言語に対応しているわけではない。String.lengthなどは狙い通りには動かない。
ライブラリ(Batteries, Camomile)等を使えば日本語できる。

と思ってBatUTF8を弄ってみたが、containsとかiterとかでBatUChar.tを取り扱う必要があるくせに、
BatUChar.t型を作る方法が面倒だなあ。of_digitしか無い。BatUTF8.get "あ" 0で誤魔化せるが、迂遠。

872:デフォルトの名無しさん
14/08/28 00:17:52.33 KKzfTscW.net
SML/NJ version 110.77 リリース!
バージョン番号を4.0にリセットする前に、数回のリリースがあって、その中に64bitサポート
が含まれるらしいが、今回はbugfixのマイナー・リリースらしい。
外部関数の32bitコンパイルがそろそろサポートされなくなりつつあるので、64bitサポートが
はやくリリースされてほしい。

873:デフォルトの名無しさん
14/08/28 00:31:14.45 3eVJnuNA.net
まだやってるんだな NJ

874:デフォルトの名無しさん
14/08/28 22:23:43.51 fRdOqM0/.net
camomileの使い方が全然わからないんですがどこを読めばいいんでしょうか
主に文字コード変換と正規表現について知りたいです

875:デフォルトの名無しさん
14/08/29 22:52:22.51 LjCjaXt3.net
いつの間にかOCaml4.02.0

876:デフォルトの名無しさん
14/08/30 19:35:20.64 8G53+yskN
age

877:デフォルトの名無しさん
14/08/30 23:41:43.96 //K1VbLN.net
test

878:デフォルトの名無しさん
14/09/02 08:32:32.40 3nEDqgz+.net
OCamlのマニュアルにocamlbrowserがまだあるのはバグっすな

ocamldoc/trunk/manual/cmds/Makefile line#2
remove "browser.tex "

879:デフォルトの名無しさん
14/09/02 22:57:08.51 h4iRRc1G.net
ocaml標準のlexでは日本語が扱えないのでulexに差し替えたらparserが死んだでござる。
ダメだこりゃ

880:デフォルトの名無しさん
14/09/16 16:34:15.58 smkPtKEd.net
>>868
URLリンク(github.com)
menhirとulexを一緒に使う方法。

881:デフォルトの名無しさん
14/09/24 22:11:44.77 ChDiOOXp.net
ocaml 4.01.0で
# Obj.size @@ Obj.repr 1
がバグるんだけど、理由わかる?

882:デフォルトの名無しさん
14/09/24 23:08:38.11 wtmzOZEz.net
仕様です。
ソースはおろかドキュメントすら読まずにObjを使うとはアホの極みです。

Chapter "Interfacing C with OCaml", Section 2..3

883:デフォルトの名無しさん
14/09/26 02:16:11.74 63HfXufw.net
OCamlのすごさはもっと知られるべき #オブジェクト指向 や #関数型 は「敗者の道具」である URLリンク(itpro.nikkeibp.co.jp)

884:デフォルトの名無しさん
14/09/26 11:58:16.90 p4JSIuT/.net
>>872
これタイトルで損してる記事だろ

885:デフォルトの名無しさん
14/09/26 11:59:36.06 LJo7FzMV.net
みかかデータ、マンセー記事っぽかったけど

886:デフォルトの名無しさん
14/09/26 12:42:39.46 /S6uCtFc.net
関数型とかマルチパラ代務とかドカタには無理。オブジェクトだって散々語られてようやく、いや未だ、か

一部の突出した集団以外は、ほかにどうしようもない人が沈殿する職業になってるイメージ

887:デフォルトの名無しさん
14/09/26 20:12:51.02 +dkMIegW.net
do構文の使用禁止の規約って全部>>=で書くってことなのだろうか。理由も含めて気になる。

888:デフォルトの名無しさん
14/09/26 20:54:07.13 mU/FSdzC.net
>>872
前半で散々オブジェクト指向をこきおろしておきながら、
中盤でOCamlを推すという意味不明な文章の論理の展開がある
ML族を推すのなら Caml か SML にしないと一貫性が無いし、
Caml にオブジェクト指向を後付けした "O"Caml 開発時の判断は
今となっては流行に踊らされた大きな失敗であったと断罪すべき

おまけに「個人的にOCamlがすごいと思う」とあるから何かと読んでみたら、
単なるパラメタ型多相の話でしかないことに笑ってしまった
「とがった」とか「すごい」とか、小学生の感想文とレベルは変わらない
こんなポエム記事で給料をもらえるのだから、日経ITproの記者とは楽な職業だね

>>873
タイトル以前の問題で、記事に中身が無くて話にならん

>>876
ソースコード解析ツールなら言語処理系と似た構造になるから、
(一般的には副作用を模倣するために使われる)do記法を使う必要性は無いと思われ

889:デフォルトの名無しさん
14/09/26 21:11:21.88 +dkMIegW.net
ちょっとぐぐってみたらこういうページがあった。
URLリンク(www.haskell.org)

890:デフォルトの名無しさん
14/09/26 21:24:18.32 rzI+KhbO.net
たしかにタイトルで損したみたいだな

891:デフォルトの名無しさん
14/09/27 09:02:30.03 aRJ76A2x.net
ああいう煽り記事読んでドキドキするのは思春期の子供だけ
もっと大人向けの真面目に面白い記事は無いのか?

892:デフォルトの名無しさん
14/09/27 09:08:36.15 V9AoMXji.net
 もし完全無欠のプログラマが存在するのであれば、そうした方法論に頼らなくても、
完全に意図通りに動作するプログラムを頭から書き下していけばいいのです。
オブジェクト指向プログラミングや関数型プログラミングは、不完全な人間のために用意されたもの、
いわば「敗者の道具」といえます。

 もちろん、これは極端すぎる表現です。例えば、人は空を飛べないので飛行機に乗ります。
このことをもって「飛行機は敗者の道具である」と言う人はいません。
そうした意味では、オブジェクト指向プログラミングや関数型プログラミングを敗者の道具と呼ぶのは、
単なる言葉遊びにすぎません。人間が全知全能でないのは当たり前ですから。



完全に朝日脳だな

893:デフォルトの名無しさん
14/09/27 17:11:59.10 lJpImKEe.net
産経信者も一緒に死ねカス

894:デフォルトの名無しさん
14/09/28 11:09:58.25 yTX/1oq/.net
今回朝日がしでかしたことを誰かまとめてくれ

895:デフォルトの名無しさん
14/09/28 12:21:46.09 MFWVwvB9.net
スレ違いカスはお引き取り下さい

896:デフォルトの名無しさん
14/09/28 12:22:16.97 /z7vQ2zP.net
>>883
どいたかこ死亡

897:デフォルトの名無しさん
14/09/28 12:38:21.08 3fm9b2hk.net
土井たか子がリアルに退いた過去になったのか

898:デフォルトの名無しさん
14/09/28 12:39:24.70 /z7vQ2zP.net
土井がどいた過去

899:デフォルトの名無しさん
14/09/28 12:40:25.54 /z7vQ2zP.net
おんたけさんが噴火して
おたけさんが逝った

900:デフォルトの名無しさん
14/10/07 01:19:25.02 RDe60glL.net
対話環境を再起動せずに、リコンパイルしたライブラリをロードし直す方法ってありますか?
#load でもう一度ロードすると、シグニチャが異なると怒られてしまいます

901:デフォルトの名無しさん
14/11/07 22:47:28.24 jjvVlXlA.net
OCamlで型クラスを実現する方法ある?
あとカインドも

902:デフォルトの名無しさん
14/12/28 01:38:33.30 t9XFY33G.net
モジュールで型クラス的なものを作ることができる。便利とは言いがたいが

903:デフォルトの名無しさん
15/02/05 08:14:28.48 0RN82SQI.net
Haskell より OCaml の方が部分部分で好みなんだけど、
OCaml は最近何か進展とか発展とか無いのかな。

904:デフォルトの名無しさん
15/02/05 13:15:20.83 tkrhoEGU.net
4.0出たばっかじゃなかったっけ

905:デフォルトの名無しさん
15/02/05 14:50:21.24 j+EW35P1.net
岡村はソース醜いのがなあ

906:デフォルトの名無しさん
15/02/05 19:17:09.87 Omd6cUWA.net
>>894
たとえば?

907:デフォルトの名無しさん
15/02/05 20:40:25.53 SFYHhnYx.net
上から読んでいけば何しているのか分かるOCamlのソースは読みやすい部類
batteriesとかcoreといった大きいライブラリでも、モジュールと同名のファイル見ればいいだけなので、
どこに何があるのか探しやすい
基本的に手続き脳なので、haskellはどこから読めばいいのか分からない
悪名高いimport文のおかげでもっと読めない

908:デフォルトの名無しさん
15/02/05 21:27:52.95 uGoWQo5h.net
OCamlなんとなくソースの見た目のバランスが悪いっていうのはなんかわかるわ。

909:894
15/02/06 00:00:17.76 mrZTa4bi.net
>>897
まさにそんなとこ。ぱっと見よくない

910:デフォルトの名無しさん
15/02/06 11:46:04.54 qvKWViHE.net
ソースが読みにくい言語は致命的に生産&保守効率が悪い。

911:デフォルトの名無しさん
15/02/06 11:56:15.06 uqQOSJHn.net
>>898

SMLならいいの?

912:デフォルトの名無しさん
15/02/19 21:32:44.77 VWBqr6Q7.net
レコード型ある言語、多相レコードある言語、フィールドがファーストクラスにできる言語
おしえて。
ぜんぶもってるのがいい。

913:デフォルトの名無しさん
15/02/19 22:31:13.58 /rXoqLFu.net
>>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#解説
 URLリンク(www.pllab.riec.tohoku.ac.jp)

914:デフォルトの名無しさん
15/02/19 22:34:08.05 VWBqr6Q7.net
↑ありがと。
ほんとにぜんぶ!? フィールドファーストクラスなのその言語?

915:デフォルトの名無しさん
15/02/19 22:35:11.19 VWBqr6Q7.net
あ、かいてあった、ごめん。

916:デフォルトの名無しさん
15/02/19 22:37:49.31 VWBqr6Q7.net
SML/NJってやつは、フィールドがファーストじゃないとして、
SML#ってやつはファーストなの?
ほかにも>>900 全部持ってる言語とかあればおしえて。みんな。

917:デフォルトの名無しさん
15/02/20 03:39:21.83 V63A/fo0.net
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みたして相だけどコンパイル時に型ちぇっくしてくれないよねそれ?
  うーんなんかない?

918:デフォルトの名無しさん
15/02/20 09:34:49.39 vrO8Sxqb.net
1

919:デフォルトの名無しさん
15/02/20 10:31:17.89 N6pKHonh.net
じゃあ俺は2

920:デフォルトの名無しさん
15/02/20 10:55:47.88 sOgXDRpH.net
宿題は自力でやれw

921:デフォルトの名無しさん
15/02/21 00:55:59.35 KgB/c0aN.net
>>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(とそのすべての処理系)のフィールドはファーストクラスである

922:デフォルトの名無しさん
15/02/21 01:03:27.14 KaIHMFIz.net
>   - val get_x = #X : {X: real, Y: 'a} -> real;
でもこの get_x って、>>902 の point_3d には使えないよね。

923:デフォルトの名無しさん
15/02/21 01:45:43.43 KgB/c0aN.net
うん、使えない
それが >>910 で書いた(Standard ML言語仕様における)「型システム」の制約だね
その制約を無くした SML# が特異なだけで、SML/NJ 以外の大半の SML 処理系に同じ制約がある

924:デフォルトの名無しさん
15/02/21 06:39:28.04 QYKbOsyjA
SML#はstructual subtype関係 もつんじゃないの?↑のリンク先見る限りさ
{l1:a, l2:b} < {l1:a} みたいに扱われないの?
javaの部分型関係は明示的にクラス名に順序関係付けただけのものだけじゃないの?

フィールドをファーストクラスとして扱えるような技があるのはうえの説明で理解した。Thanks. 思ってたより使えるなsml。

一方で、フィールドリテラル自体を、関数経由でなく、ファーストクラスとしてあつかう必要がある/そっちのほうが好ましい かもしれない
上のリンク先にある論文見るかぎり(例えば↓)そういういみでのファーストクラスフィールドは現状は扱ってないと書いてある。
SML# in Industry: A Practical ERP System Developmentn,
# val get_x = #X;
のXに実行時中に得られる文字列の値を使いたい
String str = "myfld";
Rec rec = {str:"yaaa"};
みたいにさ。

うーんsmlでかくか、sml#つかうか、それともJava,Scala,でかくかまような。
型推論は必要ないかもしれないし、sml#ってどこまでメンテされるのか解らないし、SML/NJがいいかな、、しかし>>911がきになるな。
scalaのオブジェクトでレコードをシミュレートするか、、

ファーストクラスのフィールドを持つ、
レコードで構造的な部分型関係をもっているようなのがほしい。

925:デフォルトの名無しさん
15/02/21 06:49:52.82 QYKbOsyjA
というかここMLのすれだったのか、関数型言語全般かと思った。

926:デフォルトの名無しさん
15/02/21 20:03:59.94 KgB/c0aN.net
>>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} という部分型関係を持つ

927:片山博文MZ ◆T6xkBnTXz7B0
15/03/06 00:20:10.28 Utx2vhNJ.net
MLで株取引してるヤツおる?

928:デフォルトの名無しさん
15/03/06 19:18:02.97 z8rf25M9.net
>>916
URLリンク(www.janestreet.com)

929:デフォルトの名無しさん
15/04/11 09:23:04.09 4MGH5loU.net
『関数型プログラミングに目覚めた! IQ145の女子高校生の先輩から受けた特訓5日間』
URLリンク(www.amazon.co.jp)
なんか面白そう。
ベストセラー1位だし。

930:デフォルトの名無しさん
15/04/11 11:09:33.39 6e+Pm3/z.net
著者名みてどん引き

931:デフォルトの名無しさん
15/04/11 14:52:19.95 kM0sKeAC.net
>>918
まーたハゲの人バカやってるのか

932:デフォルトの名無しさん
15/04/30 22:13:28.21 CyAc4DaC.net
これあわせで、qiitaで何ヶ月か前に宣伝始めたんだよな。
今回のMSの開発者向けイベントで、マルチプラットフォームアピールしてたから、F#にもチャンスが増えるかも。

933:デフォルトの名無しさん
15/06/21 14:35:56.40 jZdgW1bu.net
ML系でマルチスレッドプログラミングってどうやるの?
できれば、プリエンプティブで。
ノンプリなら、バインディングさえ準備できればpthreadとか使うだけで出来る?
あと、マルチコアで動く処理系ってどんなのがありますか?

934:デフォルトの名無しさん
15/06/21 15:56:19.44 h+2IwqsQ.net
ノンプリエンプティブな並行のフレームワークとしてはConcurrent ML、
マルチコアでプリエンプティブで動く処理系は…MultiMLton?使ったことないけど

935:デフォルトの名無しさん
15/06/21 21:09:48.45 jZdgW1bu.net
>>923
ありがとう!参考にしてみます。

936:デフォルトの名無しさん
15/06/22 21:17:40.35 NI+fH6po.net
SML/NJにCMLが入ってるみたいだけど
呼び出しかた自体が良く分かりませんでした,,,

937:デフォルトの名無しさん
15/06/22 22:19:01.14 OHI7eLtz.net
まだバイトコードだけなんで処理速度的にはメリット薄いがocaml-multicoreも開発中
URLリンク(github.com)
諦めてF#が一番楽そう

938:デフォルトの名無しさん
15/07/04 11:48:28.89 D//5Uocc.net
新潮10月号(9/7発売)に最新長編『モナドの領域』330枚一挙掲載

939:デフォルトの名無しさん
15/07/19 15:49:50.98 1yK25cK1.net
Haskell ガチムチいい男
F# タマもサオも取ったニューハーフ
OCaml タマは摘出、サオは残したオカマ
Java ノン気の一般人
C 古風な一般人
C++ 団塊の世代の一般人
C# ゆとり世代

940:デフォルトの名無しさん
15/08/01 08:14:56.43 keSdeN9Q.net
Ocamlってschemeのvaluesに相当するのないのですか?

941:デフォルトの名無しさん
15/08/02 05:19:00.73 OeY6iFU6.net
+ と+. って絶対に区別しないといけないのです?浮動小数と整数でコードわけるのめんどくさい

942:デフォルトの名無しさん
15/11/01 12:21:17.11 FL14q5P6.net
min-camlを読み解こうと思ってできれば小さく分けてコンパイルして確かめたいです
parser.mly/lexer.mll/id.ml/syntax.ml/type.ml
ここまでが最初の塊のようなのでocamlyacc/ocamllexしたあとインタプリタで
#use "type.ml"
#use "id.ml"
#use "syntax.ml"
#use "parser.ml"
#use "lexer.ml"
までやるとlexer.mlを読み込んでいるのにlexer.mllでエラーがでます
どうやってインタプリタに読み込めばいいのでしょうか

943:デフォルトの名無しさん
16/03/06 17:23:06.30 LFfI8YF2.net
C++11とboostでmlと等価なこと出来るようになってない?

944:デフォルトの名無しさん
16/03/07 12:29:48.85 IQOnvxBL.net
楽にはなっても等価にはなってない

945:デフォルトの名無しさん
16/06/16 23:45:45.68 ogi8+DdB.net
OCaml覚えてHaxeのターゲット自分で書けるようになったらなあって思ったけど
パット見何が書いてあるのか良くわからない

946:デフォルトの名無しさん
16/07/09 07:50:35.12 lXAilHyr.net
>>928
JavaScript 苦労人

947:デフォルトの名無しさん
16/07/22 00:00:06.57 Zm57F0sF.net
OCaml インストールしてたら �� が出てきた。
絵文字がこんなところにも進出してるとは……

948:デフォルトの名無しさん
16/07/23 20:35:22.56 K/hEThar.net
F#はいまいち盛り上がらんのでOCamlに戻るか

949:デフォルトの名無しさん
16/07/31 08:26:29.15 FitcqrL7.net
OCamlには関数合成がないと訊くんですが、@@は合成ではないのですか

950:デフォルトの名無しさん
16/09/02 10:19:54.63 75SbB3DN.net
OCaml勉強しはじめの初心者の質問なんですが、どなたか教えてください

URLリンク(ocaml.org)
ここの説明によると、行末の;;を避けるためみんなこう書く
open Amodule
let () = hello ()

ってあるんですが、これがまず理解できない
()ってunitの定数値というかリテラルみたいなものなのではないですか?
letで束縛する的なコードが書けることが腑に落ちないのですが・・・

951:デフォルトの名無しさん
16/09/02 13:34:30.13 xfbClL/y.net
() って C の void みたいなもんやろ。
hello() の戻り値が void で両辺 void = void で OK みたいな。

952:デフォルトの名無しさん
16/09/02 18:21:07.36 anKFyHj7.net
=が等号ならそんな感じってするのですが、
let 変数名 = 値 って形に当てはまると
unitの()って変数名であり値でもあるってこと?
とか考え出すと混乱して�


953:オまいます・・・



954:デフォルトの名無しさん
16/09/02 18:22:47.76 h+44ee0t.net
>>939
その用途の場合単なるエントリポイントなので()にそんなに意味はない。
let _ =~でも動作するよ。

955:デフォルトの名無しさん
16/09/02 19:39:25.71 MnPjnRyk.net
>>941
letは代入ではなくパターンマッチ
普段は let パターン = 式 のパターンのところに新規の束縛(変数名)を一個置いてるだけ
let 1 =2 とか書けてMatch_failureになるよ

956:デフォルトの名無しさん
16/09/02 21:44:32.31 TuW8Vb/N.net
皆さんありがとう、何となく分かりました
実際に「let x::xs = [1;2;3;4];;」とかやるとx=1、xs=[2;3;4]とかなりますね
letってのはmatchの単独パターンバージョンみたいな感じなんですね、きっと

957:デフォルトの名無しさん
16/09/03 14:38:27.01 xDozGH3Q.net
OCamlも捨てがたい
URLリンク(qiita.com)

958:デフォルトの名無しさん
16/09/04 01:00:38.68 m/Nfzz4G.net
たびたび初心者的質問ですいません
OCamlにはListやArrayに対するgroup by関数って無いんでしょうか?
標準ライブラリ(ideoneやyukicoderで利用可能)の範囲内で存在すれば嬉しいんですが・・・

959:デフォルトの名無しさん
16/09/04 21:14:26.78 ZFd7dRv3.net
List.filter : ('a -> bool) -> 'a list -> 'a list ならある。
Arrayにはないから自力で実装するかExtLibでも使おう。

っていうか標準ライブラリだったら自分で検索しようね。
馬鹿なの?

960:デフォルトの名無しさん
16/09/04 21:40:33.19 m/Nfzz4G.net
>>947
標準ライブラリは探したけど、無かったから自作したよ
最近だとF#にしろscalaにしろgroupbyがあるのが当たり前だから、確認のため聞いてみた
その程度の事情も察せないお前が馬鹿じゃねw

961:デフォルトの名無しさん
16/09/05 20:50:26.74 uZnwqH5s.net
宿題や競プロでもやるんじゃなきゃCoreかBatteries入れないとやってられない

962:デフォルトの名無しさん
16/09/10 11:17:54.65 hxR4/XV4.net
標準ライブラリゴミすぎ

963:デフォルトの名無しさん
16/09/10 20:27:19.82 vL431mpn.net
map reduceに相当するもんがあればいけるんじゃね

964:デフォルトの名無しさん
17/02/27 20:54:32.60 nBcs47LL.net
「プログラミングの基礎」を買ってきてOcamlを始めようとしたのですがインタプリタが日本語を表示してくれません。ぐぐっても知識が足らず解決法がわからなくて途方に暮れています。誰か助けて…

965:デフォルトの名無しさん
17/02/27 21:06:38.41 nBcs47LL.net
使ってる環境はubuntu16.10です。

966:デフォルトの名無しさん
17/02/28 21:46:08.53 hBxDt9/3.net
>>952解決しました

967:デフォルトの名無しさん
17/03/01 12:55:25.91 jLbNtrZK.net
どのようにして解決したのか書いてもらえると
同じ状況に陥った人の助けになるかも知れないわけだが…

968:デフォルトの名無しさん
17/03/01 16:07:29.52 ZtKy2rs9.net
>>955
解決策を2つ試しました

まず、著者のサポートサイト(URLリンク(pllab.is.ocha.ac.jp))を見て、
 ①端末起動→上部メニューバーの端末タブ→文字コードの設定→日本語(EUC-JP)に設定してから
 ②LANG=en_US.ISO88591 ocamlを実行しましたが解決しませんでした。

次に、URLリンク(qiita.com)を参考にして、
 ①任意テキストエディタで~/(ホームディレクトリ配下の意味)に.ocamlinitというファイルを作り、
 ②「let printer ppf = Format.fprintf ppf "\"%s\"";;
   #install_printer printer」と記述した所、解決しました。

コンピュータやプログラミングに詳しい方にはかなりくどいと思いますが、多分自分のようなプログラミング初心者が読む本だと思うので念入りに書いておきます。

969:デフォルトの名無しさん
17/03/01 16:10:35.17 ZtKy2rs9.net
というか、誰も見てないと思ってた・・・

970:デフォルトの名無しさん
17/03/01 16:46:02.21 8oSlLlXA.net


971:デフォルトの名無しさん
17/05/01 06:16:47.63 Cn5FkhjE.net
純粋関数型データ構造が発売されたってのに盛り上がってないな

972:デフォルトの名無しさん
17/05/01 08:26:08.29 X5RvQ3AI.net
>>959
あれを読むような層は、既に原書で読んでるから気にもしないのでは。

973:デフォルトの名無しさん
17/05/30 11:59:51.61 heN7Y+lD.net
Real World OCaml で OCaml入門中です。

URLリンク(realworldocaml.org)
... As a result, when passing labeled functions as arguments,
you need to take care to be consistent in your ordering of labeled arguments.

要は、ラベル付引数持ちの関数 は 引数の順序気にしなくて良くなるので便利だねって話だったのに、
そういう関数を 他の関数に引数として渡す時は 順序気にしないと型エラーになるかもよ、と。
現 (OCaml ver. 4.04.1) にそうなってるのはしょうがないとして、ユーザーは不満だったりしないんですかね?
仕様変えてどこでも順序気にしなくてよくなるようにするのは何か不都合があるんでしょうか?

974:デフォルトの名無しさん
17/05/31 12:35:03.09 nyiBm3r5.net
はい

975:デフォルトの名無しさん
17/06/02 14:10:54.16 v4wV8DId.net
>>959
書店で立ち読みしてみたんだけど微妙に扱っているデータ構造少なくね?
サンプルコードがStandard MLというのは驚いたが。

976:デフォルトの名無しさん
17/06/09 03:43:45.31 Z/PWf/cV.net
末尾再帰がイメージできないんだけど

977:デフォルトの名無しさん
17/06/09 10:56:43.72 jgO9PNm3.net
「なんでも再帰」や「なんでも継続」を読んでみたら?例はSchemeだが

978:デフォルトの名無しさん
17/06/09 13:37:56.60 3OdcZ+id.net
fact 0 = 1
fact n = n * (fact (n-1))
だと,fact (n-1)の再帰呼出の後で nとの掛け算を
しなければならない.計算の最後(=末尾)が再帰では
なく乗算となる.
fact2 0 n = n
fact2 n k = fact2 (n-1) (n*x)
として
fact1 n = fact2 n 1
としておけば,fact2の計算の最後はfact2の
再帰呼出で,callをgotoに変えたループで実行できる.
こんな感じでイメージできる?

979:デフォルトの名無しさん
17/06/09 14:50:46.84 rw1qC18c.net
f_outer(n){
f_inner(n, accumulator){
if 1 == n
accumulator
else
f_inner(n - 1, n * accumulator)
}
}

accumulator に蓄積すれば?

980:965
17/06/09 14:56:24.07 rw1qC18c.net
f_outer(n){
f_inner(n, accumulator){
if 1 == n
accumulator
else
f_inner(n - 1, n * accumulator)
}
return f_inner(n, 0)
}

修正。
内部関数を、return するのが抜けていた

981:デフォルトの名無しさん
17/06/09 16:51:44.77 VCuqCK40.net
おおおわかった気がする
ありがとう!
なんでも再起とやらも読んで見ることにする

982:デフォルトの名無しさん
17/06/09 17:05:35.04 3Dqy8l+L.net
>>968
return f_inner(n, 1)
じゃない?

983:デフォルトの名無しさん
17/06/25 18:30:26.47 v1ZjLLZV.net
OcamlとかCoqって名古屋以外でも大学での授業とか研究に使われているの?
一時期のブームは去ったみたいだけど。
大学の情報学部とかの現状にはちょっとだけ興味がある。

そして流行に後れて今頃勉強している40代のオレ。

984:デフォルトの名無しさん
17/07/03 09:21:46.88 ipQv+IYB.net
東大東北大お茶の水では使ってた

985:デフォルトの名無しさん
17/07/03 17:44:24.93 /M1wO8+Z.net
授業で使ったのに広まらなかったということか。
つまり啓蒙に失敗したと。

986:デフォルトの名無しさん
17/07/04 13:46:26.44 VgVQ93XC.net
Occamなら知っとるぞよ?

987:デフォルトの名無しさん
17/07/12 14:21:04.56 06OhWRFP.net
>973
広まらなかったというかキラーアプリがなかったというか…
結局Ocamlで作られたアプリで唯一プログラマ間で流行ったのがCoqなんじゃね?

988:デフォルトの名無しさん
17/07/12 14:33:02.68 bLDjTsNM.net
OCaml は金融とかで使われてるんじゃ無かったか。

そういや Rust も最初は OCaml でコンパイラー書かれてたんだよな。

989:デフォルトの名無しさん
17/07/14 23:08:50.92 UJz0OWoz.net
俺がocaml覚えたきっかけはとあるエロゲーのチートツールなんだが
あれの作者がなぜそれを採用したかにはずごい興味ある

990:デフォルトの名無しさん
17/07/15 12:06:36.80 03i9G/wL.net
>>977
どっかの学生だったんじゃないの?兄妹ものエロゲだけに京大とか。

991:デフォルトの名無しさん
17/08/16 21:00:55.34 H/HIEf+2.net
(*´・ω・`*)

992:デフォルトの名無しさん
17/08/17 13:02:39.82 5mQoD0+b.net
(´・ω・`)

993:デフォルトの名無しさん
17/09/01 18:43:59.45 RxXe6GrD.net
8月はちょっと纏まった時間がとれたので、
「ソフトウェアの基礎」日本語訳の練習問題を解きすすめてみた。
まだPoly.vが終わった序盤だけどだいぶCoqに慣れてきた。
星三つrecommendedでもたまに難しい問題があるなー、というのが感想。
論理学の命題というのは高校・大学教育で慣れているだけで
見直してみると思ったよりも複雑な構造をしていたのだと今更ながらに感じた。
実務でCoqが要求されることは当分ないと思うけど、
逆変換の関数は少なからず実装することがあるので
ときどき「Coq使って証明したい」という気分にはなるんだよなー。

994:デフォルトの名無しさん
17/09/05 11:03:28.55 a/Cb1ZW9.net
URLリンク(ocaml.jp)
死んでるな……
> ( ! ) Parse error: syntax error, unexpected 'new' (T_NEW) in /virtual/osiire/public_html/lib/func.php on line 531

995:デフォルトの名無しさん
17/09/08 14:02:07.35 swD2wqBn.net
ocaml.jpは息してる?

996:デフォルトの名無しさん
17/09/24 12:35:45.27 VL5Szw+L.net
いつまで死んでるんだよ

997:デフォルトの名無しさん
17/10/03 00:31:09.35 JZnIdnEQ.net
復活した

998:デフォルトの名無しさん
17/10/03 02:20:47.65 upqeSfz9.net
復活したのは良いけど、一言何か無いのかよ。誰が管理してるんだ。

999:979
17/10/05 12:08:08.18 SZzrAZT5.net
日本語訳の古さに苦戦しつつLogic.vまで進めていたところ……
久しぶりに英語の本家を見たら、
なんかVol.1 ~ Vol.3に増えてるー!?
あまりの道のりの遠さに絶望しつつ内容を見ると、
旧版からホーア理論まわりをVol..2に分離し、
Vol.3は赤黒木等の少し高度なデータ構造について色々とCoqで証明して感じらしい(新規)。
……く、面白そうじゃないか。

1000:デフォルトの名無しさん
17/10/05 19:45:51.56 72rIdNeW.net
>>981
リンクpls

1001:デフォルトの名無しさん
17/10/07 12:06:25.63 689sKi0/.net
>>988
URLリンク(softwarefoundations.cis.upenn.edu)

1002:979
17/10/30 19:39:25.32 asGH9s/c.net
ここ一ヶ月、旧くなった日本語版を捨て英語版に再挑戦してみた。
以前は出来るだけ写経していたが時間がかかり過ぎるので、
付属の.vファイルを直接書き換える方針に変更。
結構章立てと共に内容変わってるなぁ……追加された良問も多いし。
英語の非形式的証明は書く機会もなさそうだし、パスするか。
しかし、答えがWeb上に転がってないのは自習者には正直辛い。
どうもSICPみたいな標準教科書を目指してるっぽい?
こーゆうの(coq)を国立研究所で作れる国はやっぱり凄いと思う今日この頃。

1003:デフォルトの名無しさん
17/11/01 07:27:01.78 wuKEf1Sh.net
a

1004:デフォルトの名無しさん
17/11/01 07:27:36.60 wuKEf1Sh.net
sit

1005:デフォルトの名無しさん
17/11/01 07:27:56.41 wuKEf1Sh.net
dot

1006:デフォルトの名無しさん
17/11/01 07:28:13.79 wuKEf1Sh.net
egg

1007:デフォルトの名無しさん
17/11/01 07:28:31.25 wuKEf1Sh.net


1008:デフォルトの名無しさん
17/11/01 07:28:48.81 wuKEf1Sh.net
this

1009:デフォルトの名無しさん
17/11/01 07:29:26.33 wuKEf1Sh.net
combi

1010:デフォルトの名無しさん
17/11/01 07:30:08.09 wuKEf1Sh.net
it

1011:デフォルトの名無しさん
17/11/01 07:30:42.85 wuKEf1Sh.net
2

1012:デフォルトの名無しさん
17/11/01 07:31:16.98 wuKEf1Sh.net
ping

1013:デフォルトの名無しさん
17/11/01 07:32:05.81 wuKEf1Sh.net
pong

1014:デフォルトの名無しさん
17/11/01 07:32:32.73 wuKEf1Sh.net
wild

1015:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 3061日 0時間 17分 11秒

1016:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


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