トップ
新規
単語検索
ヘルプ
OCamlテクニック/再帰型(Equi-recursive)
をテンプレートにして作成
開始行:
[[OCamlテクニック/再帰型(Equi-recursive)]]
#contents
* equi-recursive type in ocaml [#a4970a31]
参考:
[[Developing Applications With Objective Caml:http://caml...
- [[Cyclic types:http://caml.inria.fr/pub/docs/oreilly-bo...
- [[Option -rectypes:http://caml.inria.fr/pub/docs/oreill...
たとえば、タプル型でリストを作ったりできる。以下の例では...
Haskellではequi-recursive typeのサポートがないのでこれは...
$ ocaml
Objective Caml version 3.09.3
# let rec ones = (1, ones);;
This expression has type int * (int * 'a) but is here us...
# ^D
$ ocaml -rectypes
Objective Caml version 3.09.3
# let rec ones = (1,ones);;
val ones : int * 'a as 'a =
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
(...))))))))))))))))))))))))))))))))))))))))))))))))))))...
#
val x : int * 'a as 'a という型表現に注目して頂きたい。不...
** Haskellでムリヤリ近いことをやる [#g9493987]
Haskellでムリヤリ実現するには。
newtype Rec t = R (t (Rec t))
という「型レベルの不動点コンビネータ」みたいなものを作る ...
この型構築子は、
ones = R (1, ones)
などとして使う。このonesの型は
*Main> :t ones
ones :: Rec ((,) Integer)
である。 (型(a,b)は (,) a b と表記されることに注意。(,)は...
型の構造で再帰型が表現できているわけではないが(この表現で...
このデータを使うには、 データ構築子Rを介して再帰を展開す...
printRec (R (a,r)) = "(" ++ show a ++ "," ++ printRec r ...
*Main> printRec ones
(1,(1,(1,(1,(1,(1,(1,(1,(1,(1,(1,(1,(1,(1,(1,(1,(1,(1,(1...
(けいご)
終了行:
[[OCamlテクニック/再帰型(Equi-recursive)]]
#contents
* equi-recursive type in ocaml [#a4970a31]
参考:
[[Developing Applications With Objective Caml:http://caml...
- [[Cyclic types:http://caml.inria.fr/pub/docs/oreilly-bo...
- [[Option -rectypes:http://caml.inria.fr/pub/docs/oreill...
たとえば、タプル型でリストを作ったりできる。以下の例では...
Haskellではequi-recursive typeのサポートがないのでこれは...
$ ocaml
Objective Caml version 3.09.3
# let rec ones = (1, ones);;
This expression has type int * (int * 'a) but is here us...
# ^D
$ ocaml -rectypes
Objective Caml version 3.09.3
# let rec ones = (1,ones);;
val ones : int * 'a as 'a =
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
(...))))))))))))))))))))))))))))))))))))))))))))))))))))...
#
val x : int * 'a as 'a という型表現に注目して頂きたい。不...
** Haskellでムリヤリ近いことをやる [#g9493987]
Haskellでムリヤリ実現するには。
newtype Rec t = R (t (Rec t))
という「型レベルの不動点コンビネータ」みたいなものを作る ...
この型構築子は、
ones = R (1, ones)
などとして使う。このonesの型は
*Main> :t ones
ones :: Rec ((,) Integer)
である。 (型(a,b)は (,) a b と表記されることに注意。(,)は...
型の構造で再帰型が表現できているわけではないが(この表現で...
このデータを使うには、 データ構築子Rを介して再帰を展開す...
printRec (R (a,r)) = "(" ++ show a ++ "," ++ printRec r ...
*Main> printRec ones
(1,(1,(1,(1,(1,(1,(1,(1,(1,(1,(1,(1,(1,(1,(1,(1,(1,(1,(1...
(けいご)
ページ名: