开发者生态
morning
DOS 下的 Schemy Lisp
2026-09-07
1 阅读
约6分钟阅读
AlexeyBrin
字号:
数据 有两种基本数据类型:对和原子(非对)。原子有三种变体:符号、闭包(函数)和一些特殊符号。符号 符号是唯一的名称,由最多 16 个以下字符的任意组合组成: a b c d e f g h i j k l m no p q r s t u v w x y z 1 2 3 4 5 6 7 8 9 0 - 。 ? _ 在哪里 。不能成为主角。此外,任何可打印的 ASCII 字符在以转义字符 \(反斜杠)为前缀时都可以成为符号的一部分,但 ( , ) 、 ' 和 $ 除外。这是\一个\符号\!此外,接受大写字母,但会转换为小写字母,除非对字符进行转义。特殊符号 SLED 管理一些预定义的特殊符号,例如 nil 表示“空列表”。详细信息请参见索引。引用 引用的意思是“不评价”。通过引用特殊形式注册符号: (quote sym) 为了方便起见,可以使用 ' 简写语法: 'sym 本质上引用将某些内容声明为数据而不是代码。原子对 原子对由一个头和一个尾组成,每个原子包含一个原子或另一个原子对。可以使用 来创建一对作为数据。 (dot): '(a . x) 或作为 cons 内置函数的结果:(cons 'a 'x) 对元素(头和尾)是不可变的。列表 列表是一个对的序列,其中每个尾部都指向不同的其他对,除了尾部为 nil 值的一个(最后一个),这相当于 () 。以下是一些列表: nil '() '(a . nil) '(a . (b . nil)) 列表也可以通过以下方式创建为数据: '(a b) 或作为(标准库)列表函数的结果: (list 'a 'b) 不正确的列表 不正确的列表不会以 nil 结尾,例如: (a . (b . (c . d))) 关联列表 关联列表是其中每个元素都包含的列表。是一对(关联): ((a . x) (b . y) (c . z)) 这种对元素的头部称为 key ,尾部称为 value 。 S 表达式 符号表达式(S 表达式)是一种数据结构,定义如下: S 表达式是一个原子或一对 S 表达式。在 Lisp、Scheme 中,特别是在 SLED 中,S 表达式用于数据和源代码。数字 SLED 系统没有数字类型。然而,可以使用列表来模拟自然数(非负整数): '() ;零 '(nil) ;一 '(nil nil) ;两个'(零零零); 3 这些是计数数字,因此基数代表大小,这与冯·诺依曼序数类似。函数 inc 、 dec 和 0?促进计数任务。代码 在 LISP 中,未加引号的数据被评估为代码。表达式 表达式可以被计算,例如: 绑定 函数 特殊形式 绑定 绑定将符号链接到某些数据负载,并通过 Define 特殊形式创建: (define a 'x) 闭包 闭包是与环境一起的函数,并且是 lambda 特殊形式的结果: (define fun (lambda (arg1 arg2) (print arg1) (print arg2))) 函数应用 不带引号的列表的第一个元素被解释为计算结果为的表达式一个函数和其余元素作为该函数的参数: (fun arg1 arg2) 函数求值是急切的;因此,首先对参数表达式进行求值,然后函数应用程序使用求值后的参数。参数 参数被评估并作为值列表传递给函数。这意味着可以通过多种方式设置函数参数: (lambda x ...) ; x 是一个列表 (lambda (x y) ...) ;包含元素 x 和 y 的解构列表 (lambda (x y . z) ...) ; z 是一个列表(默认情况下为 nil) 可选参数可以作为列表传递,就像上面的 z 一样。递归 LISP 依赖于递归而不是迭代。递归是指函数调用自身。 SLED 的两个功能有助于避免深度递归中的堆栈溢出:蹦床求值器和尾部调用优化 (TCO)。 TCO 适用于 lambda 、 let 、 begin 、 if 、 ifnil 和 apply 。此外,如果递归在第二个参数中运行,则 TCO 适用于 cons。错误 表达式求值过程中出现错误会跳回顶层,在顶层可以测试错误的发生。无法在表达式内捕获错误。内置函数 SLED 可执行文件中内置了一组函数,以实现与系统和核心功能的交互,有关详细信息,请参阅索引。标准库 除了核心功能之外,一组典型功能在文件 sled.scm 中作为标准库实现。详情请参阅索引。标准库可以通过其他自定义定义进行扩展。特殊形式 某些形式看起来像函数,但实际上并非如此。这些所谓的特殊形式并不遵循函数行为,而是使用与函数相同的语法。例如,if 在解析表单之前不评估其参数。详情请参阅索引。不可变性 特殊符号、特殊形式、内置函数和标准库内容在 SLED 中都是不可变的。此外,特殊形式和内置功能
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱