トップ
新規
単語検索
ヘルプ
ネタ記録庫/不動点コンビネータ
をテンプレートにして作成
開始行:
[[ネタ記録庫/不動点コンビネータ]]
#contents
*不動点コンビネータとは [#w1012c93]
''FIXME:''説明追加&リンク追加
*型なしλ計算 [#c484e485]
ラムダ式で書くと
λf.(λx.f(xx))(λx.f(xx))
ただしこれでは(xx)に型が付かない。
*Haskell [#kdeed056]
-- 不動点演算子 Y
y :: a -> a -> a
y f = f (y f)
-- yの使用例 再帰関数 fact を 高階関数 fac の不動点とし...
fact =
let fac f = ?x ->
if x == 0
then 1
else x * f (x-1)
in y fac
*Ocaml [#wad972ea]
-- 不動点演算子
# let rec y f = f (lazy (y f))
val y : ('a lazy_t -> 'a) -> 'a = <fun>
-- yの使用例
# let fac f = function
0 -> 1
| x -> x * (Lazy.force f) (x - 1)
# let fact = y fac
-- こっちが普通かな...?
# let y f x = f (y f) x
*解説ページ [#l36ce47d]
**英語 [#re660aee]
- [[Many faces of the fixed-point combinator:http://okmij...
- [[Haskell Wiki / FixedPointCombinator:http://www.haskel...
- Olegさん http://pobox.com/~oleg/ftp/ML/fixpoints.ml
- Olegさん http://pobox.com/~oleg/ftp/Computation/fixed-p...
**日本語 [#t23af16b]
- [[名大の誰かの解説:http://www.ice.nuie.nagoya-u.ac.jp/~...
- [[住井先生の解説:http://d.hatena.ne.jp/sumii/20051203/1...
終了行:
[[ネタ記録庫/不動点コンビネータ]]
#contents
*不動点コンビネータとは [#w1012c93]
''FIXME:''説明追加&リンク追加
*型なしλ計算 [#c484e485]
ラムダ式で書くと
λf.(λx.f(xx))(λx.f(xx))
ただしこれでは(xx)に型が付かない。
*Haskell [#kdeed056]
-- 不動点演算子 Y
y :: a -> a -> a
y f = f (y f)
-- yの使用例 再帰関数 fact を 高階関数 fac の不動点とし...
fact =
let fac f = ?x ->
if x == 0
then 1
else x * f (x-1)
in y fac
*Ocaml [#wad972ea]
-- 不動点演算子
# let rec y f = f (lazy (y f))
val y : ('a lazy_t -> 'a) -> 'a = <fun>
-- yの使用例
# let fac f = function
0 -> 1
| x -> x * (Lazy.force f) (x - 1)
# let fact = y fac
-- こっちが普通かな...?
# let y f x = f (y f) x
*解説ページ [#l36ce47d]
**英語 [#re660aee]
- [[Many faces of the fixed-point combinator:http://okmij...
- [[Haskell Wiki / FixedPointCombinator:http://www.haskel...
- Olegさん http://pobox.com/~oleg/ftp/ML/fixpoints.ml
- Olegさん http://pobox.com/~oleg/ftp/Computation/fixed-p...
**日本語 [#t23af16b]
- [[名大の誰かの解説:http://www.ice.nuie.nagoya-u.ac.jp/~...
- [[住井先生の解説:http://d.hatena.ne.jp/sumii/20051203/1...
ページ名: