関数型言語ML(SML, OC ..
[2ch|▼Menu]
482:Haskell 修業中
08/06/24 23:48:01
>>481
おおっ!そんなのがあるんですね。

やっぱ、Haskellすごいわ
スペースを入れてもわずか10文字w

483:デフォルトの名無しさん
08/06/25 01:45:08
意味不明なライブラリ関数の海で遊んで溺れかけているHaskellianにしか見えない。
逆に、OCamlには関数なさすぎ砂漠なわけだが。


484:デフォルトの名無しさん
08/06/26 17:36:09
Haskellそこらじゅうで大人気だな。
ム板住民の半分はHaskell(かRuby)好きなんじゃないかと思えてくるわ。

OCamlはデフォルトでは関数も文法も少ないけど自分で定義しなさい、みたいな所がCっぽくて好き。

let scanl1 f = function | [] -> [] | (x::xs) -> scanl f x xs
let scanl f x y = List.rev (List.fold_left (fun a b -> (f (List.hd a) b) :: a) [x] y)

scanl1 (+) [1;2;3;4];;
ってできるし。
HaskellとOCamlの差が出てくるのはやっぱりIOとかかね。

485:デフォルトの名無しさん
08/06/26 18:20:16
refを沢山使うprogramをHaskellで書くのは大変。
Ocamlで書くのが大変なのは…特にないな。遅延計算くらいか。

486:デフォルトの名無しさん
08/06/26 18:34:02
ファイルを順々に読んでいく、みたいのはHaskellだと遅延評価だから普通のリストと同じように出来るけど、
OCamlだとバッファリングするとかストリームとか多少は副作用がある方法を使わなきゃいけないかなー。
まあ他の言語ではみんなそうしてるから特に抵抗は無いが。

487:Haskell 修業中
08/06/26 18:35:15
>>485
Streamって遅延計算じゃないんですか?

488:Haskell 修業中
08/06/26 18:37:26
あっ、かぶったw
やっぱりStream使うんですね。

489:デフォルトの名無しさん
08/06/26 18:56:37
Streamはかなり便利だけど、
Haskellでは通常のリスト操作みたいに出来るっていうのはやっぱり魅力だよな。
使い方にもよるがソースがStream.junk ();とかだらけになるのは美しくないので避けたい。


490:デフォルトの名無しさん
08/06/26 20:28:23
>>485
たとえば?
俺がHaskellですっきり書いてやるよ。

491:デフォルトの名無しさん
08/06/27 18:43:09
ocamlcってgccの-O0みたいなオプションないのかな

というかこんなことを平気で聞いてもよさげな初心者スレないのかな

492:デフォルトの名無しさん
08/06/27 22:56:35
というかこんな意味不明なこと平気で聞くなよ。
kwsk


493:デフォルトの名無しさん
08/06/28 01:38:52
>>492
ocamldebugを使ってみた
   ↓
Eventなのに止まらないだと・・・?
   ↓
きっとコンパイラが最適化してるからだ!
   ↓
ocamlのコンパイラって最適化無効にするオプションないのかな←今ここ

ocamldebugのstep実行で止まるはずのポイント飛ばされたり、
プロファイラで使われているはずの関数が未使用と判定されたり、
言語以前にツールの使い方覚えるとこで俺\(^o^)/

494:デフォルトの名無しさん
08/06/28 02:23:23
全然初心者的内容じゃねーじゃん。ocamlc (ocamloptもそうだが) は
最適化みたいなことはほとんどしてないんで。書いたとおりに実行するよ。

優秀なOCamlプログラマを大勢知っていますが、大多数はデバッガの必要を感じていません。
俺もデバッガは使わないので何ともいえんが、何か使いかたを過っているか、
camlの評価順なぞを未理解なのではないかと思われ…


495:デフォルトの名無しさん
08/06/28 03:05:49
>>490
ICFP PC 2007の問題とかどうよ?

RNA実行するだけでも副作用なしだと大変じゃないかな

496:デフォルトの名無しさん
08/06/28 05:35:04
>>494
皆使ってなかったのか・・・
ソース解析する際流れ追うのに使えるかと思ったんだが

>何か使いかたを過っているか、
>camlの評価順なぞを未理解なのではないかと思われ…
どっちも怪しいのでもちっと勉強してくる

497:デフォルトの名無しさん
08/06/28 10:30:39
>>494
そういうのって全部ログコードはいてチェックするんですか?デバッグとそういうやり方併用してるけれど全部それだとチョイきつそう。

498:デフォルトの名無しさん
08/06/28 14:39:27
コードを綺麗に書けば、printf デバッグと、十分なユニットテストで 大抵バグは潰せる。
デバッガでちまちまやる前に、assertion と Printexc.get_backtrace でかなりのことはわかるはずだが。
Cのデバッガのように必須だという認識の人は少ないと思われ。
もちろん使うなとは言わん。ocamldebugはリプレイとか強力。


499:デフォルトの名無しさん
08/06/28 23:12:07
>>498
cの場合は破壊的操作と非破壊的操作をあまり意識せずにプログラミングすることもあるから
余計に必要になってくるのではないか?それに、小さな関数の定義を作って大きくするより、
一つでまとめて操作すると言う習慣も影響してるかも。

500:デフォルトの名無しさん
08/06/28 23:45:19
Cは(普通は)インタプリタがないからっていう部分も大きいと思う。

501:デフォルトの名無しさん
08/06/29 03:08:23
ちょっとcodepadが使えるのか試してみたよ。
URLリンク(codepad.org)

502:デフォルトの名無しさん
08/06/29 03:21:42
C は REPL が無いからね

503:デフォルトの名無しさん
08/06/29 20:22:57
lisp的なREPLを備えたC環境なんてないよな。確かに…

あってもいいんだけど。

504:デフォルトの名無しさん
08/06/29 20:55:26
gdbは?

505:デフォルトの名無しさん
08/06/29 20:58:08
そういえばこんなのがあったの忘れてたわ。

C-REPL
URLリンク(neugierig.org)

506:デフォルトの名無しさん
08/06/29 20:58:59
Haskell製か

507:デフォルトの名無しさん
08/06/29 22:53:12
>>504

>Cのデバッガのように必須だという認識の人は少ないと思われ。

だから普通はそういう事なんだろうなww
まあgdbではlispとかcamlとかみたいに書いて即テストって訳にはいかないがgdbは便利だよな。

508:デフォルトの名無しさん
08/07/05 03:43:57
>>454亀だがちょうど最近覚えたので確認のために
fun swap (date,i,j)=
 let
  val a = Array.sub(date,i)
  val b = Array.sub(date,j)
 in
  Array.update(date,i,b);
  Array.update(date,j,a)
 end
localでArrayをopenしておいたほうが綺麗かも


509:デフォルトの名無しさん
08/07/22 18:35:13
すんまそん、Ocamlで日本語文字は扱えませんか?
例えば正規表現なんかでも使いたいんですが。


510:デフォルトの名無しさん
08/07/22 20:41:48
OCamlのstring型は任意のバイナリが入るので、標準入力とかファイル経由で扱うなら
日本語でもなんでもあり。
ただし、OCamlのソースコードに日本語を埋め込みたいなら、EUC_JP以外使えないと思う。
EUC_JPなら、普通にperl互換正規表現ライブラリのラッパーが使える。
URLリンク(pcre-ocaml.sourceforge.net)
データをUNICODEとして扱うなら、Camomileで日本語「文字」を扱えますね。
URLリンク(camomile.sourceforge.net)

あと、正規表現で日本語を扱う問題はOCamlに限らずどれでも一緒なので、
URLリンク(www.din.or.jp)
あたりをどうぞ。

511:デフォルトの名無しさん
08/07/22 22:03:32
最後のURLは、perlのやり方としては古くて、
(今や\p{Hiragana}という風に"script"を文字クラスとして指定できるので)
「どれも一緒」というよりも、Ocamlだとこのやり方が有効って事になると思います。

512:デフォルトの名無しさん
08/07/22 22:16:11
UTF8 で書いて pcre-ocaml の `UTF8 オプションを使え。あと camomlile。以上。


513:デフォルトの名無しさん
08/07/23 22:25:46
MLtonのFFIを使って、Cのmain関数からSMLを呼びたいのだが、これは
不可能?



514:デフォルトの名無しさん
08/08/10 15:52:08
URLリンク(www.cs.caltech.edu)
こんなのをみっけたけど、ゆうめいなん?

515:デフォルトの名無しさん
08/08/13 08:08:15
OCamlの入門記事
URLリンク(indori.blog32.fc2.com)

516:デフォルトの名無しさん
08/08/13 16:19:54
何よりもピヨが気になる

517:デフォルトの名無しさん
08/08/14 08:38:28
>>515
入門記事というより、入門している記事


518:デフォルトの名無しさん
08/08/14 08:51:30
>> 514
数ヶ月前に見たので、うろ覚えだけど、optional arguments や polymorphic variants が
かなり早期に出てくる。そういう点では、こういう新しい機能をおまけとして解説してきた、
「OCaml を使ってプログラミングを学ぶ」本とは毛色が違い、より OCaml 自体を学ぶ事に
重点が置かれている。class についても最後にかなりページ数が割かれている。


519:デフォルトの名無しさん
08/08/14 09:07:36
>> 518 続き
そういうわけで、ひととおり関数型言語のコンセプトについて理解した人には
OCaml リファレンスとしていいんじゃないかと思う。


520:デフォルトの名無しさん
08/08/14 10:11:59
>>519
解説ありがとう。なるほど他言語をやっていて、始めようとする人向きだということが
分かりました。


521:デフォルトの名無しさん
08/08/17 00:31:48
>>515
Winでパフォーマンス落ちるのはバイトコードの話でしょ?
ネイティブなら問題ない

522:デフォルトの名無しさん
08/08/24 14:59:04
smlからsml#に移行しようとしてるんだけど,
型エラー(?)が出て実行できないのがある.
誰か助けて...

次のレスにエラーが出るプログラムを貼ります.

523:522
08/08/24 15:00:46
リストを使った集合演算のプログラムです.
(他にもエラーが出るプログラムはあるのだけど,
とりあえずある中で一番小さいもの)

まずはシグネチャ

signature SET =
sig

eqtype 'a Set

exception EmptySet

val emptyset : 'a Set
val elem : 'a Set -> 'a * 'a Set
val member : ''a -> ''a Set -> bool
val add : ''a -> ''a Set -> ''a Set
val map : ('a -> 'b) -> 'a Set -> 'b Set
val allelem : ''a Set -> (''a * ''a Set) Set
val fromList : 'a list -> 'a Set
val toList : 'a Set -> 'a list

end;

524:デフォルトの名無しさん
08/08/24 15:01:24
■■学校を作ろう!■■
VIP発でサイトを作ろうと思うんだ。(詳しくはWikiを見てくれ)
パートスレになるんでパー速(GEP)に移動している。
今スタッフを募集しているから、来てくれないか?

■Wiki
URLリンク(www36.atwiki.jp)
■募集スタッフ
プログラム担当(特にErlang、Perl)
デザイナー(サイト上のアイコン、ロゴなど)
WEBデザイナー(サイトデザイン案に沿って、htmlやCSSを書ける)
他にも宣伝担当なども募集している。
■スレ
URLリンク(ex14.vip2ch.com)

525:522
08/08/24 15:02:24
次はストラクチャ(の一部)

structure Set :> SET =
struct

type 'a Set = 'a list;

exception EmptySet;

val emptyset = [];

(* Compute a pair of the element of input lists and rest set *)
fun elem [] = raise EmptySet
| elem (x::xs) = (x,xs);

(* Check whether x is an element of a set *)
fun member _ [] = false
| member x (y::ys) = (x = y orelse member x ys);

526:522
08/08/24 15:05:15
(続き)

(* Add an element to a set *)
fun add a A =
if member a A then A
else a::A;

val map = List.map;

(* Compute {(a,A \ {a}) | a \in A} *)
(* where A is an input set *)
fun allelem A =
let
val (b,B) = elem A
in
add (b,B) (map (fn (c,C) => (c, add b C)) (allelem B))
end
handle EmptySet => emptyset;

fun fromList l = l;
fun toList l = l;

end;

527:522
08/08/24 15:09:53
で,以下を実行するとエラーが出ます.
(SMLでは大丈夫だった)

Set.toList (Set.allelem (Set.fromList [1,2,3,4,5]));

エラーは以下のとおりです.
Diagnoses:
stdIn:12.1-12.49 Diagnosis(typecheckExp 12):
expression type and annotation don't agree
expression type: (int * int Set.Set) Set.Set -> (int * int Set.Set) list
annotation: (int * int Set.Set) Set.Set -> (int * int Set.Set) list
stdIn:12.1-12.49 Diagnosis(typecheckExp 16):
opetator and operand don't agree
operator type: (int * int Set.Set) Set.Set -> (int * int Set.Set) list
operand types: (int * int Set.Set) Set.Set
stdIn:12.1-12.51 Diagnosis(typecheckExp 12):
expression type and annotation don't agree
expression type: (int * int Set.Set -> expression) ->
(int * int Set.Set) list -> expression
annotation: (int * int Set.Set -> expression) ->
(int * int Set.Set) list -> expression
stdIn:12.1-12.51 Diagnosis(typecheckExp 16):
expression type and annotation don't agree
expression type: int * int Set.Set
annotation: int * int Set.Set
stdIn:12.1-12.51 Diagnosis(typecheckExp 12):
expression type and annotation don't agree
expression type: int Set.Set -> expression
annotation: int Set.Set -> expression

528:522
08/08/24 15:11:46
(エラー続き)

stdIn:12.1-12.51 Diagnosis(typecheckExp 16):
expression type and annotation don't agree
expression type: int * int Set.Set
annotation: int * int Set.Set
stdIn:12.1-12.51 Diagnosis(typecheckExp 16):
opetator and operand don't agree
operator type: int Set.Set -> expression
operand types: int Set.Set
stdIn:12.1-12.51 Diagnosis(typecheckExp 16):
opetator and operand don't agree
operator type: (int * int Set.Set -> expression) ->
(int * int Set.Set) list -> expression
operand types: int * int Set.Set -> expression

529:522
08/08/24 15:13:41
(さらに続き)

stdIn:12.1-12.51 Diagnosis(typecheckExp 16):
opetator and operand don't agree
operator type: (int * int Set.Set) list -> expression
operand types: (int * int Set.Set) list
stdIn:12.1-12.51 Diagnosis(typecheckExp 12):
expression type and annotation don't agree
expression type: (int * int Set.Set) list -> expression
annotation: (int * int Set.Set) list -> expression
stdIn:12.1-12.51 Diagnosis(typecheckExp 16):
opetator and operand don't agree
operator type: (int * int Set.Set) list -> expression
operand types: (int * int Set.Set) list
BUG :invalid type

530:デフォルトの名無しさん
08/08/25 02:01:56
数学における記法の話です
大学入試の問題文の冒頭で
「f(x)=x^3+3x^2とする」とあるのですが
この=はC言語と同様に、右辺の関数にfという名前を付けるという
意味での=つまり;=のことでしょうか?

531:デフォルトの名無しさん
08/08/25 02:06:58
C言語では関数に名前をつけるときに=を使わないのでは?

532:デフォルトの名無しさん
08/08/25 02:59:26
>>530 関数型言語MLについて語るスレッドです。

533:デフォルトの名無しさん
08/08/25 04:08:36
>>532
すみません、これだけでいいので分かる方いたら教えてください

534:
08/08/25 05:21:23
WindowsでOCamlを使うには、「MinGW」もしくは「Microsoft Visual C++ and Microsoft Assembler」が必要になります
って読んだんだけどOcamlのコンパイラってCへのトランスレーターなの?

535:デフォルトの名無しさん
08/08/25 07:18:20
アセンブラでsho

536:
08/08/25 16:19:07
アセンブラですか。どうもありがとう。

537:デフォルトの名無しさん
08/08/25 17:17:37
>>530
夏休みも終わりだねえ


538:デフォルトの名無しさん
08/08/25 23:17:08
>>522
閑古鳥の鳴いてるメーリングリストを活性化するために話題を投げてくれ


539:デフォルトの名無しさん
08/08/26 20:17:38
>>522
SML#のバグじゃないかな・・・?
次回アップデートに期待としか。

540:デフォルトの名無しさん
08/08/27 08:46:12
URLリンク(eigenclass.org)


541:デフォルトの名無しさん
08/08/27 08:51:16
warota

542:061123251194.cidr.odn.ne.jp
08/09/19 18:58:37
よいコンパイラの教科書(当然関数型)があれば紹介してください。和英こだわりません。


543:デフォルトの名無しさん
08/09/19 19:00:51
まずはnavi2chのスレをみたほうがいいかもしれない

544:061123251194.cidr.odn.ne.jp
08/09/19 19:05:21
そのようですね。


545:542
08/09/19 19:29:56
おさわがせしました。昔の navi2ch がパスに残っていた、、、ダサいな




546:デフォルトの名無しさん
08/09/19 19:31:39
ところで、
・処理系を関数型言語で書きたい
・関数型言語の処理系を書きたい
どっち?

547:542
08/09/19 19:38:53
コンパイラを書きたい、ですね。(多分書かないけど)


548:デフォルトの名無しさん
08/09/19 19:44:24
ワラ


549:デフォルトの名無しさん
08/09/19 20:24:30
や、だから
・コンパイラを関数型言語で書きたい
・関数型言語のコンパイラを書きたい
のどっちなのかということですよ

550:デフォルトの名無しさん
08/09/19 21:16:48
MLでコンパイラの教科書って有名なの1冊しかないんじゃないの?
いいかどうかは知らない。

551:デフォルトの名無しさん
08/09/19 21:25:48
洋書で青い表紙で虎のやつのこと?モダンなんちゃらだっけ?
EOPLはschemeでML処理系を作るやつだったよね

552:デフォルトの名無しさん
08/09/19 21:27:18
「Modern Compiler Implementation In ML」かな…
持ってるけど、読んでない…

553:デフォルトの名無しさん
08/09/19 22:41:49
まだモダンなのかなぁ

554:デフォルトの名無しさん
08/09/19 23:00:15
近代はずっと近代。もっと新しいのは現代。

555:デフォルトの名無しさん
08/09/20 11:27:06
計算機の本で「コンテンポラリー」を名乗ったものって記憶にないなぁw
なんかあったっけ?

556:デフォルトの名無しさん
08/09/20 11:54:33
まだポスト・モダンが出現してないから。

557:デフォルトの名無しさん
08/09/20 12:10:11
学会のサブタイトルなら見たことある。

558:デフォルトの名無しさん
08/09/20 17:03:51
GODIがインストールできない。bootstrap_stage2で失敗する。

~/Desktop/godi-rocketboost-20080630$ sudo ./bootstrap --prefix /usr/local/godi
...
Bootstrap was successful!
...
Selected GODI section: 3.10
...
~/Desktop/godi-rocketboost-20080630$ PATH=/usr/local/godi/bin:/usr/local/godi/sbin:$PATH
~/Desktop/godi-rocketboost-20080630$ export PATH
~/Desktop/godi-rocketboost-20080630$ sudo ./bootstrap_stage2
.: 1: godi_confdir: not found
Error: Command fails with code 2: /bin/sh
Failure!
~/Desktop/godi-rocketboost-20080630$

なんでだろう。
URLリンク(d.hatena.ne.jp)
の言う通り3.10に対応してないのだろうか?
それとも根本的なところを勘違いしてる?
OCaml初心者ですが、GODIが必要です。

559:デフォルトの名無しさん
08/09/23 09:30:04
> OCaml初心者ですが、GODIが必要です。
この前提が、なんか、もう。


560:デフォルトの名無しさん
08/09/27 19:06:57
NumとかBig_intのプリンタが欲しいとか?

561:デフォルトの名無しさん
08/09/29 10:13:03
たかがそんなもののために GODI が必須で、
GODI がインストールできないから使えない、というのは間違ってますね。

逆に、GODI 依存ユーザからお前のライブラリ GODI にポートしろとか
当然のように言われるのも迷惑です。


562:デフォルトの名無しさん
08/09/29 21:15:32
OCamlってライブラリ関連でコミュニティの足並みそろってないせいで言語の良さがかすんじゃってる感ある。

563:デフォルトの名無しさん
08/09/30 11:52:19
足並み揃えて大きな標準ライブラリ作ればって話は昔からあるし、今もOCamlForgeとかでやってるけど、なかなか成果が出ない。
なんでだろう?

564:デフォルトの名無しさん
08/09/30 13:34:01
これからはHaskellだから

565:デフォルトの名無しさん
08/10/01 16:14:10
windowsXPを使っていて、ML言語を使えるようにしたいので、インストール方法をどなたか教えていただきたいのですが・・・


566:デフォルトの名無しさん
08/10/01 16:17:28
じゃ、f# がいいんじゃない?
インストーラーがあるよ

567:デフォルトの名無しさん
08/10/01 19:53:20
OCamlにだってWindowsのインストーラくらいはさすがにある。

568:デフォルトの名無しさん
08/10/01 23:00:11
>>567
コンパイルできないやつか
コンパイルしても動かないやつしかない

569:デフォルトの名無しさん
08/10/02 08:45:56
>>565
cygwin入れれば標準でocaml入ってるよ。

570:デフォルトの名無しさん
08/10/02 14:34:32
cygwin入れるならデュアルブートか仮想化するなぁ…

571:デフォルトの名無しさん
08/10/03 04:07:14
SML#はプロジェクトのページにインストールから簡単なプログラミングまでチュートリアルがあったはず

572:デフォルトの名無しさん
08/10/03 12:52:15
>>565
こーゆー時のためにURLリンク(ocaml.jp)です。
OCamlのインストール方法からチュートリアルまで揃ってますよ。

573:デフォルトの名無しさん
08/10/03 15:53:52
相変わらずマルチバイト扱いにくいね


574:デフォルトの名無しさん
08/10/03 17:01:09
使い方がさっぱりわからないunicodeライブラリならあるよ

575:デフォルトの名無しさん
08/10/04 00:03:39
>>574
それ扱いやすいって言わないよ〜 orz

普段使いで文字列扱うせいでこまるんだよな、言語自体好きなのに。


576:デフォルトの名無しさん
08/10/04 09:44:20
日本語でおk

577:デフォルトの名無しさん
08/10/06 11:30:36
ocamlのコンソールの使いにくさは異常。
pythonならC-b, C-fでカーソルの移動ができたり、
emacsの標準的なキーが使えるから気軽にコンソールでためせる。



578:デフォルトの名無しさん
08/10/06 11:58:55
>>577
ledit使え、と思ったらなんか終わってるらしい。
どうしたものか...

579:デフォルトの名無しさん
08/10/06 12:01:10
rlwrap

580:デフォルトの名無しさん
08/10/06 12:14:31
inf-caml使えばいい

581:577
08/10/06 13:12:12
みなさんありがとうございます。
ためして見たところrlwrapを使うことにしました。

すごいです!!ありがとう!



582:デフォルトの名無しさん
08/10/06 21:34:32
>>578
>ledit使え、と思ったらなんか終わってるらしい。
え、終わってるって、どういうこと?
俺、ledit 使ってるけど

583:デフォルトの名無しさん
08/10/07 12:19:07
>>582
ledit終了 でぐぐるとトップに出てくるブログに書かれてる情報絡みのことじゃないかと

584:デフォルトの名無しさん
08/10/09 11:03:05
3.11 のブランチ release311 が ocaml-cvs に出来ました。おそらくもうすぐリリースですね。

3.11 の目玉

* native判のモジュールの dynamic link
* private abbreviation type
* Printexc.print_backtrace 等、デバッグに役立ちそうな backtrace 系関数数種
* ocamlnat: native の toplevel (デフォルトでは作らないそうな)


585:デフォルトの名無しさん
08/10/09 12:12:17
>native判のモジュールの dynamic link

これって既に10で出来るようになったんじゃなかったけ?
と思ったら、今は dynlink.cmxa をリンクしないといけないのか
これは便利だな

586:デフォルトの名無しさん
08/10/10 12:01:15
法政大学の児玉先生の所におかれている
URLリンク(yk.i.hosei.ac.jp)

をいまどきのSMLNJで動かすにはどう変更したらよいでしょうか.
ord(#"0")はすぐわかりましたが,lookaheadなどがcharを期待してして
いるのが仕様変更になったようで,elem をどうやってやればcharで
使えるのかが判然としません.


587:デフォルトの名無しさん
08/10/15 09:18:45
OCamlの次世代デファクトスタンダードライブラリを目指すBatteriesがα1をリリースしたらしい。

URLリンク(dutherenverseauborddelatable.wordpress.com)

一応前から内容は見ていて、OCamlのベースライブラリをモダンな階層構造に再編集しているのはすばらしいと思う。
ただ、ちょっと既存の外部ライブラリに頼りすぎていて、枝葉になるほど寄せ集め感が否めないのが気になる。
将来これに一本化されていくのかなー?私もこれに乗るのかどうか、今悩み中。


588:デフォルトの名無しさん
08/10/15 15:52:01
過疎ってるからって hatena からそのままコピペするのはよそうよ


589:osiire
08/10/15 19:04:27
誰ですか、私のエントリーをコピペしたのは。
別にいいですけど、一人称くらい変更してくれてもいいのに。

590:デフォルトの名無しさん
08/10/24 21:49:05
3.11の目玉の一つの、private abbreviation type って何でしょか?
private typesでもなくprivate row typesでもない、なにか?まぎらわしー。

591:デフォルトの名無しさん
08/10/26 20:54:39
過疎ってるから
俺がocaml勉強日記を書いてあげようか?

わからないことがあったら答えて下さいね!

592:デフォルトの名無しさん
08/10/26 23:04:30
断る

593:デフォルトの名無しさん
08/10/26 23:12:42
面白くなりそうだったらいいよ。

594:デフォルトの名無しさん
08/10/26 23:21:06
>>591
おう、かいてたらいいよ。

595:デフォルトの名無しさん
08/10/27 10:53:31
module M : sig
type nat = private int
val nat_of_int : int -> nat
val int_of_nat : nat -> int
end = struct
type nat = int
let nat_of_int n =
(assert (n >= 0));
n
let int_of_nat n = n
end


596:デフォルトの名無しさん
08/10/27 15:21:06
>>595
レスどうも。
この例は、signatureでtype natとして隠蔽した場合と何が違うのでしょう?
試してもprinterが<abstr>になるかどうかくらいしか違い分かりませんでした。
どういう利用法があります?

597:デフォルトの名無しさん
08/10/27 15:53:58
ぐぐったらあったorz ↓
URLリンク(d.hatena.ne.jp)
subtypingとは気づかなかった。

598:デフォルトの名無しさん
08/11/01 12:46:43
nullとnilの違いを教えてください。

599:デフォルトの名無しさん
08/11/01 13:20:42
null:物の表面に液や塗料をなすりつけること。
nil:食物を、水または調味料を加えた汁に入れて加熱し、食べられる状態にすること。

600:デフォルトの名無しさん
08/11/01 14:51:15
>>599
スレリンク(tech板)l50

601:デフォルトの名無しさん
08/11/02 02:49:24
SMLにおいて、nullとnilの違いを教えてください。


602:デフォルトの名無しさん
08/11/02 02:53:01
nilは空のリスト。
nullはListストラクチャーの、リストを受け取りnilかどうかをboolで返す関数。

603:デフォルトの名無しさん
08/11/02 03:21:30
nullp

604:デフォルトの名無しさん
08/11/02 03:35:53
>>599
ウケ狙いなら、残念。もう一ひねりホシイ。

605:デフォルトの名無しさん
08/11/02 07:43:26
ウケ狙いならって・・・
他に何があるというのか小1時間(ry

606:デフォルトの名無しさん
08/11/04 06:30:51
独学でSMLの本を使いながら関数言語を学んでいるのですが、上手くできない問題があり困っています。

replicate(4);
と打つと、
val it = [1,2,2,3,3,3,4,4,4,4] : int list
といった感じに1を一つ,2を二つ、3を三つ、4を四つといったリストを
出力されるSMLのリカーシブメソッドを書きたいのですが、上手く行きません。分かる方教えていただけると助かります。

607:デフォルトの名無しさん
08/11/04 07:09:08
うまくいかなかったやつを載せてみてよ。

608:デフォルトの名無しさん
08/11/04 08:14:40
>>606
リカーシブメソッドっていうのが何を差してるのか分からないけど、
入力: 自然数n
出力: 要素が全てnで長さnのリスト
とするサブ関数使えばいいんじゃない?

609:デフォルトの名無しさん
08/11/04 08:21:09
n
[1,2,3,...,n]
[1,22,333,...,n,n,n,n,]
の二行目から三行目で>>608使えばいいな。

610:デフォルトの名無しさん
08/11/04 09:16:29
recursive
再帰だな。

611:608
08/11/04 09:29:59
とりあえず作ってみた。
>>609のやりかたとは違います。
↓にあっぷしてみたので、ご参考までに。
URLリンク(www2.uploda.org)
(パスは sml です)

入力は自然数(0以上)を仮定しています。

612:デフォルトの名無しさん
08/11/04 12:47:57
あー、答えちゃったの?どう読んでも宿題なんだから、自分で考えさせてあげなきゃ。

613:608
08/11/04 18:17:23
>>612
やっぱそうだよねぇ。
「独学で」なんて書いてるから、
にっちもさっちも行かなくなったと思っちゃったんだよね。
やっぱ、寝ないとだめだな。

614:デフォルトの名無しさん
08/11/04 23:34:42
>>612>>613
良く寝て頭を休めろ。

615:デフォルトの名無しさん
08/11/05 00:11:55
SMLならメソッドじゃなくてファンクションだろ、とどうでもいい突っ込み。
再帰関数はn-1番目からn番目を導出する定義をそのまま書くのがコツ。
もう>>606は見てないだろうけど。

616:デフォルトの名無しさん
08/11/05 00:43:05
宿題でも独学でもどっちでもいいのでは。

617:デフォルトの名無しさん
08/11/05 00:55:48
URLリンク(xy.yu.to)
始終荒れまくりの海外サーバ絵チャだ

一人の神プログラマーが強すぎてマクロ荒しが全く太刀打ちできてない。
荒しプログラマーは全員退散!!
誰か倒してくれwwwwww


618:デフォルトの名無しさん
08/11/05 01:15:09
>>611
わざわざお答え頂ありがとうございます。
一応こちらもパターンマッチングでない、if - elseの方法で出来ました。ネストしたループのfunctionの前にletが抜けていただけでした。
参考になりました。

619:デフォルトの名無しさん
08/11/05 04:09:40
>>618
こういう課題は論理型の方がすっきりした定義になるね。

620:デフォルトの名無しさん
08/11/09 12:02:17
すんません教えてください。

(int -> int -> int) -> int

という関数の定義例が分かりません。

(int -> int) -> int -> int なら
たとえば
let func = fun f x -> (f 2) * x;;
でいいことが分かるのですが、

(int -> int -> int) -> int
だとわからなくなります。

『二つのintを引数とし、intを返す関数』を一つの引数としてとり
intを返す関数というふうに理解してます。

コードはどのように考えればよいんでしょうか?

621:デフォルトの名無しさん
08/11/09 12:48:12
なんでもいいけど
let func f = (f 1 2) + 3;;

622:デフォルトの名無しさん
08/11/09 14:05:34
>>621
ありがとうございます。
理解しました。


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

5313日前に更新/149 KB
担当:undef