stanford-oval/wikipedia huggingface dataset:
Scheme
基础特征 > λ演算

参见：λ演算
邱奇的λ演算的数学表示法，启发了Lisp使用lambda作为介入一个过程的关键字，并影响了Lisp中涉及到使用高阶函数的函数式编程技术的发展。但是早期的Lisp由于对自由变量的处理方式，而不适合表达λ演算。
一个正式的λ系统，拥有一些公理和一个完备的推理规则。这有助于使用数理逻辑和工具来进行分析。在这个系统中，演算可以被看作直接的演绎。λ演算的语法，来自用x, y, z, ...、圆括号、空格、点号和符号λ形成的递归表达式。λ演算的功能包括：首先，充当强力的数理逻辑的起点。其次，它可以缩减编程者在考虑实现细节上的要求，因为它可以用于模拟机器求值。最后，λ演算建立了一个坚实的元理论。
在Scheme中，lambda關鍵字被用於定義匿名过程，并且使用define基础形式来定义命名过程，即将一个lambda过程绑定到指名的全局变量。在Scheme中，(define (foo x) (+ x 1))與(define foo (lambda (x) (+ x 1)))
，在語法上是等同的。例如有序對可以表示為：
(define (cons x y)
  (lambda (m) (m x y)))

(define (car z)
  (z (lambda (p q) p)))

(define (cdr z)
  (z (lambda (p q) q)))
這樣定義出來的cons、car和cdr，滿足恆等式(car (cons x y))等於x，和(cdr (cons x y))等於y。甚至递归也可以表示为利用λ演算的Y组合子。
词法作用域的介入，通过在某些形式的λ表示法，和在工作编程语言中它们的实际表达之间做出等价，解决了早期Lisp的有关问题。Sussman和Steele展示了，通过将λ表达式用作“控制结构和环境修改器”，而非简单的过程实例化，可以用这个新语言优雅的导出其他编程语言包括ALGOL和Fortran的，所有指令式和声明式语义，和其他Lisp的动态作用域。他们在第一篇λ论文中，与对Scheme的首次描述一起，介入了续体传递风格，并在后续的论文中，他们推进演示了在这种实际使用中体现出的λ演算的原生能力。
基础特征 > 过程应用中的求值次序

Scheme采用了传值调用，但不同于多数Lisp规定了过程实际参数的求值次序，Scheme不规定求值次序。对比于其他Lisp，Scheme表达式在算符位置（第一个项目）上可以是一个表达式，只要在算符位置上的表达式的结果是一个过程，这种表示就是完全合法的。
在Scheme中，在算符和实际参数位置上的这些表达式的求值次序，可以在逐个调用的基础上由实现来选择，而唯一的约束是：“运算符和运算数表达式的任何并发求值的效果，被约束为一致于某种顺序次序的求值。”（R5RS sec. 4.1.3）
(let
  ((ev (lambda (n)
    (display "Evaluating ")
    (display (if (procedure? n) "procedure" n))
    (newline) 
    n)))
  ((ev +) (ev 1) (ev 2)))
ev是一个过程，它描述传递给它的实际参数，接着返回这个实际参数的值。在调用过程+来加1和2之中，表达式(ev +)、(ev 1)和(ev 2)可以按任何次序求值，只要效果上它们不像是并行求值的。因此在上述例子被执行的时候，标准Scheme可以按任何次序来显示前三行：
Evaluating procedure
Evaluating 1
Evaluating 2
3
然而一行的文本不可以同另一行的文本产生交错，因为这会违反顺序求值约束。
基础特征 > 塊結構

Scheme的代碼塊結構，不同于早先Lisp的語言構造。自从R2RS开始，Scheme中的块，是通过三个“绑定构造”来实现的：let（英语：）、let*和letrec。例如，下列构造建立一个块，其中叫做var的符号被绑定到数10：
(define var "goose")
;; 这里任何到var的引用都会被绑定到"goose"
(let ((var 10))
  ;; 语句走到这里时，任何到var的引用都会绑定到10
  )
;; 这里任何到var的引用都会绑定到"goose"
依据编程者的需要，块可以嵌套（英语：）来建立任意复杂的块结构。使用块结构来建立局部绑定，减轻了不然可能发生的命名空间冲突（英语：）。
let的变体之一let*，允许绑定引用在前面相同构造中定义的变量，例如：
(let* 
  ((var1 10)
   (var2 (+ var1 12)))
  ;; 但是var1的定义不可以引用var2
  )
let的另一个变体letrec，被设计用来确使互递归过程可绑定彼此。
下面的例子是侯世达雌雄序列（英语：）：
;; 将侯世达雌雄序列计算为有序对的列表
(define (hofstadter-male-female n)
  (letrec
    ((female (lambda (n)
	  (if (= n 0)
	    1
		(- n (male (female (- n 1)))))))
	 (male (lambda (n)
	  (if (= n 0)
		0
		(- n (female (male (- n 1))))))))
    (let loop ((i 0))
      (if (> i n)
	    '()
	    (cons (cons (female i) (male i))
		  (loop (+ i 1)))))))

(hofstadter-male-female 8)
===> ((1 . 0) (1 . 0) (2 . 1) (2 . 2) (3 . 2) (3 . 3) (4 . 4) (5 . 4) (5 . 5))
在一个单一的letrec中的所有过程，可以通过名字引用其他的过程，还有在相同的letrec中此前定义的变量的值，但是它们不可以引用在相同的letrec中此后定义的变量的值。
let的变体“命名let”形式，在let关键字之后有一个标识符。它将这些let变量绑定到一个过程的实际参数，这个过程的名字由这个标识符给出，它的过程体是let形式的主体。这个过程体可以通过调用这个过程达成想要的重复。命名let被广泛用于实现迭代。
一个简单的计数器例子:
(let loop ((n 1))
  (if (> n 10)
    '()
    (cons n
	  (loop (+ n 1)))))
===> (1 2 3 4 5 6 7 8 9 10)
就像Scheme中的任何过程一样，在命名let中建立的这个过程是头等对象。
基础特征 > 适当尾递归

更多：尾递归
Scheme拥有一个迭代构造do，但是在Scheme中更推崇的惯用法（英语：），是使用尾递归来表达迭代。遵循标准的Scheme实现被要求优化尾递归，从而支持无限数量的活跃尾递归（R5RS sec. 3.5），这个性质被Scheme报告描述为“适当”（proper）尾递归，它使得Scheme编程者可以安全的使用递归结构来书写迭代算法，这在很多时候是更符合直觉的。尾递归过程和命名let形式，提供对使用尾递归的迭代的支持。
;; 建造从0到9的平方的列表：
;; 注意：loop简单的就是用作标签的一个任意符号。任何符号都行。
(define (list-of-squares n)
  (let loop ((i n) (res '()))
    (if (< i 0)
      res
      (loop (- i 1) (cons (* i i) res)))))

(list-of-squares 9)
===> (0 1 4 9 16 25 36 49 64 81)
基础特征 > 头等续体

条目：续体
在Scheme中续体是头等对象。自从R2RS开始，Scheme提供了过程call-with-current-continuation（英语：）
，简写为call/cc，它捕获当前续体，将其包装成逃脱（escape）过程，再绑定到编程者提供的一个过程的唯一形式参数上。如果逃脱过程在后来某个时候被调用，它会放弃在后来时候正生效的任何续体，转而使用在创建这个逃脱过程之时生效的那个续体。逃脱过程与原本调用call/cc的续体，接受相同数目的实际参数；除了用call-with-values创建的续体，所有续体恰好接受一个值（R5RS sec. 6.4）。
头等续体使得编程者能够建立非局部控制结构比如迭代器、协程和回溯。续体可以被用来模拟指令式编程语言中return语句的行为。下列函数find-first接受函数func和列表lst，返回lst中的第一个元素x，它使得(func x)返回真。
(define (find-first func lst)
  (call/cc
    (lambda (return)
      (for-each
        (lambda (x)
          (if (func x)
    	    (return x)))
        lst)
      #f)))

(find-first integer? '(1/2 3/4 5.6 7 8/9 10 11))
===> 7
(find-first zero? '(1 2 3 4))
===> #f
David Madore在1999年提出的阴阳谜题，展示了Scheme可以将续体当作头等对象处理，绑定它们到变量，和把它们作为给过程的实际参数来传递。
基础特征 > 统一的命名空间

对比于Common Lisp，在Scheme中所有的数据和过程共享一个共同的命名空间，而Common Lisp中有函数和数据分离的命名空间，使得一个函数和一个变量可以有相同的名字，并且将一个函数作为值引用时要求特殊的表示法。这有时叫做“Lisp1与Lisp2”差异，二者分别称谓Scheme的统一的命名空间，和Common Lisp的分立的命名空间。
在Scheme中， 可以使用操纵和绑定数据的原始运算来绑定过程。没有等价于Common Lisp的defun和#'的原始运算。
;; 变量绑定到一个数：
(define f 10)
f
===> 10
;; 变化（改变绑定值）
(set! f (+ f f 6))
f
===> 26
;; 将一个过程赋值给相同的变量：
(set! f (lambda (n) (+ n 12)))
(f 6)
===> 18
;; 将一个表达式的结果赋值给相同的变量：
(set! f (f 1))
f
===> 13
;; 函数式编程：
(apply + '(1 2 3 4 5 6))
===> 21
(set! f (lambda (n) (+ n 100)))
(map f '(1 2 3))
===> (101 102 103)
实现标准

本章归档多年来做出的给与Scheme特定特征的设计决定，它们不是最初设计的直接产物。
实现标准 > 在布尔表达式中非布尔值的处理

在多数Lisp方言包括Common Lisp中，布尔表达式中的值NIL按照惯例被求值为值假。在Scheme中，自从1991年的IEEE标准，除了#f的所有的值，包括在Scheme中写为'()的NIL的等价者，在布尔表达式中求值为值真（R5RS sec. 6.3.1）。
在多数Lisp中表示布尔值真的常量是T，而在Scheme中它是#t。
实现标准 > 干净宏

条目：干净宏
Scheme的语法可以轻易的通过宏系统来扩展。R5RS标准介入了强力的干净宏系统，它允许编程者使用一种简单的模式匹配子语言，向语言增加的新的语法构造（R5RS sec 4.3）。在此前的R4RS标准中，干净宏系统已经作为“高级”系统，和“低级”宏系统一起被编排入标准的附录中，二者都被当作对Scheme的扩展而非语言的本质部份。
干净宏的实现，也叫做syntax-rules, 被要求遵守语言的其余部份的词法作用域。这是通过针对宏展开的特殊命名和作用域规则来确保的，从而避免在其他编程语言的宏系统中可能出现的常见编程错误。R6RS规定了更加复杂的变换系统syntax-case，它已经作为对R5RS Scheme的一个语言扩展而能够获得到有一段时间了。例如：
;; 定义一个宏来实现“if”的具有多个表达式的变体
;; 有真分支而无假分支
(define-syntax when
  (syntax-rules ()
    ((when pred exp exps ...)
     (if pred (begin exp exps ...)))))
宏和过程的调用看起来非常相似，二者都是S-表达式，但是它们被不同的对待。在编译器遇到程序中的一个S-表达式的时候，它首先查看这个符号是否被定义为在当前词法范围内的语法关键字。如果是这样，它接着尝试展开这个宏，将在这个S-表达式尾部的项目当作实际参数，而不用编译代码来求值它们，递归的重复这个处理过程直到没有余留的宏调用。如果它不是一个语法关键字，编译器编译代码来求值在这个S-表达式尾部的实际参数，并接着求值在这个S-表达式头部的符号所表示的变量，把它作为过程来调用，并把最终的尾部表达式作为实际参数传递给它。
多数Scheme实现还提供额外的宏系统。其中最流行是语法闭包、显式重命名宏和define-macro，它是类似于Common Lisp中提供的defmacro系统的非干净宏。
不能指定一个宏是否为干净的，是宏系统的一个缺点。可作为替代的展开模型比如作用域集合，提供一种潜在的解决方案。
实现标准 > 延迟求值

参见：惰性求值
自从R2RS开始，Scheme通过delay形式和过程force支持延迟求值。
(define a 10)
(define eval-aplus2 (delay (+ a 2)))
(set! a 20)
(force eval-aplus2)
===> 22
(define eval-aplus50 (delay (+ a 50)))
(let ((a 8))
  (force eval-aplus50))
===> 70
(set! a 100)
(force eval-aplus2)
===> 22
delay原始运算，产生叫做promise的一个对象，它在将来的某个时间点上被询问从而递交结果值，promise的原本定义的文字内容会被留存，并且在第一次使用force之后它的值也会被留存。promise永远只求值一次。它们可以被用来实现高级的惰性求值构造比如串流。
在R5RS中，给出了delay和force的推荐实现，将promise实现为没有实际参数的一个过程（thunk（英语：）），并使用记忆化来确保它永远只求值一次，与调用force的次数无关（R5RS sec. 6.4）。在R6RS标准中，它们不再是原始运算，转而作为R5RS兼容库的一部份提供（rnrs r5rs (6)）。
SRFI 41确使表达有限和无限序列能够具有非凡的经济性。例如，这是使用在SRFI 41中的函数定义的一个斐波那契数列：
;; 定义斐波那契序列
(define fibs
  (stream-cons 0
    (stream-cons 1
      (stream-map +
        fibs
        (stream-cdr fibs)))))

;; 计算这个序列的第一百个数
(stream-ref fibs 99)
===>  218922995834555169026
实现标准 > eval及其运行环境

R5RS标准之前，在其他Lisp中无处不在的eval过程，在Scheme中没有等价者。在第一篇λ论文中，曾经将evaluate描述为“类似于LISP函数EVAL”，但在具有词法作用域的Scheme中，对这个表达式在哪个环境中求值存在困惑。例如，不明确求值下列表达式的结果应当是5还是6：
(let ((name '+))
  (let ((+ *))
    (evaluate (list name 2 3))))
在求值实际参数name的时候，在外层环境中找到了它的定义；在求值结果表达式(+ 2 3)的时候，如果在外层环境中求值，结果是两个运算数的总和；如果在内层环境中求值，这里符号+已经被绑定到过程*的值，结果是两个运算数的乘积。为此在1978年的最初修订报告中，将evaluate替代为enclose，它接受分别为代码和运行环境的两个实际参数。由于各种技术和实际原因，第二次、第三次和第四次修订报告省略了任何eval的等价者。
R5RS通过规定三个返回环境的过程，并提供接受一个S-表达式和一个环境的过程eval，它在提供的这个环境内求值这个表达式（R5RS sec. 6.5），解决了这个困惑。R6RS通过提供叫做environment的一个过程进行了扩展，编程者通过它可以精确的指定将哪个对象导入到求值环境之内。
通过现代Scheme（通常兼容于R5RS）来求值表达式expr，你需要定义如下这样的一个函数evaluate：
(define (evaluate expr)
  (eval expr (interaction-environment)))
interaction-environment是解释器的全局环境。
实现标准 > 数值塔

Scheme规定了数值数据类型的相较完全的集合，包括复数和有理数类型，这在Scheme中叫做“数值塔”（R5RS sec. 6.2）。标准对它们作抽象处理，而不委以任何特定的内部表示。
数可以有精确性品质。一个精确数只能从涉及其他精确数的精确运算产生，不精确是传染的。标准规定任何两个实现对产生精确数的所有运算都必须产生等价的结果。
R5RS标准规定了过程exact->inexact和inexact->exact，它们可以用于改变一个数的精确性。inexact->exact产生“在数值上最接近实际参数的精确数”。exact->inexact产生“在数值上最接近实际参数的不精确数”。R6RS标准在主报告中省略了这些过程，而是在标准库中将它们规定为R5RS兼容过程（rnrs r5rs (6)）。
在R5RS标准中，不要求Scheme实现去实现整个数值塔，而是它们必须实现“符合实现用途和Scheme语言精神二者的连贯子集”（R5RS sec. 6.2.3）。新的R6RS标准要求实现整个数值塔，并且“精确整数对象和精确有理数对象实际上有无限的大小和精度，并且对于实现特定过程...所以它们在得到精确实际参数时总是返回精确结果”（R6RS sec. 3.4, sec. 11.7.1）。
在支持精确有理复数的实现中的精确算术例子：
;; 三个有理实数和两个有理复数的总和
(define x (+ 1/3 1/4 -1/5 -1/3i 405/50+2/3i))
x
===> 509/60+1/3i
;; 检查精确性
(exact? x)
===> #t
在既不支持精确有理数也不支持复数却接受有理数表示法的实数的实现中相同算术的例子：
;; 四个有理实数的总和
(define xr (+ 1/3 1/4 -1/5 405/50))
;; 两个有理实数的总和
(define xi (+ -1/3 2/3))
xr
===> 8.48333333333333
xi
===> 0.333333333333333
;; 检查精确性
(exact? xr)
===> #f
(exact? xi)
===> #f
二者实现都符合R5RS标准，但是第二个实现不符合R6RS，因为它没有实现完整的数值塔。
实现标准 > 原始数据类型不相交

在Scheme中原始数据类型是不相交的。对于任何Scheme对象，下列谓词中只有一个可以为真：boolean?、pair?、symbol?、number?、char?、>string?、vector?、port?和procedure?（R5RS sec 3.2）。
作为对比，在数值数据类型之内，对数值值是可以有交叠的。例如，一个整数值可以同时满足如下谓词：integer?、rational?、real?、complex?和number?（R5RS sec 6.2）。
实现标准 > 等价谓词

参见：关系算子
Scheme在任意对象之间有三种不同类型的等价，它们通过三种不同的“等价谓词”来指示，即测试等式的关系算符eq?、eqv?和equal?：
eq?求值为#f，除非它的实际参数表示在内存中相同的对象；
eqv?大体上同于eq?，但是特殊处理原始对象（比如字符和数），使得表示相同值的数eqv?为真，即使它们不引用相同的对象；
equal?比较数据结构比如列表、向量和字符串，来确定它们是否有全等的结构并且其内容eqv?为真（R5RS sec. 6.1）。
在Scheme中还存在依赖于类型的等价运算：string=?和string-ci=?比较两个字符串（后者进行不依赖大小写比较）；char=?和char-ci=?比较字符；=比较数。
实现标准 > 输入/输出

Scheme的输入和输出基于了“端口”数据类型（R5RS sec 6.6）。R5RS定义了两个缺省端口，可通过过程current-input-port和current-output-port来访问，它们对应于Unix概念的标准输入和标准输出。多数实现还提供current-error-port。标准通过标准过程比如with-input-from-file和with-output-to-file，支持输入和标准输出的重定向。多数实现提供有重定向能力的字符串端口，使用在SRFI 6中描述的过程，确使很多常规的输入-输出运算能在字符串缓冲区上进行而非在文件上。R6RS标准规定了更多复杂和有能力的端口过程和很多新的端口类型。
下面的例子是使用严格的R5RS Scheme书写的。
例子1，缺省输出到current-output-port：
(let ((hello0 (lambda() (display "Hello world") (newline))))
  (hello0))
例子2，类似例子1但对输出过程使用可选的端口参数的例子：
(let ((hello1 (lambda (p) (display "Hello world" p) (newline p))))
  (hello1 (current-output-port)))
类似例子1，但是输出被重定向到一个新建文件：
;; NB: with-output-to-file is an optional procedure in R5RS
(let ((hello0 (lambda () (display "Hello world") (newline))))
  (with-output-to-file "helloworldoutputfile" hello0))
类似例子2，但是具有显式的文件打开和端口关闭来发送输出到文件：
(let ((hello1 (lambda (p) (display "Hello world" p) (newline p)))
      (output-port (open-output-file "helloworldoutputfile")))
  (hello1 output-port)
  (close-output-port output-port))
类似例子2，但是使用call-with-output-file来发送输出到一个文件：
(let ((hello1 (lambda (p) (display "Hello world" p) (newline p))))
  (call-with-output-file "helloworldoutputfile" hello1))
对输入提供了类似的过程。R5RS Scheme提供了谓词input-port?和output-port?。对于字符输入和输出提供了write-char、read-char、peek-char和char-ready?。为了书写和阅读Scheme表达式，Scheme提供了read和write。在读运算时，如果输入端口到达了文件的结束处，则返回的结果是end-of-file对象，并且这可以使用谓词eof-object?来测试。
除了标准之外，SRFI 28定义了一个基本的格式化过程，类似Common Lisp的format并以此命名。
实现标准 > 标准过程的重定义

在Scheme中，过程被绑定到变量。在R5RS中语言标准正式的授权编程者可以变更内建过程的变量绑定，在效果上重定义它们（R5RS "Language changes"）。例如，通过重定义+可以将它扩展为同接受数一样接受字符串：
(set! +
  (let ((original+ +))
    (lambda args
      (apply
        (if (or (null? args) (string? (car args)))
          string-append
          original+)
        args))))

(+ 1 2 3)
===> 6
(+ "1" "2" "3")
===> "123"
在R6RS中所有绑定，包括标准过程，都属于某个库，并且所有导出的绑定都是不可变的（R6RS sec 7.1）。因此，禁止通过变更进行标准过程的重定义。转而，可以在标准过程的名字下导入不同的过程，这在效果上类似于重定义。
标准形式和过程概述

Scheme语言正式定义于1998年的R5RS和2007年R6RS标准之中。它们描述了标准“形式”，即关键字和随同的语法，它们提供语言的控制结构，和执行通常任务的标准过程。
在标准Scheme中，从一个数据类型转换到另一个数据类型的过程，在它们的名字中包含字符串->，谓词结束于一个?，而改变已经分配了数据的值的过程结束于一个!。Scheme编程者通常跟从这些命名约定。
标准形式和过程概述 > 标准形式

本表格描述Scheme中的标准形式。某些形式出现在不止一行之中，因为它们不能被轻易的归类入语言中的一个单一功能。
在表格中标记了“L”的形式被归类为标准中的派生的“库”形式，并且在实践中通常被实现为使用了更基础形式的宏，这使得实现任务比在其他语言中要容易许多。
| 用途 | 形式 |
| --- | --- |
定义: define
绑定构造: lambda, do (L), let (L), let* (L), letrec (L)
条件求值: if, cond (L), case (L), and (L), or (L)
顺序求值: begin (*)
迭代: lambda, do (L), 命名let (L)
语法扩展: define-syntax, let-syntax, letrec-syntax, syntax-rules (R5RS), syntax-case (R6RS)
引述: quote('), unquote(,), quasiquote(`), unquote-splicing(,@)
赋值: set!
延迟求值: delay (L)
注意begin在R5RS中被定义为库语法，但是展开者需要知道它来完成分片功能。在R6RS中它不再是库语法。
标准形式和过程概述 > 标准过程

下面两个表格描述在R5RS Scheme中的标准过程。R6RS更加具有可扩展性而如此总结是不实际的。
某些过程出现在不止一行之中，因为它们不能轻易的分类入语言的一个单一功能。
| 用途 | 过程 |
| --- | --- |
构造: vector, make-vector, make-string, list
等价谓词: eq?, eqv?, equal?, string=?, string-ci=?, char=?, char-ci=?
类型转换: vector->list, list->vector, number->string, string->number, symbol->string, string->symbol, char->integer, integer->char, string->list, list->string
数值: 参见独立表格
字符串: string?, make-string, string, string-length, string-ref, string-set!, string=?, string-ci=?, string<? string-ci<?, string<=? string-ci<=?, string>? string-ci>?, string>=? string-ci>=?, substring, string-append, string->list, list->string, string-copy, string-fill!
字符: char?, char=?, char-ci=?, char<? char-ci<?, char<=? char-ci<=?, char>? char-ci>?, char>=? char-ci>=?, char-alphabetic?, char-numeric?, char-whitespace?, char-upper-case?, char-lower-case?, char->integer, integer->char, char-upcase, char-downcase
向量: make-vector, vector, vector?, vector-length, vector-ref, vector-set!, vector->list, list->vector, vector-fill!
符号: symbol->string, string->symbol, symbol?
有序对和列表: pair?, cons, car, cdr, set-car!, set-cdr!, null?, list?, list, length, append, reverse, list-tail, list-ref, memq. memv. member, assq, assv, assoc, list->vector, vector->list, list->string, string->list
识别谓词: boolean?, pair?, symbol?, number?, char?, string?, vector?, port?, procedure?
续体: call-with-current-continuation (call/cc), values, call-with-values, dynamic-wind
环境: eval, scheme-report-environment, null-environment, interaction-environment (可选)
输入/输出: display, newline, read, write, read-char, write-char, peek-char, char-ready?, eof-object? open-input-file, open-output-file, close-input-port, close-output-port, input-port?, output-port?, current-input-port, current-output-port, call-with-input-file, call-with-output-file, with-input-from-file(可选), with-output-to-file(可选)
系统接口: load (可选), transcript-on (可选), transcript-off (可选)
延迟求值: force
函数式编程: procedure?, apply, map, for-each
布尔逻辑: boolean? not
在其名字中包含-ci的字符串和字符过程，在它们的实际参数之间进行不依赖大小写的比较：相同字符的大写和小写版本被认为是相等的。
| 用途 | 过程 |
| --- | --- |
基本算术算符: +, -, *, /, abs, quotient, remainder, modulo, gcd, lcm, expt, sqrt
有理数: numerator, denominator, rational?, rationalize
近似: floor, ceiling, truncate, round
精确性: inexact->exact, exact->inexact, exact?, inexact?
不等式: <, <= , >, >=, =
杂项谓词: zero?, negative?, positive? odd? even?
极大和极小: max, min
三角: sin, cos, tan, asin, acos, atan
指数: exp, log
复数: make-rectangular, make-polar, real-part, imag-part, magnitude, angle, complex?
输入-输出: number->string, string->number
类型谓词: integer?, rational?, real?, complex?, number?
接受多于二个实际参数的-和/在R5RS中被定义了但留作为可选的。
Scheme实现要求

由于Scheme的极简主义，很多常见过程和语法形式不是由标准定义的。 为了保持核心语言很小并促进扩展的标准化，Scheme社群拥有“Scheme实现要求”（SRFI）流程，通过对扩展提案的仔细研讨来定义扩展库。这提升了代码可移植性。很多SRFI被几乎所有Scheme实现支持。
在不同的实现中具有相当广泛支持的SRFI包括：
0: 基于特征的条件展开构造
1: 列表库
4: 同质数值向量数据类型
6: 基本字符串端口
8: 接收、绑定到多个值
9: 定义记录类型
13: 字符串库
14: 字符集库
16: 可变元数过程的语法
17: 广义set!
18: 多线程支持
19: 时间数据类型和过程
25: 多维数组原语
26: 不用柯里化的特殊化形式参数的表示法
27: 随机数位的来源
28: 基本格式化字符串
29: 本地化
30: 嵌套的多行注释
31: 递归求值的特殊形式
37: args-fold：程序实际参数处理器
39: 形式参数对象
41: 串流
42: 及早推导式
43: 向量库
45: 表达迭代式惰性算法的原语
60: 作为位元的整数
61: 更一般性的cond子句
66: 八位组向量
67: 比较过程
實作

Scheme的精簡設計，使得程式語言設計人士與愛好者，特別鍾愛研究它，故而它有不斷湧現的新實作，而活躍開發的實作也在持續跟進語言標準更新。儘管Scheme有眾多實現是它的一個主要長處，但是由于Scheme没有库函数标准，造成了很多不可互通的實作互相競爭，试图使用Scheme编写既复杂又便于移植的程序，往往比较困难。R6RS和R7RS-Large，在核心语言之外制定了库函数标准，使得编译器开发者和贡献者可以实现Scheme的可移植库。
幾乎所有Scheme實作都有传承自Lisp的「讀取﹣求值﹣輸出循環」交互模式，一些Scheme實作亦可作為編譯器。很多用C语言及衍生语言寫成的軟體，都利用Scheme作為腳本語言，很多嵌入式系統語言即是基於Scheme。Chez Scheme和Larceny等实现，可以將Scheme程式編譯為本機二進制碼。Gambit和Chicken等实现，可將Scheme程式編譯為C代码，Bigloo（英语：）还能编译成JVM字节码或者.Net字节码。
一些实现支持额外的特征。比如Kawa（英语：）提供与Java类的集成，而Scheme到C编译器通常易于使用C写成的外部库，甚至允许将实际C代码嵌入到Scheme源代码中。另一个例子是用java书写的Pvts（英语：），它提供了支持Scheme学习的一组可视工具。
教科書

《》（SICP），由Scheme創始人之一傑拉德·薩斯曼與哈尔·阿伯尔森編寫，它是最著名的使用Scheme語言的電腦科學教科書。書中用Scheme自身實現了Scheme的自循環直譯器，其簡單的語法可以幫助使用者理解Scheme的執行過程。
《》，由马蒂亚斯·费莱森等人編寫，它對SICP中的一些被認為過於艱澀的概念進行了改進。
《编程语言的本质（英语：）》，由丹尼尔·福瑞得曼等人编写，它是以Scheme为基础的教科书。
《简单的Scheme：介绍计算机科学》，由柏克萊加州大學資深講師布萊恩·哈維編寫，它是一本專為中學級別，無電腦科學基礎的學生編寫的入門書。
實際用處

很多著名的電腦科學院校都利用Scheme來教授入門級課程。以下為一些最為著名的教授Scheme的學校：
麻省理工學院是Scheme與SICP的誕生地。直到2008年為止，麻省理工學院的入門課程6.001即是用Scheme來教授的。儘管現在Scheme已經不再被用於入門課程，麻省理工學院到目前為止還在教授SICP。
柏克萊加州大學的入門課程61A到2010年為止利用Scheme與SICP教授入門課程，並利用Scheme來實作Logo，另一個基於Lisp的程式語言。自2011年起，61A改用Python來教授SICP。
西北大學的入門課程CS2500利用Scheme來教授另一本著名的教材《》。
印第安那大學的入門課程C211利用Scheme來教授。
耶魯大學
萊斯大學
香港科技大學
北京大學
ProgramByDesign（英语：）項目在美國超過600所高中教授Scheme語言。
滑铁卢大学数学系（包括计算机科学系）的入門課程CS115、CS116、CS135利用Scheme來教授。
雲林科技大學
自由軟體影像處理程式GIMP利用Scheme為嵌入式脚本語言。GNOME中有到核心库的一个GNU的扩展語言Guile包装器。在2012年出现的Julia所采用的语法解析器，是用Scheme方言Femtolisp实现的。
過海隧道巴士935線

| 過海隧道巴士935線 |
| --- | --- |




: 九龍巴士
: 荔枝角車廠（L）
使用車輛: Enviro 500 MMC（ATENU） 早上由石籬（大隴街）開出班次從905線抽調車輛行走

類型: 繁忙時間路線
: 石籬（大隴街）／安蔭（部份去程班次）
途經: 石蔭邨、青葵公路、西九龍公路、西區海底隧道、中環、金鐘
: 灣仔（菲林明道）
: 19公里
: 63分鐘
: 星期一至六：07:30-08:20
: 星期一至五：17:50、18:20 星期六：12:55、13:20
: 固定班次
: $20.6
分段: 西隧轉車站往灣仔：$11.4 港澳碼頭往灣仔：$6.7
分段: 西隧轉車站往石籬：$11.2 葵芳往石籬：$6.1
相关
以外 替代: 31M/43A（石籬一段）/235M↔930（方法1） 31B（石籬開）/35A（安蔭開）↔104或905（方法2）/936（方法3）
競爭交通: 31M、43A、235M、930、936
過海隧道巴士935線，是一條由九龍巴士獨營的過海巴士路線。935線只在星期一至六上午繁忙時間，由石籬（大隴街）或安蔭開往灣仔（菲林明道）；並在星期一至六下午繁忙時間，由灣仔（菲林明道）開往石籬（大隴街）。
歷史

1997年5月1日：投入服務，當時由安蔭單往銅鑼灣，只於平日早上提供服務，終站設於高士威道維多利亞公園外。
1997年7月21日：加設早上石籬（大隴街）開出之班次。
1998年7月16日：增設下午回程服務，由銅鑼灣（中央圖書館門外）經安蔭開往石籬。
1999年8月25日：配合新石籬（大隴街）巴士總站啟用而遷往該處。
2002年8月3日：本路線總站由銅鑼灣縮短至灣仔軒尼詩道近灣仔站。
2015年3月21日：增設到站時間預報。
2022年7月2日：修訂星期六班次：由石籬（大隴街）開出之班次減至三班，開出時間為07:30、07:53及08:15；由葵涌（安蔭邨）開出之班次減至四班，開出時間為07:40、07:50、08:05及08:20。
服務時間（詳細班次）

星期一至六：07:30、07:45、08:00、08:15
星期一至六：07:40、07:48、07:56、08:04、08:12、08:20
星期一至五：17:50、18:20
星期六：12:55、13:20
收費

全程：$20.6
西區海底隧道轉車站往灣仔：$11.4
港澳碼頭往灣仔：$6.7
西區海底隧道轉車站往石籬：$11.2
葵芳廣場往石籬：$6.1
八達通轉乘優惠

乘客登上本線往港島方向後150分鐘內以同一張八達通卡轉乘以下路線往港島方向，或從以下路線往港島方向登車後150分鐘內以同一張八達通卡轉乘本線往港島方向，次程可獲車資折扣優惠：
935往灣仔 → 968往銅鑼灣（天），於過西區海底隧道後轉乘，次程車資全免
| 西區海底隧道巴士轉乘站巴士轉乘優惠詳情 | 西區海底隧道巴士轉乘站巴士轉乘優惠詳情 | 西區海底隧道巴士轉乘站巴士轉乘優惠詳情 | 西區海底隧道巴士轉乘站巴士轉乘優惠詳情 | 西區海底隧道巴士轉乘站巴士轉乘優惠詳情 |  |
| --- | --- | --- | --- | --- | --- |
| 第一程路線 | 第二程路線 | 方向 | 第二程車資 | 時限 |  |
| 900、904、905／905P、907B／907C、914／914P／914X、 930／930A／930B／930X、933、934／934A、935、936／936A、 948／948A／948B／948P／948X、952／952C／952P、 960／960B／960C／960P／960S／960X、961／961P／961S、962／962A／962P／962X、 967／967X、968／968A／968X、969／969A／969B／969P／969X、970／970X、971、973、 976、978／978A／978B、980A、980X、981P、982X、985／985A／985B、989、E11／E11A （指定組合可享有更高轉乘優惠，請參閱注意事項） | 900、904、905／905P、907B／907C、914／914P／914X、 930／930A／930B／930X、933、934／934A、935、936／936A、 948／948A／948B／948P／948X、952／952C／952P、 960／960B／960C／960P／960S／960X、961／961P／961S、962／962A／962P／962X、 967／967X、968／968A／968X、969／969A／969B／969P／969X、970／970X、971、973、 976、978／978A／978B、980A、980X、981P、982X、985／985A／985B、989、E11／E11A （指定組合可享有更高轉乘優惠，請參閱注意事項） | 往港島 | 原價減$5.0 | 150分鐘 |  |
| 二次轉乘： 38B、240X、249X、286C、 286P／286X、287X 再轉 280X | 934／934A、935、936／936A、 960／960B／960C／960P／960S／960X、961／961P／961S、 968／968A／968X、 978／978A／978B | 往港島 | 總車費：$18.4 （$20.2） | 150分鐘 |  |
| 280X | 934／934A、935、936／936A、 960／960B／960C／960P／960S／960X、961／961P／961S、 968／968A／968X、 978／978A／978B | 往港島 | 總車費：$18.4 （$20.2） | 150分鐘 |  |
| T270 | 934／934A、935、936／936A、 960／960B／960C／960P／960S／960X、961／961P／961S、 968／968A／968X、 978／978A／978B | 往港島 | 原價減$1.5 | 150分鐘 |  |
| 978／978A／978B | 968 | 往港島 | 免費 | 150分鐘 |  |
| 960／960C／960P／960S、961／961P／961S | 968 | 往港島 | 免費 | 150分鐘 |  |
| 960B／960X | 968 | 往港島 | 免費 | 150分鐘 |  |
| 960／960C／960P／960S、961／961P／961S | 968X | 往港島 | $2.6 | 150分鐘 |  |
| 934／934A、935 | 936／936A | 往港島 | 免費 | 150分鐘 |  |
| 968／968A／968X | 960／960C／960P／960S、961／961P／961S | 往港島 | 免費 | 150分鐘 |  |
| 968／968A／968X | 960B／960X | 往港島 | 免費 | 150分鐘 |  |
| 968 | 960／960A／960B／960X、961 | 往新界 | 免費 | 150分鐘 |  |
| 960B／960X | 968 | 往新界 | 免費 | 150分鐘 |  |
| 960／960A、961 | 968／968X | 往新界 | $2.6 | 150分鐘 |  |
| 936／936A | 934／934A、935 | 往新界 | 免費 | 150分鐘 |  |
 注意事項： 乘客須使用同一張八達通卡享用以上轉乘優惠。  轉乘優惠不適用於轉乘同一路線或用「／」劃分的組別之路線。  減$5.0之轉乘優惠只適用於西區海底隧道收費廣場或以前轉車，唯九巴之指定組合轉乘位置不限。  960及961系列之間，以及968及978系列之間亦設有額外轉乘優惠，詳情請參閱模板:屯門公路轉車站轉乘優惠及模板:大欖隧道轉車站轉乘優惠。  由934、934A及935轉乘968，以及城巴930、952、962、967及969系列之免費轉乘優惠只適用於港島區轉車，於西區海底隧道收費廣場轉車只可享有上表之減$5.0轉乘優惠。詳情請參與各路線之條目。  此轉乘優惠可與港島路線轉乘優惠連續使用。  12歲以下小童優惠額折半計算；受惠於長者及合資格殘疾人士公共交通票價優惠計劃的乘客則第二程車費為以上第二程優惠車費（如為長者或12歲以下合資格殘疾人士則折半）與$2.0中的較低者，故或有部份轉乘組合變相沒有轉乘優惠。 官方網頁： 九巴  城巴及新巴
使用車輛

本線現時使用6輛Enviro 500 MMC 12米（ATENU）雙層空調巴士作掛牌車，均屬荔枝角車廠。
| 車隊編號 | 車牌 |
| --- | --- |
ATENU1580: VS3621
ATENU1581: VS3817
ATENU1591: VS3856
ATENU1600: VS5315
ATENU1601: VS5343
ATENU1602: VS5578
行車路線

石籬（大隴街）/安蔭開經：大隴街、和宜合道、大隴街、(安足街、石排街、)大白田街、梨木道、童子街、石蔭路、北葵涌街市、石蔭路、童子街、梨木道、和宜合道、昌榮路、昌榮路迴旋處、葵涌道、青葵公路、西九龍公路、西區海底隧道、、民吉街、統一碼頭道、民吉街、諾道中、夏愨道、紅棉路支路、金鐘道及軒尼詩道。
由石籬（大隴街）開出的班次途經斜體字之街道。
由安蔭開出的班次途經括號內之街道。
灣仔（菲林明道）開經：軒尼詩道、金鐘道、德輔道中、摩利臣街、諾道中、諾道西、西區海底隧道、西九龍公路、青葵公路、葵涌道、昌榮路迴旋處、昌榮路、和宜合道、梨木道、童子街、石蔭路、北葵涌街市、童子街、梨木道、大白田街、石排街、安足街、安蔭邨巴士總站、安足街、石排街、大白田街及大隴街。
行車路線 > 沿線車站

| 安蔭開> 序號 | 安蔭開> 車站名稱 | 安蔭開> 位置 | 石籬（大隴街）開> 序號 | 石籬（大隴街）開> 車站名稱 | 石籬（大隴街）開> 位置 | 灣仔（菲林明道）開> 序號 | 灣仔（菲林明道）開> 車站名稱 | 灣仔（菲林明道）開> 位置 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 1 | 安蔭巴士總站 | 安蔭巴士總站 | 1 | 石籬（大隴街）巴士總站 | 石籬（大隴街）巴士總站 | 1 | 菲林明道 | 軒尼詩道 |
| 2 | 石籬邨石歡樓 | 石排街 | 2 | 打磚坪街 | 和宜合道 | 2 | 盧押道 | 軒尼詩道 |
| （兩個方向在此交匯，其後路線及車站相同） | （兩個方向在此交匯，其後路線及車站相同） | （兩個方向在此交匯，其後路線及車站相同） | （兩個方向在此交匯，其後路線及車站相同） | （兩個方向在此交匯，其後路線及車站相同） | （兩個方向在此交匯，其後路線及車站相同） | 3 | 太古廣場（A3） | 金鐘道 |
| 序號 | 序號 | 車站名稱 | 車站名稱 | 位置 | 位置 | 4 | 滙豐總行 | 德輔道中 |
| 3 | 3 | 裘錦秋中學 | 裘錦秋中學 | 大白田街 | 大白田街 | 5 | 永吉街 | 德輔道中 |
| 4 | 4 | 石蔭東邨 | 石蔭東邨 | 大白田街 | 大白田街 | 6 | 西隧轉車站（B4） | 西區海底隧道 |
| 5 | 5 | 北葵涌街市 | 北葵涌街市 | 石蔭路 | 石蔭路 | 7 | 葵芳廣場 | 葵涌道 |
| 6 | 6 | 昌榮路 | 昌榮路 | 昌榮路 | 昌榮路 | 8 | 光輝圍 | 葵涌道 |
| 7 | 7 | 葵俊苑 | 葵俊苑 | 葵涌道 | 葵涌道 | 9 | 昌榮路 | 昌榮路 |
| 8 | 8 | 新葵興花園 | 新葵興花園 | 葵涌道 | 葵涌道 | 10 | 梨木道 | 和宜合道 |
| 9 | 9 | 葵芳邨 | 葵芳邨 | 葵涌道 | 葵涌道 | 11 | 北葵涌街市 | 石蔭路 |
| 10 | 10 | 西隧轉車站（A1） | 西隧轉車站（A1） | 西區海底隧道 | 西區海底隧道 | 12 | 石蔭東邨 | 大白田街 |
| 11 | 11 | 港澳碼頭 | 港澳碼頭 |  |  | 13 | 安蔭邨豐蔭樓 | 石排街 |
| 12 | 12 | 海港政府大樓 | 海港政府大樓 | 統一碼頭道 | 統一碼頭道 | 14 | 安蔭巴士總站 | 安蔭巴士總站 |
| 13 | 13 | 怡和大廈 | 怡和大廈 | 諾道中 | 諾道中 | 15 | 石籬（大隴街）巴士總站 | 石籬（大隴街）巴士總站 |
| 14 | 14 | 力寶中心（E1） | 力寶中心（E1） | 紅棉路 | 紅棉路 |  |  |  |
| 15 | 15 | 軍器廠街 | 軍器廠街 | 軒尼詩道 | 軒尼詩道 |  |  |  |
| 16 | 16 | 菲林明道 | 菲林明道 | 軒尼詩道 | 軒尼詩道 |  |  |  |
客量

此路線主要方便往港島工作的乘客，因此在星期六客量較低，基本上與2017年12月4日延長尾班車時間，增設假日班車和改道的936和早上繁忙時間班次936A完全重叠。不過由於此線取經較為快捷的青葵公路和西九龍公路前往西區海底隧道，不如936A般經青山上路，尤其是自從936A於2020年增停四小龍以來，部份乘客改投本線。由於935的走線直接，936在東北葵的走線過度迂迴，因此也有呼聲要求兩線合併。
參考資料

↑  巴士狂熱：石籬新巴士總站啟用，巴士路線改道安排 （页面存档备份，存于），1999年8月25日。
↑  〈http://www.kmb.hk/tc/news/press/archives/news201503192212.html （页面存档备份，存于） 九龍巴士（一九三三）有限公司，100條九巴及龍運路線增設巴士到站時間預報系統〉［新聞稿］，2015年3月21日。
↑  .   [2019-02-06]. （原始内容存档于2019-02-07）.
《二十世紀巴士路線發展史－－渡海、離島及機場篇》，容偉釗編著，BSI出版
外部連結

過海隧道巴士935線 （页面存档备份，存于）
KMB Cross Harbour Route 九巴過海路線－935 （页面存档备份，存于）
此線的走線圖
天主教埃貝比因教區

| 天主教埃貝比因教區  |
| --- | --- |

教会管区
 
基本
教座位置: 赤道幾內亞
管轄範圍: 基埃恩特姆省
禮儀形式: 拉丁禮
所屬教省: 馬拉博
創設時間: 1982年
首長職銜: 主教
教務首長
教省總主教: 若望·恩蘇埃·馬耶
統計資料
教友人數: 182,800
天主教埃貝比因教區（拉丁語：、西班牙語：）是赤道幾內亞一個羅馬天主教教區，屬馬拉博總教區。
教區成立於1982年10月15日，範圍包括基埃恩特姆省。2006年有教友182,800人（佔轄區總人口93.7%）、十個堂區、卅三名司鐸。現任教區主教為若望·恩蘇埃·馬耶。
參考

↑   (PDF). 宗座公報 (梵蒂岡出版社). 1983年, 75 (I): 11  [2013-02-17]. （原始内容存档 (PDF)于2010-03-27）.
|  论 编赤道畿內亞天主教教區 |
| --- | --- |
總教區: 馬拉博總教區
教區: 巴塔教區 | 埃貝比因教區 | 埃維納雍教區 | 蒙戈莫教區
參見：赤道畿內亞天主教 · 赤道畿內亞天主教教區列表  · 非洲天主教教區列表
戈亚尼恩斯竞技俱乐部

戈亚尼恩斯竞技俱乐部是位于巴西戈亚斯州戈亚尼亚的足球俱乐部。
俱乐部主场为可容纳12 500人的安东尼奥·阿西奥利体育场，重要赛事时会使用可容纳50 049人的塞拉·多拉达体育场。
历史

俱乐部成立于1937年4月2日，自1944年戈亚斯州足球锦标赛创办以来从未缺席，并夺得首届冠军。截至2024年共获得18次州联赛冠军和24次亚军。
1980年代开始参加全国联赛，最佳成绩是1980年在44支参赛队中获得第23名。
2003年首次从州甲级联赛降级，2005年以州乙级冠军身份回归，并在州决赛中0-1负于戈亚斯竞技俱乐部。
2008年通过巴西足球丙级联赛获得乙级升级资格。2010年起多次在巴甲和巴乙之间升降级，2022赛季排名第18位再次降级。
荣誉

巴西足球乙级联赛冠军（1次）：2016
巴西足球丙级联赛冠军（2次）：1990、2008
戈亚斯州足球锦标赛冠军（18次）：1944、1947、1949、1955、1957、1964、1970、1985、1988、2007、2010、2011、2014、2019、2020、2022、2023、2024
参考资料

↑  . opopular.com.br. 2022-11-13  [2024-06-25]. （原始内容存档于2023-06-06） （葡萄牙语）.
旧版队徽
万惠霖

万惠霖（1938年11月20日—2024年4月28日），男，籍贯湖北汉阳，生于湖北汉口，中国物理化学家，中国科学院院士。厦门大学化学系教授，曾任该校化学化工学院院长、固体表面物理化学国家重点实验室主任。
生平

万惠霖生于湖北汉口，籍贯湖北汉阳。1962年毕业于厦门大学化学系，1966年该系研究生毕业。1997年当选为中国科学院院士。
2024年4月28日于厦门去世。
索尔维集团

| 索尔维集团 |
| --- | --- |


公司類型: 上市公司
ISIN: BE0003470755
成立: 1863年，​162年前​（1863）
創辦人: 欧内斯特·索尔维 
代表人物: Philippe Kehren ( 行政总裁)
總部:  比利时布鲁塞尔
標語口號: Progress, beyond
業務範圍: 全球
产业: 化工
營業額: €10.9 billion (2017)  €4,88 billion (2023) 
: 305,000,000 歐元符號 (2010年) 
: €1,116 million (2017)
總資產: €21.45 billion (2017)
資產淨值: €9.75 billion (2017)
員工人數: 9 000 (2023)
网站: solvay.com
索尔维集团是一所在1863 年成立于比利时的化工集团。该集团总部位于布鲁塞尔，于全球40多个国家拥有约9,000 多名员工。
2023年底开始，集团分拆为索尔维及新公司Syensqo，索尔维于此后专注于基础化工的发展。
索尔维在布鲁塞尔的泛欧交易所上市。