8.16.0.1
1 简介
这是一款个人风格十分浓烈的lisp方言,一款向Haskell看齐的动态语言。
1.1 安装与使用
使用raco pkg install azelf命令安装,需要升级时使用raco pkg update azelf命令。
azelf同racket一样,也有两种使用方式:使用#lang与(require azelf)。前者直接使用azelf整个环境,后者仅仅作为第三方依赖。
#lang azelf (->> 1 add1) ;; 2
#lang racket/base (require azelf) (->> 1 add1) ;; 2
1.2 快速入门
azelf基本延续了racket/base大部分语言,并补充了部分新语法, 其中比较常用有->>和maybe/do。
1.2.1 新增语法
如上所述,新增管道语法->>。
(->> 1 add1 add1 add1) ; 与下面写法等价 (add1 (add1 (add1 1)))
->>更加简洁可读。->>还提供了新关键字——it——指代上个管道传下的参数,省下写lambda函数步骤。
(->> 1 add1 (if (< it 10) 0 it) add1) ; (if (< it 10) 0 it) 这一段包含了it,之后会自动展开成: (->> 1 add1 (lambda (it) (if (< it 10) 0 it)) add1)
除此之外,maybe/do也是十分有用的语法,它连接了外部racket与azelf, 一般的racket代码,用#f表示空值,azelf的空值是nothing,模拟了Haskell的Maybe类型。 所以在maybe/do中,一切#f会自动转化成nothing。
Example:
因为b为空,所以整条语句的结果就是nothing,当然了,maybe/do自然也能正确处理Maybe?类型。
与Maybe/do相对应的,还有monad/do,这个语法比较纯粹,不会做过多处理,一切Monad实例都可以在里面运行。
1.2.2 代替语法
azelf重新实现了Array和Map,分别代替了list、hash, 目的在于接口的一致性。 重写了filter、sort等默认函数,使用时需要稍加注意。
创建新数据:
Example:
> (array 1 2 3 4) (Array 1 2 3 4)
创建Map,提供了两种创建方式:一种是hashmap函数,另一种就是{}语法。
(hashmap 1 2 3 4) { 1 2 3 4 }
1.3 小结
个人精力有限,只能简单介绍这些,想要深入了解,请阅读各个模块、语法的文档。