On this page:
1.1 安装与使用
1.2 快速入门
1.2.1 新增语法
1.2.2 代替语法
1.3 小结
8.12

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:
> (maybe/do
    (a <- 1)
    (b <- #f)
    (+ a b))

(Nothing)

因为b为空,所以整条语句的结果就是nothing,当然了,maybe/do自然也能正确处理Maybe?类型。

Maybe/do相对应的,还有monad/do,这个语法比较纯粹,不会做过多处理,一切Monad实例都可以在里面运行。

1.2.2 代替语法🔗

azelf重新实现了ArrayMap,分别代替了listhash, 目的在于接口的一致性。 重写了filtersort等默认函数,使用时需要稍加注意。

创建新数据:

Example:
> (array 1 2 3 4)

(Array 1 2 3 4)

创建Map,提供了两种创建方式:一种是hashmap函数,另一种就是{}语法。

(hashmap 1 2 3 4)
{ 1 2 3 4 }

1.3 小结🔗

个人精力有限,只能简单介绍这些,想要深入了解,请阅读各个模块、语法的文档。