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


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

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



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/

732 名前:デフォルトの名無しさん [2013/10/05(土) 09:27:34.70 .net]
副作用にも色々表現方法があって迷うなぁ
まぁOCamlはそれがいいんだろうけど

733 名前:デフォルトの名無しさん mailto:sage [2013/10/05(土) 14:18:01.03 .net]
文字列だけなら print_string とか print_endline とかでいいだろうけど、
数値とか含むのを出力するときはどうするのがスマートなんだろう?
俺はだいたい Printf.printf を使ってしまうのだけど。

734 名前:デフォルトの名無しさん mailto:sage [2013/10/05(土) 14:42:49.03 .net]
>>721
間違ってる
Windows は CR+LF すなわち現在行を消して先頭に戻してから改行するのだッ

735 名前:デフォルトの名無しさん mailto:sage [2013/10/05(土) 14:51:34.09 .net]
> Linuxだと\nで改行、\rで現在の行を消して先頭からやり直し、
OSのアプリが, 慣習的に "\n" を論理改行文字として扱ってる(tty ドライバーも
このように扱いやすく作ってある)だけで, 端末制御として使う CR だとか LF とは
分けて考えるべきだと思うよ.

実際に tty を raw モードに設定すると, CR - LF("\r\n") を "\n" にマップする
作業はアプリの仕事になる.

端末から見た, 各制御文字の役割は以下であってそれ以外の何者でもない
CR: カーソルを行の先頭に戻す,
LF: カーソルを次の行に移動する(カラムは移動しない)

736 名前:デフォルトの名無しさん [2013/10/05(土) 17:25:39.93 .net]
ocamlのcryptokit使おうとしたら、エラーになるんだがなんでなんだぜ。

Fatal error: cannot load shared library dllcryptokit_stubs
Reason: dllcryptokit_stubs.so: cannot open shared object file: No such file or directory

737 名前:デフォルトの名無しさん [2013/10/06(日) 08:19:42.15 .net]
#ocaml #opam 自己解決したっす dllcryptokit_stubs.so はopamゆーざーなら以下の環境変数の設定が必要っぽい
export CAML_LD_LIBRARY_PATH=~/.opam/system/lib/stublibs/

738 名前:デフォルトの名無しさん [2013/10/09(水) 00:18:05.42 .net]
なんかopamも便利なんだか不便なんだかわからんな

739 名前:デフォルトの名無しさん [2013/10/10(木) 12:26:47.83 .net]
フィボナッチ計算させるときに
メモ化するのもアキュムレータ使うのも
同じ振る舞いな気がするんだが
何か違うのかな?

740 名前:デフォルトの名無しさん mailto:sage [2013/10/10(木) 13:44:52.77 .net]
複数回呼び出したら違うんじゃないの



741 名前:デフォルトの名無しさん [2013/10/10(木) 14:11:03.39 .net]
それぞれの f(n)までの値をそれぞれ1回ずつ計算して
テーブルに入れるかレコードに入れるかの違いだから
計算回数は同じじゃね?

742 名前:デフォルトの名無しさん mailto:sage [2013/10/10(木) 18:11:17.89 .net]
fibを何回か呼ぶことを言ってるんじゃねぇの

743 名前:デフォルトの名無しさん [2013/10/10(木) 18:49:43.04 .net]
呼ぶ回数=計算回数じゃないの?
どっちもO(n)っぽいんだけど

744 名前:デフォルトの名無しさん mailto:sage [2013/10/10(木) 19:24:41.41 .net]
fib(n) = fib(n-1) + fib(n-2)
fib(n-2)は呼ばれるが、計算済みだから新に計算はしないってことでしょ。

745 名前:デフォルトの名無しさん [2013/10/10(木) 21:27:14.82 .net]
そういう二重再帰じゃない方のフィボナッチだよ

746 名前:デフォルトの名無しさん [2013/10/10(木) 21:50:36.16 .net]
let fib x =
let rec fib_sub (x, accumulator1, accumulator2) =
if x = 0 then accumulator1
else
fib_sub (x - 1, accumulator1 + accumulator2, accumulator1)
in
fib_sub (x, 1, 0)

こういう感じでアキュムレータ使うようなフィボナッチ

747 名前:デフォルトの名無しさん mailto:sage [2013/10/10(木) 23:36:42.55 .net]
何が言いたいのかわからん
末尾再帰のアキュムレータだろうが、
fib nをm回呼び出す場合メモ化ならO(m+n)だろ

748 名前:デフォルトの名無しさん [2013/10/11(金) 01:37:05.82 .net]
>>734この
二重再帰の計算オーダーはそうじゃないだろ??

749 名前:デフォルトの名無しさん mailto:sage [2013/10/11(金) 02:57:20.14 .net]
>>735
>>738
メモ化のコード書いてくれないとわからない。
あと計算オーダーはそうじゃないのそうって何?

750 名前:デフォルトの名無しさん mailto:sage [2013/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 名前:デフォルトの名無しさん mailto:sage [2013/10/11(金) 04:17:04.97 .net]
HaMLet がまさかのニューバージョン。

www.mpi-sws.org/~rossberg/hamlet/

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

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

753 名前:デフォルトの名無しさん [2013/10/11(金) 19:30:47.32 .net]
SMLも開発すすんでるんだな

754 名前:デフォルトの名無しさん mailto:sage [2013/10/14(月) 18:44:12.10 .net]
www.pllab.riec.tohoku.ac.jp/smlsharp/docs/1.0/ja/Ch1.S1.xhtml
SMLの開発って、もしかしてSML#のこと?

755 名前:デフォルトの名無しさん mailto:sage [2013/10/14(月) 18:45:23.58 .net]
あ、上のhamletのことか。

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

757 名前:デフォルトの名無しさん [2013/10/15(火) 01:40:51.77 .net]
SML/NJとかも

758 名前:デフォルトの名無しさん [2013/10/15(火) 01:52:43.43 .net]
Standard SMLってなんだろ?

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

760 名前:デフォルトの名無しさん mailto:sage [2013/10/15(火) 17:14:51.41 .net]
無理じゃね
最初からBig_int使えばいいんじゃね



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

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

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

764 名前:デフォルトの名無しさん mailto:sage [2013/10/16(水) 22:57:21.15 .net]
C++
blog.regehr.org/archives/593
ocaml batteriesには、SafeIntというのがあるらしい。参考になるかもよ。
dutherenverseauborddelatable.wordpress.com/2008/08/27/whats-up-with-batteries/

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

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

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

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

769 名前:デフォルトの名無しさん mailto:sage [2013/10/18(金) 14:08:58.82 .net]
奇跡も魔法もあるんだよ。

770 名前:デフォルトの名無しさん mailto:sage [2013/10/18(金) 18:35:29.49 .net]
ただしよくわからんで使うと死ぬ



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

772 名前:デフォルトの名無しさん mailto:sage [2013/10/18(金) 18:49:32.53 .net]
変なライセンスだから

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

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

775 名前:デフォルトの名無しさん mailto:sage [2013/10/18(金) 19:31:42.10 .net]
みんなって誰だよ

776 名前:デフォルトの名無しさん mailto:sage [2013/10/18(金) 19:33:25.20 .net]
研究室ではよく使ってる

777 名前:デフォルトの名無しさん [2013/10/18(金) 20:02:22.74 .net]
>>765
健常者の集合

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

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

780 名前:デフォルトの名無しさん mailto:sage [2013/10/18(金) 23:50:11.98 .net]
sageたら教えてやる



781 名前:sage [2013/10/18(金) 23:56:08.97 .net]
教えてください

782 名前:sega [2013/10/19(土) 19:03:49.62 .net]
俺にも教えて

783 名前:デフォルトの名無しさん mailto:sage [2013/10/19(土) 22:25:27.91 .net]
じゃあおれも

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

785 名前:デフォルトの名無しさん [2013/10/28(月) 13:22:54.90 .net]
ちがいます

786 名前:デフォルトの名無しさん mailto:sage [2013/10/28(月) 13:38:38.58 .net]
おなじです

787 名前:デフォルトの名無しさん [2013/10/28(月) 13:43:33.45 .net]
どっちだよ・・・

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

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

789 名前:デフォルトの名無しさん [2013/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 名前:デフォルトの名無しさん mailto:sage [2013/10/28(月) 15:17:35.72 .net]
>>779
記法のせいでわかりにくいけど
('a -> 'b) -> ('b -> 'c) -> ('a -> 'c) って考えればいい



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

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

793 名前:デフォルトの名無しさん mailto:sage [2013/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 名前:デフォルトの名無しさん [2013/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 名前:デフォルトの名無しさん mailto:sage [2013/10/28(月) 16:10:19.68 .net]
>>783
>では、その量を返すという汎関数の具体例を挙げてみてくれないか?
なんで?
とりあえず、定義っぽいのは見つけたよ。
www.encyclopediaofmath.org/index.php/Functional

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

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

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


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

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

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

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



801 名前:デフォルトの名無しさん mailto:sage [2013/10/30(水) 13:20:56.16 .net]
cygwin64bitにもOCaml登場

802 名前:デフォルトの名無しさん mailto:sage [2013/10/30(水) 19:40:53.15 .net]
簡約した形とは

803 名前:デフォルトの名無しさん mailto:sage [2013/10/31(木) 18:52:31.73 .net]
ゴルフに出てくる;;の後の
1@0
って何ですか??

804 名前:デフォルトの名無しさん mailto:sage [2013/11/01(金) 12:27:52.67 .net]
kwsk >>793 #ゴルフ

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

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

807 名前:デフォルトの名無しさん [2013/11/02(土) 19:14:43.17 .net]
そういうの書けばできるでしょ

808 名前:デフォルトの名無しさん [2013/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 名前:デフォルトの名無しさん mailto:sage [2013/11/03(日) 09:57:51.24 .net]
f op xs = and $ zipWith op xs (tail xs)

810 名前:デフォルトの名無しさん [2013/11/03(日) 11:18:30.19 .net]
ん?それHaskellじゃね?



811 名前:デフォルトの名無しさん [2013/11/03(日) 11:27:32.82 .net]
こうかな。

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

812 名前:デフォルトの名無しさん mailto:sage [2013/11/03(日) 21:33:04.10 .net]
ocamlだとむずい

813 名前:デフォルトの名無しさん [2013/11/21(木) 06:02:11.85 .net]
盛り上がってるね。

814 名前:デフォルトの名無しさん mailto:sage [2013/11/25(月) 19:28:29.05 .net]
camlp4の入手先を教えて下さい

815 名前:デフォルトの名無しさん mailto:sage [2013/11/25(月) 20:49:45.57 .net]
ttps://github.com/ocaml/camlp4

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

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

818 名前:デフォルトの名無しさん mailto:sage [2013/12/13(金) 08:02:13.53 .net]
誤爆

819 名前:デフォルトの名無しさん mailto:sage [2013/12/14(土) 16:52:12.01 .net]
fezにお帰りください

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



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

822 名前:デフォルトの名無しさん mailto:sage [2014/01/20(月) 01:16:23.89 .net]
こんな本でた

JavaScriptで学ぶ関数型プログラミング
www.amazon.co.jp/dp/4873116600/

なんか面白そう

823 名前:デフォルトの名無しさん [2014/01/25(土) 20:39:37.59 .net]
みんなどこいったんや

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

825 名前:デフォルトの名無しさん mailto:sage [2014/01/27(月) 01:45:51.79 .net]
そんな日は来なくていい

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

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

828 名前:デフォルトの名無しさん mailto:sage [2014/01/29(水) 01:01:52.05 .net]
口を・・・つむぐ?

829 名前:デフォルトの名無しさん mailto:sage [2014/01/29(水) 01:04:27.44 .net]
口をつぐんだ人ならいるかもね

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



831 名前:デフォルトの名無しさん mailto:sage [2014/01/29(水) 21:58:26.24 .net]
お口にチャックノリス

832 名前:デフォルトの名無しさん mailto:sage [2014/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






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<241KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef