《How to design programs》第一回

今天首先归纳一下书上的前三章。这本书的特点是首先创设一个情景,在这个情景下解决实际问题,然后将scheme语法加入讨论的过程中。这个特点和国内的编程教育不同,国内编程比如C语言、java语言大多都是直指核心,直接讲述语法。这点需要注意。

一、数字

数字是第一个程序概念,数字可以引申为数据,当然计算机存储的意义上数据还包括字符、字符串以及lisp独有的符号(symbol)类型。数字及其运算的处理很重要,是计算机运算的基础。在C语言中,数字类型包括整型、浮点型两种,懂C语言的人都知道这两种存储方式不同,进行相互转换必须要程序员亲自操笔。后来在javascript中学到原来可以进行自动转换。scheme也是如此。它处理数字有一种层次。它将整数看做有理数,将有理数看做实数,将实数看做复数。如下

integer(整数) -> rational(有理数) -> real(实数) -> complex(复数)

这样在逻辑上数字就会得以转换。其实计算机为什么不能进行做到人工智能呢?或者说只能在一定程度上模拟?其实这和计算机的数值处理能力有关。

scheme 数字天然是数字。例如3就代表数字3。和其他语言没有什么差别。

二、表达式

这里以几个例子讲述。

(+ 3 4)    ->    7

(sqr 12)    ->    3.464101615

(+ (* 3 4) 5)   ->  17

lisp的特点就是“操作符放在前面,很多括号代表运算顺序,相同层级从前到后”。这是我总结的scheme或者说lisp语法特点。

三、变量定义

(define n 12)   ->   12

定义变量为n,值为12。类似javascript中var n = 12。

四、函数定义

这里以一个例子来讲述。

(define 'f (lambda (n) (+ n n)))

在drscheme教学使用的语法形式是(define (f n) (+ n n)),这两种形式没有本质差别,这种形式规避了lambda的书写,其实也是一样的。

如果将上式敲入任意一个scheme解释器中,得到的结果是(lambda (n) (+ n n)) 。这个叫lambda表达式。其实如果看关于lisp书籍看得多的话,就会发现lambda表达式其实也是一个list——特殊的lambda list。这里对此不再赘述。

我用C的特点稍微解释一下,"f"是函数名,n是参数,返回n+n。

五、后记

我写的这些内容有些是书上的,有些是网上的,有些是自己体会的。这些都是我读这本书的遇到的疑惑和感悟。很简单,分享一下。如果有疑惑和错误,可以留言。

希望对scheme新手有帮助,高手不喜勿喷。

推荐一个slideshow,是newlisp的。这个是scheme的语法,但是采用动态作用域而不是scheme的词法作用域。可以看一下,了解一下scheme(lisp)语法概观。

http://www.nuevatec.com/manual-intro.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值