1 Star 0 Fork 0

plus7wist / ezl

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
WTFPL

ezl - 随和的 Lisp

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 现在的能力。

DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE Version 2, December 2004 Copyright (C) 2004 Sam Hocevar <sam@hocevar.net> Everyone is permitted to copy and distribute verbatim or modified copies of this license document, and changing it is allowed as long as the name is changed. DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. You just DO WHAT THE FUCK YOU WANT TO.

简介

A easy lisp language. 展开 收起
Rust 等 3 种语言
WTFPL
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Rust
1
https://gitee.com/plus7wist/ezl.git
git@gitee.com:plus7wist/ezl.git
plus7wist
ezl
ezl
main

搜索帮助

53164aa7 5694891 3bd8fe86 5694891