history

青木日記 RSS

<前の日 | この月 | 次の日>

2005-07-24

メーリスじゃないほうの ML

そういえばメインマシンには OCaml が入ってたような気がする。

~ % ocaml                                                        aamine@harmony
        Objective Caml version 3.06
 
#

いた。

そうだ、聞きそびれたやつを試そう。 同じコンストラクタを複数のバリアント型に使ったらどっちに型推論されるのか。

# type fruit = Apple | Banana | Orange;;
type fruit = Apple | Banana | Orange
# type corp = Apple | DEC | Intel | Sun;;
type corp = Apple | DEC | Intel | Sun
# Apple;;
- : corp = Apple

後のやつか。でもこれは対話型だからのような気もするなあ。 ファイルに書いて別々の型に推論できるようにしたらどうなるんだ。

~/c/test/ocaml % cat variant.ml                            aamine@harmony
type fruit = Apple | Banana | Orange
type corp = Apple | DEC | Intel | Sun
 
let f t = function
    | Apple -> 1
    | Banana -> 2
    | Orange -> 3
 
let g t = function
    | Apple -> 4
    | DEC -> 5
    | Intel -> 6
    | Sun -> 7
 
let () = Printf.printf "%d - %d\n" (f Apple) (g Apple)
 
~/c/test/ocaml % ocaml variant.ml                          aamine@harmony
File "variant.ml", line 6, characters 6-12:
This pattern matches values of type fruit
but is here used to match values of type corp

エラーですかそうですか。 明示的に型を書けば通りそうな気もするが文法がわかんね。

(06:02)

RHG

http://www.amazon.co.jp/exec/obidos/ASIN/4844317210

品切れが解消されたみたい?

(04:26)

ふつうのLinuxプログラミング・表紙

たしかにペンギンがゴミ箱に向かって歩いてるように見える。 よくよく見たら魚の入ったバケツであった。

あれ? SBP のロゴ変わった?

(04:38)

本日のツッコミ(全2件) [ツッコミを入れる]
向井 (2005-07-24 15:50)

そのエラーも「Apple」がcorp型なので起きてるエラーで、そういうときには多相バリアントてのを使います。

 type fruit = [ `Apple | `Banana | `Orange ]
 type corp = [ `Apple | `DEC | `Intel | `Sun ]
 let f = function | `Apple -> 1 | `Banana ->2 | `Orange -> 3
 let g = function | `Apple -> 4 | `DEC -> 5 | `Intel ->6 | `Sun ->7
 let _ = Printf.printf "%d - %d\n" (f `Apple) (g `Apple)

- データ構成子の先頭にバッククォートをつける
- 型宣言時には前後に[]をつける

青木 (2005-07-25 04:39)

なるほどー! 多相バリアントという名前だけは
聞いたことがありますが、こういうときに使うんですね。
ありがとうございます。

名前
メールアドレス

<前の日 | この月 | 次の日>
2002|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|04|05|06|09|10|
2009|07|
2010|09|

Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved. LIRS