lambda微积分的一个简单repl

churchrepl的Python项目详细描述


lambda微积分的一个简单repl

https://travis-ci.org/CodeGrimoire/ChurchREPL.svg?branch=master

使用:

当呼叫丘吉尔时,将打开新的REPL。

churchrepl [-f --file file [file ...]] [-v --verbose]

标志:

(可选)在加载普通repl之前从文件中读取定义和表达式。

-f|--file file [file ...]

(可选)打印调试和详细输出。

-v|--verbose

church repl文件结构:

ebnf语法如下*:

(* church-lambda EBNF *)
                  (* --- meta --- *)
 program = {line};
 line = (define | function);
 define = "@" alias ":" function;

                  (* --- lambdas --- *)
 function = lambda | application;
 lambda = "λ" variable "." expr;
 application = '(' expr  expr ')';
 expr = (lambda | application | variable | alias );

                  (* --- primitives --- *)
 variable = /[a-z]/;
 alias = /[_A-Z][_A-Z0-9]*/;

一个简单的示例程序:

@ID: λx.x
@APPLY: λf.λx.(f x)
@TRUE: λx.λy.x
@FALSE: λx.λy.y
@ZERO: λf.λx.x
@SUCC: λn.λf.λx.(f ((n f) x))
@ONE: (SUCC ZERO)
@TWO: (SUCC ONE)
@THREE: (SUCC TWO)
@FOUR: (SUCC THREE)
(SUCC ZERO)
(SUCC ONE)
(SUCC TWO)
(SUCC THREE)
(SUCC FOUR)

注:就本程序而言,λ(lambda,unicode u03bb)相当于反斜杠。 使用REPL时,使用反斜杠可能更容易。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
创建返回java测试结果的selenium测试方法   java Play2长期socket连接和多线程   java Spring引导Soap web服务创建Jaxb2插件错误   编译器构造如何将三地址码(TAC)转换为Java字节码?   java(泛型)无法对非静态类型T进行静态引用   java Kafka如何向多消费者发送消息   具有复杂类型的动态属性的java Odata   java Apache HttpClient线程   ${catalina.base}/lib子目录中的java属性文件解析   JApplet上的java分层对象(扩展JComponet)   java如何回滚Firebase Realitime数据库Android中的更改   Java正在尝试制作计时器   如何解决java。安卓中的lang.OutOfMemory异常?   将Objective C转换为Java Android没有什么问题   在java中,我不能将两个相同的变量设置为不同的值,但在python中我可以?   c#客户端和java服务器之间的身份验证错误   使用asynctask更改活动时发生java 安卓 admob错误