Recursion 您遇到的最好的递归代码是什么?
因为递归而简化了非常复杂的逻辑的情况,在日常编程中使用递归的情况我最喜欢使用递归的是蹦床。这是一种构建可组合代码的简便方法,在没有尾部调用消除的情况下,不会使语言中的调用堆栈溢出 下面是一个很好的例子:Recursion 您遇到的最好的递归代码是什么?,recursion,functional-programming,Recursion,Functional Programming,因为递归而简化了非常复杂的逻辑的情况,在日常编程中使用递归的情况我最喜欢使用递归的是蹦床。这是一种构建可组合代码的简便方法,在没有尾部调用消除的情况下,不会使语言中的调用堆栈溢出 下面是一个很好的例子: 我还强烈推荐鲁纳里的。我最喜欢的递归用法是蹦床。这是一种构建可组合代码的简便方法,在没有尾部调用消除的情况下,不会使语言中的调用堆栈溢出 下面是一个很好的例子: 我还强烈推荐鲁纳里的。我最喜欢的递归用法是蹦床。这是一种构建可组合代码的简便方法,在没有尾部调用消除的情况下,不会使语言中的调用堆栈溢
我还强烈推荐鲁纳里的。我最喜欢的递归用法是蹦床。这是一种构建可组合代码的简便方法,在没有尾部调用消除的情况下,不会使语言中的调用堆栈溢出 下面是一个很好的例子:
我还强烈推荐鲁纳里的。我最喜欢的递归用法是蹦床。这是一种构建可组合代码的简便方法,在没有尾部调用消除的情况下,不会使语言中的调用堆栈溢出 下面是一个很好的例子:
我还强烈推荐鲁纳里的。我最喜欢的递归用法是蹦床。这是一种构建可组合代码的简便方法,在没有尾部调用消除的情况下,不会使语言中的调用堆栈溢出 下面是一个很好的例子:
我还强烈推荐RúnarÓli的。递归的一个惊人例子是Haskell和相关语言中的不动点组合器:
fix f = f (fix f)
它允许我们编写递归函数,而无需显式递归:
fac = go (fix go) where
go g 0 = 1
go g n = n * g (n-1)
虽然它并不是很有用,因为Haskell当然有递归
更重要的是,同样的技巧也适用于类型级别。以下是一种为类似于目录结构的文件系统建模的类型:
data DirEntry a = Dir [(String, a)] | File String
data Fix t = Y (t (Fix t))
type Directory = Fix DirEntry
这样,我们实际上可以处理类型为的值
DirEntry (DirEntry (DirEntry (DirEntry ...))) -- nested arbitrarily deep
没有
目录
或目录
本身是递归的。递归的一个惊人例子是Haskell和相关语言中的不动点组合符:
fix f = f (fix f)
它允许我们编写递归函数,而无需显式递归:
fac = go (fix go) where
go g 0 = 1
go g n = n * g (n-1)
虽然它并不是很有用,因为Haskell当然有递归
更重要的是,同样的技巧也适用于类型级别。以下是一种为类似于目录结构的文件系统建模的类型:
data DirEntry a = Dir [(String, a)] | File String
data Fix t = Y (t (Fix t))
type Directory = Fix DirEntry
这样,我们实际上可以处理类型为的值
DirEntry (DirEntry (DirEntry (DirEntry ...))) -- nested arbitrarily deep
没有
目录
或目录
本身是递归的。递归的一个惊人例子是Haskell和相关语言中的不动点组合符:
fix f = f (fix f)
它允许我们编写递归函数,而无需显式递归:
fac = go (fix go) where
go g 0 = 1
go g n = n * g (n-1)
虽然它并不是很有用,因为Haskell当然有递归
更重要的是,同样的技巧也适用于类型级别。以下是一种为类似于目录结构的文件系统建模的类型:
data DirEntry a = Dir [(String, a)] | File String
data Fix t = Y (t (Fix t))
type Directory = Fix DirEntry
这样,我们实际上可以处理类型为的值
DirEntry (DirEntry (DirEntry (DirEntry ...))) -- nested arbitrarily deep
没有
目录
或目录
本身是递归的。递归的一个惊人例子是Haskell和相关语言中的不动点组合符:
fix f = f (fix f)
它允许我们编写递归函数,而无需显式递归:
fac = go (fix go) where
go g 0 = 1
go g n = n * g (n-1)
虽然它并不是很有用,因为Haskell当然有递归
更重要的是,同样的技巧也适用于类型级别。以下是一种为类似于目录结构的文件系统建模的类型:
data DirEntry a = Dir [(String, a)] | File String
data Fix t = Y (t (Fix t))
type Directory = Fix DirEntry
这样,我们实际上可以处理类型为的值
DirEntry (DirEntry (DirEntry (DirEntry ...))) -- nested arbitrarily deep
没有
Directory
或DirEntry
本身是递归的。当然,在没有TCE的语言中,你会反复写trampoline
当然,在没有TCE的语言中,你会反复写trampoline
当然,在一种没有TCE的语言中,你会反复写trampoline
当然,在一种没有TCE的语言中,你会反复写trampoline
。。。