Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
CSDN 技术社区
skill_tree_scheme
提交
a093cf70
skill_tree_scheme
项目概览
CSDN 技术社区
/
skill_tree_scheme
通知
1
Star
2
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
skill_tree_scheme
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
a093cf70
编写于
11月 09, 2022
作者:
G
guenchi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update exercise_02.md
上级
90847ae1
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
54 addition
and
0 deletion
+54
-0
data/1.Scheme初阶/1.Scheme入门/2.S表达式/exercise_02.md
data/1.Scheme初阶/1.Scheme入门/2.S表达式/exercise_02.md
+54
-0
未找到文件。
data/1.Scheme初阶/1.Scheme入门/2.S表达式/exercise_02.md
浏览文件 @
a093cf70
# S表达式
如前文所述,所有的Scheme程序都是由
`( )`
括起来的内容构成。不仅如此,括号中的内容还遵循,操作符,操作数,操作数,操作数的顺序。
什么是操作符呢? 比如我们常见的数学式子
`1 + 2`
中的“+”便是操作符。引申开来,求平方也是一个操作符,或者数学中的一个函数
`f(x)`
也是一个操作符。
1 和 2 就是这个式子的操作数。
`f(x)=x^2`
比如这个式子表示
`f(x)`
的操作返回操作数的平方。
也许你已经知道在计算机语言中,我们称
`f(x)`
这种式子为lambda表达式。
***绝大部分Scheme程序是由这样的表达式组成的:它接受操作数,返回一个结果。**
*
由
`(操作符 操作数 操作数 ...)`
这样的顺序表示的结构便称为S表达式。
注意这里的三个
`...`
,这表示操作数是任意个数的。
> `...`的写法是真实存在于Scheme程序中的,它表示其左边的结构可以是无穷个或者可以无限扩展。
这便是S表达式的优点之一。
比如你需要计算
`1+2+3+4+5`
,在Scheme程序中你只需要使用一个
`+`
:
`(+ 1 2 3 4 5)`
> Scheme语言中相当的内置操作符是接受无穷个操作数的,如+ - * /
S表达式的第二个优点,也是最重要的一个,便是这个结构很容易表达为以操作符为节点的树状结构:
比如
`(* (+ 1 2) (- 3 4))`
这个Scheme程序,它具有一个根节点
`*`
,根节点的叶子是两个
`()`
。
而这两个括号分别是
`+`
和
`-`
节点,叶子分别是
`1 2`
和
`3 4`
。
在计算中,我们必须等待根节点
`*`
的两个叶子分别得到值,才能进行
`*`
运算。
如此我们便触及到Scheme程序的另一个核心规律,总是对最尖端的叶子先求值,依次递归,直到最后一个根节点。
在Scheme中我们有一个专门的术语来对这个过程进行描述:
`+ - * /`
和数字等称为一个原子
`atom`
。
而括号包裹的部分则不是一个原子。
当一个操作符遇到它的操作数不是原子时,它优先对操作数位置的S表达式进行求值。
再看这个括号,虽然Scheme程序是将括号放在操作符的外侧,如
`(func)`
, 但是它的作用和C语言或者JavaScript表达式
`func()`
的括号是一样的:运行。
综上,Scheme程序的运行规则可以一句话概括:从内向外运行包裹的括号,直至没有括号。
> 前文述绝大多数Scheme程序接受操作数并返回一个结果,但剩下的却不同,他们可能改变外部的环境变量。在惯例中,我们使用`!`后缀来标记这种后果。如`set!`。
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录