λanguage
的一些构想对,咱们要实现的语言就叫它
λanguage
吧。javascript
正确的编程方式,是应该先有明确的思路和逻辑。因此咱们应该把 λanguage
的语言特性罗列到这里,可是在这个教程中,我就较为随意的放几个例子来解释语言特性吧。java
# 这里是注释
println("Hello world");
println(2 + 3 * 4);
# 经过 lambda 这个关键字来声明函数
fib = lambda (n) if n < 2 then n else fib(n - 1) + fib(n - 2);
println(fib(15))
print-range = λ(a, b)
if a <= b then {
print(a);
if a + 1 <= b {
print(", ");
print-range(a + 1, b);
} else println("");
}
print-range(1, 5);
复制代码
你应该注意到上面的变量名称包含
-
号,这是根据我的偏好来设定的,由于做者不喜欢使用驼峰命名,也不喜欢使用下划线。本身实现一个编程语言的好处就是,你能够自定义它的语法。编程
上面代码的输出以下:数组
Hello world
14
610
1, 2, 3, 4, 5
复制代码
λanluage
可能看起来跟 javascript
很像,可是它们是不同的。bash
λanguage
是不须要声明变量的,只有表达式如下的程序是合法的:闭包
a = {
fib(10); # 没有任何反作用,可是仍是会执行
fib(15) # 最后一个分号能够省略
};
print(a); # 打印出 610
复制代码
函数是经过 lambda
或者 λ
来声明。在关键字的后面须要跟被括号包裹的形式参数,如编程语言
fib = lambda(num) num + 1;
复制代码
关键字后面是单句表达式,可是能够经过{}
来生成一个代码块。表达式的最后一个语句的执行结果会做为返回值传给调用者。函数
注意没有var
, 你能够经过相似javascript中的当即执行函数 (IIFE) ,来声明一个变量。能够经过 lambda
声明一个变量做为参数。 变量是术语块级做用域。函数相似于javascript
中的闭包。post
javascript 中的三元表达式能够写成这样:ui
a = foo() ? bar() : baz(); // javascript
a = if foo() then bar() else baz(); # λanguage
复制代码
在有{
的状况下 then
关键字能够被省略,如上面的print-range
。其余的都是必须的,经过else
建立另外一个条件分支。当表达式中 else
缺失,而且if
判断为false
时,if
表达式将会返回 false
。语言中除了false
之外,都会被解析成true
,包括数字0和空字符串。
注意,咱们须要在每个表达式后面用分号;
做为结束。
好了,这就是关于咱们λanguage
语言的介绍,虽然它看起来像个玩具,而且缺乏不少特性,如数组、对象等,可是都是在这些的基础上展开的,若是你能很好的理解掌握咱们的教程,其余的语法特性都不是问题。