用巨蟒写的教堂编码,
church_encoding的Python项目详细描述
#python中的教堂编码
这个练习是以一种更为复杂的方式演示和玩弄教堂编码,并且作为我获得python和它的类型系统经验的一种方式。
教堂编码是由已故著名的阿隆佐教堂开发的。church可能最著名的发明是lambda微积分,这是一种引入lambas或anonymous函数概念的数学形式分支。你可能以前在编程时用过它们。
church编码是由lambda演算产生的一个非常有趣的开发。church发现编程语言中的每个概念都可以用函数来表示!从布尔逻辑,条件语句,数字(自然,整数,实,复,虚),甚至循环(无限循环也)!
最有趣的是,数字在数学上没有什么特别之处,它们只是方便的占位符。数学其实只是最纯粹形式的逻辑。
到目前为止,我已经翻译了church布尔、church布尔运算符、church条件、church比较运算符、church数字(自然数)、church算术运算符(自然数)、church列表、church整数、带有z-组合符的循环和church算术运算符(整数)减去指数和阶乘。操作员。
在[pypi]上查看包(http://pypi.python.org/pypi/church_encoding/)
##z组合器
在不实现延迟计算或按名称调用的常规形式的编程语言中,使用z组合器代替y组合器。有关详细信息,请参见[定点组合器](https://en.wikipedia.org/wiki/Fixed-point_combinator)wiki。
##条件
一些lambda函数的转换涉及使用常规if/then语句而不是ifelselamdba函数。我怀疑这可能又是一个类似于z组合子的限制,在z组合子中,求值顺序在能够最真实地使用lambdas中起着作用。总有一天我会找到办法让它工作的。
##安装
- 使用pip安装。
- pip install --user church_encoding
- 导入教堂模块。
- python>>> import church_encoding.church as church
- 使用这些功能。
- >>> dir(church)>>> (church.unchurch_bool) ((church.AND) (church.true) (church.false))False
下面是命令的完整列表:
布尔真/假:true,false,unchurch_bool
布尔运算符:AND,NOT,OR,XOR
z-组合体:Z
条件:ifelse
自然数:zero,one,two,three,num,unchurch_num
整数:convertNZ,unchurch_int
比较运算符(自然数):^{TT24}$,^{TT25}$,^{TT26}$,^{TT27}$,^{TT28}$
算术运算符(自然数):^{TT29}$,^{TT30}$,^{TT31}$,^{TT32}$,^{TT33}$,^{TT34}$,^{TT35}$,^{TT36}$,^{TT37}$,^{TT38}$/p>
算术运算符(整数):^{TT39}$,^{TT40}$,^{TT41}$,^{TT42}$,^{TT43}$,^{TT44}$
列表:car,cdr,cons
有关用法示例,请参见[测试套件](https://github.com/Risto-Stevcev/python-church-encodings/blob/master/church_encoding/test/church_test.py)
##学分
我想在到期的地方赊账:
- [詹姆斯·陶伯的博客](http://jtauber.com/blog/2008/11/26/church_encoding_in_python/)让我朝着正确的方向出发。
- [Chuch编码](https://en.wikipedia.org/wiki/Church_encoding)维基百科页面,因为它非常详细和信息丰富。
最后,教会自己,因为他是个坏蛋!
啊![阿隆佐教堂](https://upload.wikimedia.org/wikipedia/en/a/a6/Alonzo_Church.jpg) 阿隆佐教堂