Program Structure 笔记1(scheme基础)

 

Program Structure 笔记1(scheme基础)

 (作者:colinboy  Email:cybbh@163.com) V2

(能力有限, 内容难免出现错误或一些专业词汇使用不当,只是个人笔记,能理解总体内容就好)

 

 

Scheme(一种函数式程序设计语言)

 

Scheme是一种解释型语言,需要一个解释器(Interpreter)运行scheme程序.

解释器有Mit-Scheme  Stk-berkeley.

 

表达式:

stk ,键入的任何数字都可以当作表达式,如果我们输入7,那么scheme就会计算此表达式的值,然后把此值返回,7是自求值表达式(就是说它的表示就代表了它的值),我们将看到scheme打印出7.

 

Scheme内置了很多基本运算符,例如+ - * /scheme中都是基本运算符.

我们输入 (+ 3 5 9),scheme就会计算此基本运算符组成的表达式,然后表达式的值17.

 

括号代表了这是一个函数调用,这是scheme函数调用的形式,括号最左边是函数名,后面跟着函数的参数.

 

对于一些基本运算符,可以不传递任何参数,例如

(+ )   会返回0

(* )   会返回1  因为如果我们输入(* 5),会返回5,那么代表有一个隐含的15相乘,所以(*)会返回1.

 

我们可以在表达式前面加单引号组成表达式,那么此表达式返回的就是这个去掉引号的表达式.

例如

'myname  返回myname

'(+ 1 3) 返回(+ 1 3)

我们可以输入

(+ 1 '10)  会返回11.  因为'10表达式计算之后会返回10,这是一个合法数字,所以可以相加.

 

'10(quote 10)是完成了同一种功能.

(quote myname) 返回myname

(quote (+ 1 3)) 返回(+ 1 3)

 

函数调用

(first 'this) 返回t

(first '(we are tired)) 返回 we

(last 'this) 返回 s

(last '(we are tired)) 返回 tired

 

嵌套函数调用:

一个函数调用可以当作另一个函数的参数,例如

(+ 2 (* 3 3)) 会返回11

(first (bf 'there)) 会返回h

 

对于嵌套函数调用, 解释器会先逐步计算每个嵌套函数的值,把函数的返回值当作最外层表达式的参数,例如

(+ 2 (* 3 3)) 会先计算 2 以及(* 3 3),2会返回2,(* 3 3)会返回9,然后把计算的结果替换对应的嵌套函数调用,替换后为(+ 2 9),之后计算结果为11

 

我们可以自己定义变量以及过程

(define pi 3.1415)

之后在stk种输入pi就会返回3.1415.

 

(* pi 5 5) 会返回78.5375

因为我们已经定义过pi,所以解释器知道pi的值.

(* pi 5 5) 等同于 (* 3.1415 5 5)

 

(define (square x)

         (* x x))

上面的代码定义了一个函数,名称为square,有一个参数x,函数的返回值为(* x x).

解释器会把square这个名字和以上特定代码相关联.

 

(square 5) 会返回25,上面我们定义了square函数,解释器会计算square的值来确定如何执行.

 

(+ 1 2 3 4 5)这种把操作符放在表达式最前面的形式成为"前缀表示"(prefix notation),优点很明显,如果有很多参数我们不用重复的输入操作符,

类似这种1+2+3+4+5称为"中缀表示"(infix notation),当然还有"后缀表示"(postfix notation).

 

在下面代码中

(define (square x)

         (* x x))

其中的(square x)中的x称为"形式参数"(formal parameter).

 

(square 5), 5称为"实际参数"(actual argument).实际参数的意思是某一固定时刻,此形式参数的实际值是多少.

 

对于上面自定义的square函数,如果我们不传入任何参数,解释器就会提示出现错误,这和 + * 基本运算符不同.

(square) //错误!!

 

(square (first '5s))  返回25,因为(first '5s)会返回5,5是一个合法的数字,所以可以正确执行.

 

对于任何表达式,在执行它的时候,会首先计算在它之内的每个子表达式的值!

对于(square (first '5s)),实际参数是一个表达式(first '5s),称作实际参数表达式(actual argument expression),会首先计算此表达式的值,结果返回5,返回的结果是一个实际参数表达式计算出来的值,之后根据实际参数值(actual argument value)计算整个表达式的值.

 

最后,如果要退出scheme解释器,可以输入

(exit)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值