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


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

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



1 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 14:49:54 ]
関数型言語MLについて語るスレッドです。

MLは、確固とした理論的背景を持つ言語でありながら、
現実的なソフトの開発にも使用できる実用性を備えた言語です。
また、プログラミングの初心者が最初に学習する言語としても優れています。

総本山
Standard ML www.smlnj.org/
Objective Caml caml.inria.fr/ocaml/

前スレ
関数型言語ML(SML, OCaml, etc.), Part 4
pc11.2ch.net/test/read.cgi/tech/1133003340/

250 名前:デフォルトの名無しさん [2008/02/07(木) 10:23:25 ]
俺は戻り値がunit じゃない状況を区別するために let () = を使ってる
let _ = は、 ignore @@ Unix.system "rm -rf hoge" とか

251 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 10:40:36 ]
labelglutを使っていて
GluMat.gluPerspective ~fovy:(45.0) ~aspect:(1.0) ~zNear:(0.1) ~zFar:(100.0)
って書いてもUnbound value GluMat.gluPerspectiveって言われてちゃう

wwwfun.kurims.kyoto-u.ac.jp/soft/lsl/lablgl.txt
www.opengl.org/sdk/docs/man/xhtml/gluPerspective.xml
を見て書いたのですがどこがいけないかわかりません>.<b




252 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 23:12:43 ]
>>251
まさかライブラリの指定を忘れてるなんて落ちはないよな。
ocamlc -I +lablGL lablgl.cma lablglut.cma ...
という感じでコンパイルしなきゃいけないはずだけど?

253 名前:247 mailto:sage [2008/02/08(金) 02:21:31 ]
>>250
統一するか区別するかOCaml内のコードを調べてみます。
多いほうにしてみます。

254 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 09:33:48 ]
>>252
大体原因がわかった
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

どっかに引数に関してマニュアルないわけ?

255 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 21:25:54 ]
>> 254
.mli 見ろや:

val perspective : fovy:float -> aspect:float -> z:float * float -> unit


256 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 01:59:10 ]
cygwin 3.10で実行しています。

while 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";
が実行されず、プログラムが停止して、動きません。
コンパイル時にエラーはありませんでした。
何がいけないのでしょうか?

257 名前:デフォルトの名無しさん [2008/02/14(木) 06:49:29 ]
>>256
システムに関係なく 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 の本には書いてないのかな?


258 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 20:34:46 ]
>257
ありがとうございます。
prerr_endlineを使用したところ、うまく動作するようになりました。



259 名前:デフォルトの名無しさん [2008/02/15(金) 16:42:11 ]
OCamlで共有ライブラリを作ったり、それと動的リンクするようなプログラムを作るには、
Makefileにどう書けばいい?

260 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 17:01:35 ]
>>259
stublib のことなら ocaml のソースの otherlibs/graph などを参考に。
otherlibs/Makefile.shared を include してあるが、そこに大体書いてある。


261 名前:259 mailto:sage [2008/02/16(土) 16:35:26 ]
>260
ごめん、説明不足だった。

OCamlで書かれたライブラリがあって、それを自分で書いたOCamlのコードから使いたいんだけど、
ライブラリの方がLGPLなのでできれば静的リンクしたくないんだ。

262 名前:デフォルトの名無しさん [2008/02/16(土) 16:59:23 ]
>>261
3.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.


263 名前:259 mailto:sage [2008/02/16(土) 17:31:46 ]
>262
ありがとう!勉強になった。

調べてみたけど、例外事項は入ってないみたいだ。

ライブラリのメーリングリストを流し読みしたところ、
「オブジェクトファイルを添付すればいいだけなんだから別に問題なくね?」
という結論になった模様orz

まぁ実際そのとおりだから、そうすることにするよ。

264 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 01:27:40 ]
ttp://www.ocaml-tutorial.org/ja
なんかつながんね

265 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 01:47:54 ]
>>264
繋がるよ?

266 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 01:59:31 ]
オレは繋がらない。

267 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 08:56:08 ]
俺も問題ない

268 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 12:11:08 ]
Ocamlの入門者ですが、n重のリストの要素数を数えたいと思って
↓のように書いてみたのですがエラーになります。
型推論などまだよくわかってないのですが、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



269 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 21:42:05 ]
>>268
自分も勉強中だからはっきりとは言えないけどムリじゃないかな?

まず、n重のリストを関数に適用しようにも、
n=1のリストは'a list
n=2のリストは'a list list
n=3のリストは'a list list list
…ていう用にそれぞれ型が違うのでどんな入れ子リストにでも対応できる関数は書けない。

現実にそういうことがやりたいなら、バリアントとリストを組み合わせることになると思う。

270 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 21:51:43 ]
>>268
O'Caml の気持ちを代弁すると、
moredeeplen の型は多分 'a list list -> int だと思うんだが、
再帰的に呼ぶ際に moredeeplen tl の所で 'a list -> int という違う型で
使っている。なのでアウト。

普通は 268 が書きたいような、型を利用した再帰関数は ML の多相型では
書けませんな。


271 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 21:59:39 ]
> ocaml -rectypes
Objective 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?).

はっ、初学者を混乱させるだけか...。

272 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 10:12:55 ]
>>271
その定義は常に 0 を返すのだが。

let rec len v = List.fold_left (fun s v -> s + (len v) + 1) 0 v;;
# len [[[];[]]; []];;
- : int = 4

面白いけど 268 がやりたいこととはちょっと違いますね。


273 名前:268 mailto:sage [2008/02/22(金) 11:03:06 ]
酷いコードを例示したのに色々考えてくださってありがとうございます。
簡単にはできないということで先に進もうと思います。

274 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 01:03:08 ]
こちらのスレの方々はどうなのでしょう?
pc11.2ch.net/test/read.cgi/tech/1186030985/244n

275 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 23:31:52 ]
>>274
accumulator は後にするかなあ
複雑にならないなら fold とかで済ませたいと思っちゃうけど

276 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 01:59:47 ]
すいません、↓の記事を見かけたのですが、結局yieldってどんな風に実装するんですか?
itpro.nikkeibp.co.jp/article/COLUMN/20070612/274231/

277 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 02:33:33 ]
>>276
π-calculusは俺も勉強中なんだが、
この本が役に立つぜ
www.amazon.co.jp/Communicating-Mobile-Systems-Robin-Milner/dp/0521658691

質問ですが、
GUIライブラリが充実しているネイティブコンパイラ付きの関数型言語はありませんか?
HaskellもOCamlもこれといってまともなGUIライブラリが存在しないので・・・

278 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 03:02:36 ]
wxHaskellはまともなGUIライブラリに数えてくれないのか



279 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 09:13:48 ]
yieldの中身の作り方の参考にはならんのでは>ミルナー本

280 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 10:02:42 ]
wxHaskellは前回の公式リリースからだいぶ時間がたってるしなぁ。
その間にGHCも6.4から6.8になってるわけで…。

久しぶりにSourceforgeのほう見てみたら
wxhaskell-0.10.3-rc1 ってのが出てた。
sourceforge.net/project/showfiles.php?group_id=73133

281 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 10:20:29 ]
LablGTKは駄目なのか?
wwwfun.kurims.kyoto-u.ac.jp/soft/olabl/lablgtk.html

282 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 11:18:21 ]
>>276
・グローバルなunit chan refを一個作る(qとする)
・yieldはqからのrecvとして実装
・トップレベルのプロセスを生成した後に、qにsendし続けるプロセスを生成
という感じでどうだろう

283 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 01:11:13 ]
>>282
うぅぅ入門 Ocaml 片手の私には動作がイメージできません・・・
recvしてもすぐsendされて別のに切り替わらないとかになりませんか?
とりあえず挑戦してみます。

284 名前:デフォルトの名無しさん [2008/04/12(土) 21:49:11 ]
引く手あまたのプログラミング言語は?
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以下だったそうだ。
---

285 名前:デフォルトの名無しさん [2008/04/12(土) 23:05:22 ]
10もあったのか。

286 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 23:50:30 ]
1000ならbrainf*ckの求人をだす

287 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 23:54:05 ]
0 じゃないのか・・・。
冒険してる会社もあるもんだな。

288 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 00:36:55 ]
10以下に0は含まれるがなw



289 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 10:37:39 ]
理屈上はそうだが、記事として書くなら、
0なら0と書くか話題にも上らないかのどっちかだろう

290 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 10:56:58 ]
ちなみにCとMLは省かれてます。
検索結果を加工した統計なので。

291 名前:デフォルトの名無しさん [2008/04/20(日) 15:48:14 ]
>> 171
Debian or Ubuntuなら、
# apt-get install coqide
でok

292 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 16:30:04 ]
どちらかが10件あったから、わざわざ10以下と書く場合もあるってことね。

293 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 21:40:54 ]
関数型言語は、変数への代入もforループも使わずにプログラムできるって聞いたけど
どういうこと???
ここにきても全然わからん。

294 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 21:42:19 ]
再帰すればループできるじゃん。

295 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 22:03:38 ]
SML#0.40マダー?チンチン(AA略

296 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 13:36:36 ]
>>154
# 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]

297 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 21:59:44 ]
>>293
関数の戻り値を次の関数へ放り込んだり、戻り値の一部だけ次の関数に放り込んで、残りをさらに次の関数に放り込んだりするのだ。


298 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 22:40:38 ]
>>293
ちょっと富豪的だが、ループは>>296のようなリストで置き換えると
最初は考えやすいと思う。
大雑把な説明だが
for(int i=1;i<=10;++i){printf("%d\n",i);}は
高階関数mapを使ってこう。
List.map print_endline (1 *.. 10)



299 名前:デフォルトの名無しさん [2008/04/24(木) 23:05:54 ]
えーintとstringの型あってないし、そこはmapじゃなくてiterじゃないの用途的に

300 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 23:39:18 ]
うは、俺あほw

301 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 23:49:18 ]
ちゃんと書いとこう。今Ocamlの処理系ないから部分的にF#で試したコードだけども。

List.iter (fun x -> print_endline (string_of_int x)) (1 *.. 10)



302 名前:デフォルトの名無しさん [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)} じゃないですかね?

303 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 21:29:32 ]
JavaのThread.sleepみたいな関数を探しています。
OCamlで「n秒待つ」関数みたいなのは、何ですか?

次のようなプログラムを書いています。
let rec loop count =
 print_endline (print_int count);
 (* ここで1秒待ちたい *)
 loop (count + 1)

let main =
 loop 0

304 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 21:41:38 ]
Unix.sleepかThread.delay

305 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 22:00:51 ]
>>302
とりあえず正誤表にはなかったよ。もっかいコード見直したら?
ttp://www.sato.kuis.kyoto-u.ac.jp/~igarashi/OCaml/

306 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 22:23:27 ]
>> 304
できました!
どうもありがとうございます!!

307 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 01:07:52 ]
>>293
ループは再帰のときに引数を変えれば良い。
して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;;

308 名前:デフォルトの名無しさん [2008/04/27(日) 01:10:46 ]
letの方はそれ代入じゃない



309 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 08:38:49 ]
refでやればいいのかよう

310 名前:sakura [2008/04/27(日) 11:45:53 ]
こうなんというか深夜亀頭から白濁色の液が滲み ぷっつん。

311 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 00:36:21 ]
>>302
誰がどう見ても誤植です。どうもありがとうございました。

312 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 16:34:33 ]
HaMLet v1.3.1
www.ps.uni-sb.de/hamlet/CHANGES.txt

SML#にも対応
ベンチマーク用のSML実装としての、あるべき姿か

誰ぞ、SML#をNJ、MLtonとベンチしてたもう


313 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 13:29:42 ]
関数型言語F#をわかりやすく解説した動画とかないの??

314 名前:[Power of Scala] mailto:sage [2008/05/03(土) 16:42:43 ]
>>313
関数型言語Scalaの動画
ttp://d.hatena.ne.jp/video/youtube/SCl0pkrQn1A

315 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 18:03:03 ]
>>314
関数型言語というよりもオブジェクト指向型の印象が強い言語だな。
カリー化すら出来ないし、代数的データ型すらないじゃないか。
関数型言語の特徴というべき代表的な機能が欠如しているのは関数型言語として致命的。
だから、Scalaはオブジェクト指向型言語だ。

316 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 19:28:52 ]
制限時間関係なくこの人早口っぽいな〜。



317 名前:Objective Caml mailto:sage [2008/05/03(土) 20:11:11 ]
>>313
F#じゃないけど

OCamlの動画 - YouTube
ttp://www.youtube.com/watch?v=3A8lEraqGzQ


318 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 00:18:19 ]
OCamlをすこしかじってF#にも興味もったんだけど、
F#って.NETのライブラリが使えるのと、オブジェクトが使えないの以外にどんな点がF#と違うの?
文法面はほぼ同じだと聞いたんだけど。



319 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 00:28:24 ]
F#はHaskell.NET同様その内サポートされなくなるところが違う。
MSの単なるデモンストレーションだから。


320 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 01:26:50 ]
>>318
データの型が.NET互換になってて、演算子がオーバーロードされる。
例えば +. 演算子はなくなってて実数の足し算でも + 演算子を使う。
クラスは.NETのクラスになるので、クラス定義まわりの文法にだいぶ変更がある。


321 名前:デフォルトの名無しさん [2008/05/04(日) 23:20:06 ]
Jane Street Capital謹製のcoreが公開されたね。
Extlibでもcoreでもいいから標準ライブラリに取り込んでくれないかなあ。

322 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 01:08:14 ]
>>315
いや、あるよ>カリー化&代数的データ型
単に紹介されてないだけ

323 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 01:13:40 ]
ちゃんと説明するとScalaには代数的データ型そのものは無いけど、
case 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の代数的データ型の定義に比べて記述が冗長だけど、機能的には
問題ない。

324 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 10:05:39 ]
>>323
つまりScalaは関数型言語であるっていうこと??

325 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 22:57:45 ]
>>324
定義によるけど、たぶん言って良いと思う。MLが関数型言語であるというのと
同じ程度には。

326 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 06:56:30 ]
>>325どうも

327 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 13:01:46 ]
代数データ型があるかどうかは、関数型かどうかを左右しない。
ただ今時の関数型言語に代数データ型を持っているのが多いというだけ。

328 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 17:48:27 ]
関数型言語という言葉に明確な定義が無い以上、ある言語が関数型かどうかは
「典型的な関数型言語」にどれくらい似ているかという尺度で測る他無いんじゃね?



329 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 19:25:20 ]
あなたがそう思うものが関数型言語です。
ただし、他人の同意を得られるとはかぎりません。

330 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 20:02:47 ]
無意味なレスしてんなよ noob

331 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 23:17:55 ]
>>319
逆だよ。
F#は製品化が決まって現在仕様の取りまとめ中。

332 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 08:09:27 ]
>>328
そんなわけないだろw
代数的データ型があるかどうかは、関数型言語かどうかの尺度にはならない。

>>331
あそこは仕様=実装って会社でしょ。
V0.9的な仕様作ってそれでおしまい。

333 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 09:58:17 ]
もともと仕様と実装が同じ言語から派生した言語に何を求めるのか.



334 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 14:55:39 ]
>>332
じゃあ、何が尺度になるの?もちろん、代数的データ型*さえあれば*関数型言語
だとは言うつもりは無いけど、関数型言語の定義なんて人によってかなり曖昧な
わけだ。MLとかHaskellとかのまず間違いなく関数型言語だと認定してもらえる言語と
どれだけ同じ機能を持っているかで比較するしか無いんじゃない?

335 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 16:08:24 ]
プログラムが参照の透明性のある関数だけで構成されていること
でいいんじゃない?

336 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 16:54:44 ]
stateがないってんじゃ駄目なの?
monadでstateは扱えるけど、
stateがあるわけじゃないよね。

stateがないってことを厳密にいうと、
「ある時にy=f(x)ならば、どんな時でもy=f(x)」ってことでいいのかな?

337 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 17:17:45 ]
> プログラムが参照の透明性のある関数だけで構成されていること

じゃあ、MLやOCamlはNGじゃん。ref型があるわけだから。

338 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 17:54:46 ]
>>337
関数だけで構成されていること
でいいんじゃない?



339 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:49:17 ]
>>338

それだとHaskellすらNGだな

340 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:56:34 ]
C++ だって関数型言語なのに!

341 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:44:13 ]
>>340
ないないそれはない

342 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:47:37 ]
それ有名なネタだよ

343 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:49:08 ]
マクロとテンプレートを思いっきり使えば
それらしいコードは書けるかもしれない。

344 名前:デフォルトの名無しさん [2008/05/14(水) 07:36:28 ]
omake はええぞ。omake -P を知ったらやめられん。


345 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 11:58:34 ]
Boost おそるべし

346 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 19:10:58 ]
でもないw

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


348 名前:デフォルトの名無しさん [2008/05/17(土) 10:31:08 ]
なんでエラーになりそうなのかわからない。



349 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 11:19:41 ]
>| `A -> ()
なんかAAぽい

350 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 13:48:50 ]
>>349
怒ってため息をついてるね。w






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

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

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