SICP读到第二章时对Scheme的理解

在Scheme中,


一个括号里包含了一个基本单元。


括号里可以包含基本的数据,或者由别的括号围起来的的基本单元。


比如 ( + 1 2 ),它有两种意义:第一种,它代表了1+2这个运算过程,第二种,它代表了整数3.


再比如 ( define x 1 ),有两种意义:第一种,它代表了“将x的值设置成1”这个运算过程。


第二种意义,它返回一个东西,这个东西是值还是过程我也不知道(误


但总之,( define 1 )代表了一个值或者过程。


在Scheme中,值和过程分的并不是那么清楚,这是最令我惊奇和着迷的地方。


一个过程也可以作为返回值,返回给其它的过程作为一个参数来使用。


这句话可能有点抽象。但其实在C语言中有类似的概念,那就是函数指针。


在C语言中,函数指针指向了函数的起始地址,也就是函数的入口。这个指针是一个十六进制整数值,


但是这个整数又指向了一个函数,所以它又可以被看做一个函数。


所以C语言中,使用函数指针,可以达到Scheme中的,“把过程作为参数传进去”、“把过程作为参数传出来” 这两个目的。


所以这就是函数式编程了对吗?


下面讨论一下scheme的括号的意义


一对括号就代表了一个值,这个值可以是常规意义上的值,也可以是过程,也可以是空的:()


括号里的东西由两种元素组成:数据和对数据的操作。


第一项是对数据的操作,后面的都是数据。


但是,数据和操作分的并不是那么清楚。


所以操作也可以被操作所操作(我觉得这句话会烧掉读者的大脑)


比如

(define * 2)
(+ * * * *)

这么做会输出8,因为你把乘号定义成了2,这个例子虽然有些匪夷所思,但是可以说明,scheme语言的灵活性。


就像SICP第一章所说的:

”Lisp不像其它程序设计语言,它给了过程完全的第一级状态。这就给有效实现提出了挑战,但由此所获得的描述能力却是极其惊人的。“

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值