loophp/church-encoding

PHP中的Church编码

dev-master 2024-05-28 07:37 UTC

This package is auto-updated.

Last update: 2024-09-21 12:53:57 UTC


README

Latest Stable Version GitHub stars Total Downloads GitHub Workflow Status Scrutinizer code quality Type Coverage Code Coverage License Donate! Donate!

Church编码

在数学中,Church编码是Lambda演算中表示数据和运算符的一种方法。Church数是使用Lambda表示法表示自然数的一种表示法。这种方法是以Alonzo Church的名字命名的,他是第一个以这种方式在Lambda演算中编码数据的人。

Church编码不是作为原始数据类型的实际实现。它的用途是为了说明不需要其他原始数据类型来表示任何计算。完整性是表示性的...更多关于维基百科

历史

这个库是为了个人教育目的而制作的,并公开发布,它受到了Marcelo Camargo的工作的启发。代码可以通过Composer(通过Packagist)获得,以防万一,但我怀疑这除了学习目的之外对任何人都没有用。

使用方法

composer require loophp/church-encoding

文档

Church数

假设我们有一种不支持数字或布尔值的编程语言:一个Lambda是它提供的唯一值。一个有趣的问题是,我们是否可以创建一个系统,使我们能够计数、加法、乘法和做所有其他与数字相关的事情。

Church数使用Lambda来创建数字的表示。

这个想法与自然数的函数表示密切相关,即有一个自然数代表和一个函数succ,它返回给定自然数的后继。选择succ是任意的,重要的是有一个并且有一个可以提供后继的函数。Church数是这个的扩展。

所有Church数都是具有两个参数的函数:λf . λx . something

第一个参数f是应使用的后继函数。第二个参数x是代表零的值。

因此,零的Church数为:C0=λf . λx . x

每次应用它时,它都返回代表零的值。一的后继Church数为:C1=λf . λx . f x

后续的Church数只是额外应用了后继函数

需要注意的是,在这个最小的Lambda演算中,我们实际上并不能用这些Church数做很多。我们可以计数、加法和乘法,但要理解结果,我们必须计算后继函数的应用次数。

Church布尔值

我们可以对布尔值提出与数字相同的问题。我们可以只使用函数来表示它们吗?是的,我们可以,并且与Church数非常相似。一个Church布尔值是一个具有两个参数的函数,第一个表示如果函数是true,它应该返回什么,第二个表示如果函数是false,它应该返回什么

  • true = λx . λy . x
  • false = λx . λy . y

就像Church数字一样,我们也可以对Church布尔值进行算术运算。

定义andornot的函数很容易。

  • and = λM . λN . M (N true false) false
  • or = λM . λN . M true (N true false)
  • not = λM . M false true

参考资料

代码质量、测试和基准测试

每次向库中引入更改时,Github都会运行测试。

该库使用PHPSpec编写了测试。您可以在spec目录中查看它们。运行composer phpspec以触发测试。

在每次提交之前,使用GrumPHP执行一些检查,手动运行composer grumphp以进行检查。

使用Infection(一个PHP突变测试框架)测试测试的质量,运行composer infection以尝试它。

静态分析器也在控制代码。已启用PHPStanPSalm的最大级别。

贡献

请随意通过发送Github pull请求来贡献。我反应很快 :-)

如果您不能为代码做出贡献,您也可以在GithubPaypal上赞助我。

变更日志

请参阅CHANGELOG.md,其中基于git提交的变更日志。

有关更详细的变更日志,请参阅发布变更日志