ezl(easy lisp)是一种 Lisp(list processor)。它还没有完成 1.0 版本,现在有的特性是:
基本类型:数值、布尔值、字符串、Vec
和函数。
变量绑定:将值绑定到符号。
;; 变量 name 绑定为字符串 "Alice"
(let name "Alice")
;; a 设为 10,b 设为 11
(let
a 10
b 11)
在同一个作用域不允许重复绑定。
(let a 10)
(let a 11) # NameError
赋值:赋值会改变变量的值。尝试赋值未绑定的值会产生错误。
(let a 10) ; bind
(set a 11) ; assign
(assert-eq a 11)
定义函数:函数是输入一些值输出一个(或者零个)值的计算过程,同时在语义上保持其他变量的稳定。输入变量称作函数的参数,输出变量称作函数的返回值。其他变量不会随着函数代表的计算发生的位置不同而发生变化,称函数具有闭包性。
;; 函数 add 接受 a 和 b 两个参数,返回 a 和 b 的和
(func (add a b)
(+ a b))
循环:
(for (name . sequence) . body)
对于每个可以迭代的 sequence
包含的值,绑定到 name
执行一次 body
。
目前可以迭代的值有:迭代器、Vec
。
迭代器:迭代器是可以被迭代的对象。
迭代器是一个函数,它返回第一个类型为 'StopIteration
的值之前的所有返回值都是它产生的值。
StopIteration
是一种特别的错误类型,它可以由 (stop-iteration)
函数产生。
短路逻辑运算。
(or a b c d) # 在求值第一个真值的位置返回真
(and p q r s) # 在求值第一个假值的位置返回假
一些内建函数。
错误处理系统。
常见的程序错误,例如函数参数个数不对,计算发生在不支持的类型上,都会产生错误(Error)。在 ezl 中的错误除非主动处理,否则会随着函数调用栈逐层向上传播,直到 ezl 的解释器,ezl 的解释器接收到 Error 之后会停止程序运行。
(try ...)
表达式是阻止错误向上传播的方法,try 包裹的代码产生的错误,不会继续向上传播,而是变成 try 的值,可以被程序继续处理。而如果没有错误产生,try 语句的值就是它包裹的最后一个 S 表达式的求值的结果。
(is-error x)
用来判断 x
是否是错误。
(type x)
用来获取 x
的类型,返回值是一个符号,对于错误类型可能是 'NameError
或者 'TypeError
等。
可以查看 ezl-test 目录下的文件探索 ezl 现在的能力。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型