Scheme非完整笔记

反正边学边记就是了……

======================================================

标识符允许的范围:

[a-zA-Z?!*\/<=>:$%\^&_.~][a-zA-Z0-9?!.+\-*\/<=>:$%\^&_.~@]*

也就是:
小写字符a-z
大写字符A-Z
数字0-9
符号 ? ! . + - * / < = > : $ % ^ & _ ~ @

标识符开头不能为'@',一般也不以数字、'+'、'-'、'.'开头。
"+"、"-"、"..."为例外。

标识符的大小写不敏感。

------------------------------------------------------

注释标记:
';'开始直到行末是注释。

------------------------------------------------------

数据类型:

表:用成对的括号("()")括住的。可以嵌套。也称为S-expression(Symbolic expression)。

向量:("#()")括住的,例如#(this is a vector of symbols)。

字符:("#\")开头的,例如#\a。

字符串:成对的双引号之内括住的,例如"This is a string."。

数字:
--整型:123, +123, -123
--有理数:1/2
--浮点数:1.3, 1e23
--复数:1.2-2.3i(平面坐标), -1.2@73(极坐标)

布尔值:#t #f。在Scheme的条件表达式里,只有#f才被认为是假,而其它对象都被认为是真。所以3, (), "false", nil都是真。
[code](DEFINE (test a)
(COND
((EVAL a) (DISPLAY "true"))
(ELSE (DISPLAY "false"))
)
)
(test #f) ;=> false
(test ()) ;=> true[/code]

======================================================

谓词:
EQ? EQV? EQUAL? LIST? NULL?

数字谓词:
= <> < > <= >= >= EVEN? ODD? ZERO?

======================================================

表操作函数:

CAR:取表头
CDR:取表头以外剩余的部分
CONS:连接表。与CAR/CDR是相对的操作。
[code](CONS (CAR list) (CDR list)) ;=> list[/code]
APPEND:合并两个表
[code](APPEND list1 list2)

(APPEND '(a b c) '(d e f)) ;=> (a b c d e f)[/code]

======================================================

控制流/条件语句:

if语句:

[code](IF
predicate_expression
then_expression
else_expression
)[/code]

例如
[code](IF (> a b)
(- a b)
(- b a)
)[/code]

------------------------------------------------------

cond语句:

[code](COND
(predicate_1 expression_1 expression_2 ...)
(predicate_1 expression_1 expression_2 ...)
(predicate_1 expression_1 expression_2 ...)
...
(predicate_1 expression_1 expression_2 ...)
(else expression_1 expression_2 ...)
)[/code]

cond语句按照代码书写的顺序从前向后匹配谓词,然后执行第一个值为真的谓词后面的表达式。
else是可选的。实际上这里else就是一个#t值而已。

例如
[code](COND
((> a b) 1)
((= a b) 0)
((< a b) -1)
)[/code]

======================================================

lambda表达式:

[code](LAMBDA (formal_parameter_1 formal_parameter_2 ...)
expression_1 expression_2 ...
)[/code]

======================================================

quote表达式:

所有表和原子符号都会被解释器eval,为了避免某些表或原子符号被eval,则需要将其quote起来。
[code](QUOTE expression)[/code]
这个也可以被缩写为
[code]'expression[/code]

======================================================

定义常量或函数:

[code](DEFINE symbol expression)[/code]
[code](DEFINE function_name (LAMBDA (formal_parameter_1 formal_parameter_2 ...)
expression_1 expression_2 ...
))[/code]
[code](DEFINE (function_name formal_parameter_1 formal_parameter_2 ...)
expression_1 expression_2 ...
))[/code]

======================================================

let表达式:

[code](LET (
(name_1 expression_1)
(name_2 expression_2)
...
(name_n expression_n)
)
expression_1 expression_2 ..
)[/code]

======================================================

一些数值运算函数:

(SQRT a) :a的平方根
(EXPT a b) :a的b次幂
(REMAINDER a b) :a模b
(LOG a) :a的自然对数
(SIN a) :a的正弦值,其中a是弧度

======================================================

输入/输出:
[code](DISPLAY expression)[/code]
[code](NEWLINE)[/code]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值