MIT/GNU Scheme 参考手册 (2021-10-28,每天一页,认真学习,25,26,27三天没干活儿)

Sec 1.3 词汇约定

这一节介绍 Scheme 的词汇约定。

Sec 1.3.1 空白

        空白字符包括空格、换行符、制表符和分页符。空白用于提升程序的可读性,并在必要时把标记彼此分开。(标记时一种不可分割的词汇单位,比如标识符或者数字。)空白在其他方面不重要。空白可以出现在任意两标记之间,但是不能出现在一个标记内。空白也可以出现在一个字符串里,在那里,它是重要的。

Sec 1.3.2 分割符

        所有的空白字符都是分割符。另外,以下字符也可以作为分割符:

        (    )    ;    "    '    '    |

        最后,以下这些字符也可以当作分割分,尽管事实上 Scheme 并没有为他们定义任何特殊含义:

        [    ]    {    }

        例如,如果变量 name 的值是  "max":

(list"Hi"name(+ 1 2))                    =>  ("Hi" "max" 3)

Sec 1.3.3 标识符

        标识符是一个或多个非分割符字符的序列。在 Scheme 程序中,标识符用于几个方面:

        * 标识符可用作变量或者语法关键词;

        * 当标识符显示为文字或者在文字中时,表示符号。(这个是什么意思?没明白

        Scheme 接受其他程序语言中允许的大多数的标识符。MIT/GNU Scheme 除了接受标准 Scheme 中的所有标识符之外,还增加了一些。

        MIT/GUN Scheme 定义了一类潜在标识符,它们由非分割符序列组成,并要求不能以 ‘#’ 或者 ‘ , ’ 开头。任何满足以上要求的非语言有效数字(参见第四章 [数字],第63页)字符序列被认为是有效标识符。请注意,尽管在标识符中出现 ' # ' 或 ' , ' 是合法的(除了在第一个字符出现),但这是不被提倡的。

        以下是一些标识符的例子:

        lambda                        q

        list->vector                  soup

        +                                  V17a

        <=?                              a34kTMNs

        the-word-recursion-has-many-meanings

Sec 1.3.4 大写字母和小写字母

        Scheme 不区分大小写字母,除了在字符或字符串常量中;换句话说,Scheme 是大小写不敏感的。例如,标识符 ‘Foo’ 和标识符 ‘FOO’ 是一样的, '#X1AB' 和 '#X1ab' 是同一个数字。但是,'#\a' 和 '#\A' 是不同的字符。

Sec 1.3.5 命名约定

        谓词总是返回布尔类型的值(#t 或 #f)。按照惯例,谓词的名字通常以 ‘ ? ' 结尾。

        变异过程(mutation procedure,翻译的对不对?)是一个改动数据结构的过程。按照惯例,谓词的名字通常以 ‘ ! ' 结尾。

Sec 1.3.6 注释

        注释的开始可以用分号 ( ; )。Scheme 会把所有以 ';' 开头的行全部忽略。整个注释(包括终止注释的换行符)被视为空白。

        另一种注释形式(有时称为扩展注释)是以 ‘#|’  为开始标记,以 ‘#|’ 为结束标记。这种替代形式是MIT/GNU方案的扩展。与普通注释一样,‘#|’ 和‘#|’ 之间的内容,包括 ‘#|’ 和 ‘#|’,都被视为空白。这种形式的注释可以扩展到多行,还可以嵌套(不同于具有类似语法的编程语言C的注释)。

;;; This is a comment about the FACT procedure. Scheme
;;; ignores all of this comment. The FACT procedure computes
;;; the factorial of a non-negative integer.

#|
This is an extended comment.
Such comments are useful for commenting out code fragments.
|#

(define fact
    (lambda (n)
        (if (= n 0) 
             1                            ;This is another comment:
             (* n (fact (- n 1))))))      ;Base case: return 1

Sec 1.3.7 其他记号

    下面的列表给出了 Scheme 中使用的其他符号。有关数字符号的说明,请参见第63页第4章 [数字]。

  • + - .                加号、减号和句号用在数字中,也可能出现在标识符中。带分隔符的句号(不出现在数字或标识符中)用在 pairs 的表示中,并在正式参数列表中表示 “rest” 参数(见第15页第2.1节[Lambda表达式”)。
  • (  )                  圆括号用于分组和标记列表(见第129页第7章 [列表] )。
  • "                     双引号分隔字符串(参见第6章 [字符串],第107页)。
  • \                      反斜杠用于字符常量的语法(参见第5章 [字符],第99页)和字符串常量中的转义字符(参见第6章 [字符串],第107页)。
  • ;                      分号开始一个注释。

  • ’                      单引号表示文字数据;它抑制评估(什么意思?)(见第24页第2.6节 [引用])

  • ‘                       后引号表示几乎恒定的数据(见第24页第2.6节[引用])。

  • ,                        逗号与后引号一起使用(见第24页第2.6节[引用])。

  • ,@                     逗号后跟at符号与反引号一起使用(见第24页第2.6节[引用])。

  • #                        井号有不同的用途,具体取决于紧跟其后的字符。

  • #t  #f                   表示布尔常数(见第155页第10.1节[布尔值])。

  • #\                        这个字符序列引入了一个字符常量(见第5章[字符],第99页)。

  • #(                         此字符序列引入向量常数(参见第8章[向量],第147页)。右括号“)”终止向量常数。

  • #e #i #b #o #d #l #s #x    这些字符序列用于数字符号(见第63页第4章[数字])。

  • #|                          此字符序列引入扩展注释。注释以序列“|#”结尾。此符号是MIT/GNU方案扩展。

  • #!                        此字符序列用于表示一小部分命名常量。目前,只有两个命名常量,#!optional #!rest,它们在 lambda 特殊形式中用于将某些参数标记为“optional”或“rest”参数。此表示法是MIT/GNU方案的扩展。

  • #*                          此字符序列引入位字符串(见第151页第9章 [位字符串])。此符号是MIT/GNU方案的扩展。

  • #[                           此字符序列用于表示没有可读外部表示的对象(参见第234页第14.10节[自定义输出])。右括号 “]” 终止对象的表示法。此表示法是MIT/GNU方案扩展。

  • #@                         此字符序列是一种方便的速记,用于通过散列号引用对象(参见第234页第14.10节[自定义输出])。此符号是MIT/GNU方案的扩展。

  • #=

  • ##                            这些字符序列引入了一种在打印输出或输入中表示循环结构的符号。该符号的工作原理与普通Lisp非常相似,是MIT/GNU模式的扩展。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值