`
pengpeng
  • 浏览: 85196 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

从church numerals 理解数据抽象

    博客分类:
  • sicp
阅读更多
        现在到了数学抽象中最关键的一步:让我们忘记这些符号所表示的对象。(数学家)不应在这里停步,有许多操作可以应用于这些符号,而根本不必考虑它们到底代表着什么东西。   --- sicp (第二章 数据抽象)      邱奇数可以帮我们充分理解上面这句话和数据抽象的含义。(我的读书笔记见:http://book.douban.com/people/xulao/annotation/
(define (inc n)
  (+ n 1))

(define zero
  (lambda (f zero)

    zero))

(define one
  (lambda (f zero)
    (f zero)))

(define two
  (lambda (f zero)

    (f (f zero))))

(define (add x y)
  (lambda (f zero)
    (x f (y f zero))))
(define three (add two one))
;; 3+3

(define (multiply x y)
  (lambda (f zero)
    (x (lambda (z)
         (y f z))
       zero)))

(define four (multiply two three))
(four inc 0)


       邱奇数可以很好的将数学计算,用符号演算构造出来,并得到所有(可计算的)“自然数”(符号)。(将操作应用于符号,而不必考虑他们到底代表什么东西)  其实邱奇的lambda calculus建立一个强大的符号演算系统,利用这个(抽象)符号操作概念可以建立一个强大的形式语言,从而实现一个图灵等价的计算模型。符号演算可以模拟出数学世界里的所有计算模型,而数学计算只是这个形式语言的其中一个具体罢了。     关于邱奇-图灵理论,停机问题,Y 组合子,不完备性定理,可以参考一下2篇好文:              
       http://blog.csdn.net/pongba/article/details/1336028
       http://blog.csdn.net/pongba/article/details/621723
分享到:
评论

相关推荐

    church-numerals:教堂数字示例

    教堂数字(Church Numerals)是Lambda演算中的一个概念,...在`church-numerals-master`这个压缩包中,可能包含了上述代码的实现和其他相关的测试和示例,供学习者进一步研究和理解教堂数字和Clojure的函数式编程特性。

    haskell-church-encodings:用Haskell编写的教堂编码

    总之,“haskell-church-encodings”项目是学习Haskell和λ演算的宝贵资源,它展示了如何用纯函数式的思维方式来表示和操作数据,这对于提升你的编程思维和理解编程语言的底层原理大有裨益。如果你对函数式编程或λ...

    USPSdata.zip_USPS_USPS dataset_USPSdata_USPS数据库介绍_USPS数据库多大

    文件分为"Test"和"Numerals"两部分,"Test"通常包含用于测试模型性能的数据,而"Numerals"可能包含了每个数字类别的示例或者训练数据。 在"Test"文件中,一般会有一定数量的未知样本,用于评估训练好的模型在未见过...

    前端开源库-japanese-numerals-to-number

    这样的工具在处理多语言网站、本地化应用或者数据分析中非常有用,特别是在涉及日语内容的场景下。 要使用这个库,首先需要将其克隆或下载到项目中。在提供的压缩包"japanese-numerals-to-number-master"中,通常会...

    RomanNumerals:罗马数字<->整数转换器

    在IT领域,编程语言C#为我们提供...这个项目对学习和理解C#编程、数据结构、算法设计以及软件工程实践有着很好的实践意义。通过它,开发者可以提升对编程语言特性的掌握,增强问题解决能力,并锻炼代码组织和调试技巧。

    kata-roman-numerals:JavaScript kata - 罗马数字转换器

    现代罗马数字的书写方式是从最左边的数字开始分别表示每个数字,并跳过值为零的任何数字。 1990 用罗马数字表示:1000=M,900=CM,90=XC; 导致 MCMXC。 2008年写成2000=MM,8=VIII; 或MMVIII。 1666 按降序使用每...

    Roman-Numerals-Encoder:古代符号的转换

    在IT领域,编程语言是构建数字世界的基石,而Java作为一种广泛应用的高级编程语言,拥有强大的功能和广泛的适用性。...同时,这也是一个很好的练习,可以帮助开发者提升在处理复杂数据转换问题时的代码组织和调试技能。

    Handwritten-Numerals.rar_digits

    手写体数字的识别。使用的是BP神经网络的方法,自己看着能不能用吧,我也就是下个资源

    Support Vector Machines Applied to Handwritten Numerals Recognition

    在最基本的设置中,训练数据集是从一个 m 维的空间中抽取的,该空间仅包含两个类别。每个训练样本表示为一个 m 维向量 x,该向量属于 A 类或 B 类,其中 A 和 B 的并集构成了整个空间。训练数据集由一组向量组成;...

    Cistercian-Numerals-Python:使用Python和Turtle绘制14世纪从1到9999的数字的Cistercian表示

    Cistercian-Numerals-Python 使用Python绘制14世纪Cistercian表示从1到9999的数字 本文的灵感 实际上,到2020年末才有提案将Cistercian数字添加到unicode 这是我的第一个程序,我用它来学习和使用Python。 它...

    roman_numerals:罗马数字 Mob 编程解决方案来自 2015-01-26

    罗马数字是一种古老的数字表示方式,源自古罗马,至今在时间表示、页码标记等领域仍有广泛应用。...通过学习和理解这个代码,开发者可以深入理解罗马数字的转换原理,同时提升在Java中处理字符串和算法问题的能力。

    roman-numerals.js:来回转换罗马数字

    罗马数字.js 来回转换罗马数字。 请注意,M 是此处的最大值,因此 5000 转换为 MMMMM。...romanNumerals(2015) === 'MMXV'romanNumerals('2015') === 'MMXV'romanNumerals('MMXV') === 2015测试mocha .

    Roman-Numerals

    克隆此存储库:运行命令git clone https://github.com/kellimargaret/Roman-Numerals.git然后将目录更改为项目文件夹的顶级目录。 在浏览器中打开romanNumeral.html。 使用的技术 HTML,CSS,JavaScript,摩卡,柴 ...

    lambda演算入门

    这种能力是通过邱奇数(Church numerals)和递归函数的定义来实现的,这一点在λ演算的发展史上具有里程碑意义。 λ演算不仅是一个计算模型,它还是一个表达数学命题和进行证明的形式系统。在这个系统中,λ表达式...

    roman-numerals

    $ git clone https://github.com/samchalle/roman-numerals.git 在浏览器中打开HTML文件 享受! 使用的技术 JavaScript,摩卡,Chai,HTML,Bootstrap,CSS 执照 麻省理工学院执照,版权所有(c)2015 Ian McKenney...

    MNIST handwritten digits

    MNIST(Modified National Institute of Standards and Technology)是一个广泛使用的数据集,主要用于训练计算机进行手写数字识别。这个数据集由LeCun、Yann、Bottou、Glorot和Haffner等人在1998年创建,是基于美国...

    Lambda Calculus and Types.pdf

    ##### 4.1 教会数字(Church Numerals) 教会数字是一种在Lambda演算中表示自然数的方法。通过教会数字,可以在没有显式数字的情况下定义和计算数字。 ##### 4.2 可定义的总递归函数 这部分讨论了如何使用Lambda...

    Numerals.rar

    Usps原生数据,未处理。可以随意下载,剩下都是用于填充

    roman-numerals:数字转罗马数字

    5. `package.json` - 项目配置文件,记录了项目的元数据、依赖项和脚本等信息。 通过分析和理解这些文件,你可以学习到如何在JavaScript中实现逻辑算法,以及如何进行单元测试和项目组织。对于初学者来说,这是一个...

    roman-numerals-kata-php

    总的来说,"roman-numerals-kata-php" 是一个锻炼 PHP 编程技巧的好方式,尤其是对于理解和处理算法以及数据转换。通过解决这个 kata,开发者可以增强他们在逻辑分析、问题解决以及代码调试方面的能力。同时,这也是...

Global site tag (gtag.js) - Google Analytics