LFE语言基础语法与数据结构完全指南
概述
LFE(Lisp Flavoured Erlang)是一种运行在Erlang虚拟机上的Lisp方言,它完美结合了Lisp的表达能力和Erlang的并发特性。本文将全面介绍LFE的基础语法和数据结构,帮助开发者快速掌握这门语言的精髓。
数值类型
整数表示
LFE支持多种整数表示方式,为不同场景提供了灵活的数值书写格式:
- 十进制表示:标准写法如
1234
、-123
- 二进制表示:两种形式可选
#b10101
或#B10101
#*1100
或#*-1100
- 八进制表示:
#o377
或#O-111
- 十六进制表示:
#xc0ffe
或#X-01
- 任意进制表示(2-36进制):
#36rhelloworld
特别值得注意的是,LFE中的进制标识符不区分大小写,#b1010
与#B1010
完全等价。
浮点数表示
LFE的浮点数遵循常规表示法:
- 标准形式:
1.0
、+1.0
、-1.0
- 科学计数法:
1.0e10
、1.111e-10
需要注意的是,LFE严格要求浮点数必须同时包含整数部分和小数部分,不能省略其中任何一部分为零的情况。例如100.
和.125
都是不合法的写法。
字符串处理
列表字符串
列表字符串本质上是整数列表,但提供了特殊的字面量语法:
"这是一个包含转义字符的字符串\n如\"引号\"和\\反斜杠"
支持使用Unicode码点表示特殊字符:
"Cat: \\x1f639;" ; 表示猫表情符号
二进制字符串
二进制字符串使用#""
语法:
#"这是一个二进制字符串\n同样支持\"转义\""
二进制字符串也可以使用通用的二进制构造语法#B(...)
创建。
三重引号字符串
LFE借鉴了Erlang的三重引号字符串,特别适合多行文本:
"""
这是第一行"文本"
这是第二行"文本"
"""
三重引号字符串的特点:
- 保留原始格式和缩进
- 自动处理缩进对齐
- 不需要转义双引号
- 二进制版本使用
#"""..."""
语法
数据结构
列表
LFE提供两种列表表示法:
() ; 空列表
(a b c) ; 传统Lisp风格
[a b c] ; 类Erlang风格
元组
使用#()
语法:
#(a b c) ; 三元组
#() ; 空元组
映射(Map)
使用#M()
语法:
#M(key1 value1 key2 value2)
#M() ; 空映射
二进制数据
LFE提供了强大的二进制数据处理能力:
#B(42 (42 (size 16)) ; 指定大小
#B((1.23 float)) ; 浮点数表示
#B((#"a" binary)) ; 二进制字符串
支持多种类型注解和字节序指定,非常适合网络协议和文件处理。
特殊语法
函数引用
(function func-name arity)
(function mod-name func-name arity)
; 传统语法(已弃用)
#'func-name/arity
#'mod-name:func-name/arity
模式匹配
LFE的模式匹配非常强大:
{ok, X} ; 匹配元组
error ; 匹配原子
[P|Ps]=All ; 列表匹配与绑定
<<34,U:16,F/float>> ; 二进制模式匹配
支持_
通配符和=
别名语法,大大增强了模式表达能力。
守卫表达式
守卫表达式用于条件判断,语法为(when test...)
,支持:
- 基本逻辑运算
- 类型判断
- 比较运算
- 简单函数调用
控制结构
条件判断
(if test true-expr false-expr)
(case expr
(pattern body...)
...)
(cond
(test body...)
...
(else default))
循环与接收
(receive
(pattern body...)
(after timeout timeout-body))
异常处理
(try expr
(case (pattern body...))
(catch
((tuple type value stacktrace) body...))
(after cleanup...))
定义与模块
函数定义
(defun factorial
"计算阶乘"
((0) 1)
((n) (* n (factorial (- n 1)))))
模块定义
(defmodule math
(export (factorial 1)))
注释与文档
LFE支持两种注释方式:
- 行注释:以分号开头
; 这是注释
- 块注释:
#| 多行注释 |#
总结
LFE作为Lisp与Erlang的结合体,既保留了Lisp强大的元编程能力,又继承了Erlang优秀的并发模型。其丰富的数值表示、灵活的数据结构、强大的模式匹配和简洁的语法设计,使其成为构建高并发分布式系统的理想选择。
通过掌握本文介绍的基础语法和数据结构,开发者可以快速上手LFE开发,并逐步探索其在分布式系统、消息处理等领域的强大能力。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考