水晶中的递归过程是否可行?
像lambda in Ruby之类的东西
我正试图在Crystal中做一个 y-combinator
,就像Ruby一样:
puts -> {
fact_improver = ->(partial) {
-> (n) { n.zero? ? 1 : n * partial.(n-1) }
}
y = ->(f) {
->(x) { f.(->(v) { x.(x).(v) }) }.(
->(x) { f.(->(v) { x.(x).(v) }) }
)
}
fact = y.(fact_improver)
fact = fact_improver.(fact)
fact.(100)
}.()
1 回答
据我所知,Crystal没有递归过程 . 但要创建Y组合器,您不需要递归过程 . 实际上,根据definition:
下面是使用recursive types用Crystal编写的Y组合子的示例:
UPDATE :可以使用
uninitialized
关键字在Crystal中创建递归proc:感谢@mgarciaisaia的评论 .