代码改变世界

随笔档案-2013年04月

使用 Lambda 表达式编写递归五:推导装配脑袋的 Fix

2013-04-11 10:31 by 鹤冲天, 3685 阅读, 收藏, 编辑
摘要: 装配脑袋 给出的 Fix 函数精简到极致: Func<T, TResult> Fix<T, TResult>(Func<Func<T,TResult>, Func<T,TResult>> f) {      return t => f(Fix(f))(t); } 本文通过 λ 演算导出。 阅读全文

使用 Lambda 表达式编写递归四:实现 Θ 组合子

2013-04-10 20:33 by 鹤冲天, 3405 阅读, 收藏, 编辑
摘要: 上一篇文章已经实现了 Y 组合子。 本文将实现另一个不动点组合子: Θ 组合子。 Θ 组合子也是一个常见不动点组合子,由 阿兰·图灵 发现,也称为图灵不动点组合子: Θ = (λx.λy.(y(x x y))) (λx.λy.(y(x x y))) 阅读全文

使用 Lambda 表达式编写递归三:实现 Y 组合子

2013-04-10 17:31 by 鹤冲天, 7428 阅读, 收藏, 编辑
摘要: 也许你我都难以理解,为什么有人对她痴迷疯狂,铭记在心中不说,还要刻在身上。 她让人绞尽脑汁,也琢磨不定!她让人心力憔悴,又百般回味! 她,看似平淡,却深藏玄机!她,貌不惊人,却天下无敌! 她是谁?她就是... 阅读全文

使用 Lambda 表达式编写递归二:推断 FIX、g 的类型

2013-04-09 20:41 by 鹤冲天, 3323 阅读, 收藏, 编辑
摘要: 上一章节介绍的 λ 演算是无类型的,对于 FIX、g 我们只知道: 它们都是有独个参数的函数,它们的参数本身也是一个只有单一参数的函数... 基于这种描述,是无法将 FIX、g 转化为 c# 代码的,我们需要推断出 FIX、g 类型。 阅读全文

使用 Lambda 表达式编写递归一:前言及基础

2013-04-09 16:31 by 鹤冲天, 11290 阅读, 收藏, 编辑
摘要: 这是一个比较古老的话题,三年半之前,老赵就此写过一篇很文章《使用Lambda表达式编写递归函数》。其中提出了伪递归的概念,提出了自己的解决方式,也引出了装配脑袋 使用不动点组合子 的解决办法。 最近比较轻闲,静下心来学习了下λ演算、不动点组合子的一些理论,并深入思考,略有所悟,在此和大家分享下。 本文及后续章节会用到相当复杂的泛型及 lambda 表达式,请做好相关技术和心理准备。 阅读全文
点击右上角即可分享
微信分享提示