网站大量收购闲置独家精品文档,联系QQ:2885784924

Scheme语言深入..doc

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Scheme语言深入.

Scheme语言深入 在Scheme语言中,符号类型的用法、过程的多参数情况、Continuation、记录类型、宏定义与模块等等一些问题成为阻挡初学者的门槛,也是深入理解和使用Scheme语言编程的关键,下面分别论述,做为对《Scheme语言概要》一文的补充。 现在就开始免费试用 一、关于符号类型 符号类型又称引用类型,在概要一文中本人介绍得非常的模糊,使很多初学者不理解。符号类型在Scheme语言中是最基础也是最重要的一种类型,这是因为Scheme语言的祖先Lisp语言的最初目的就是符号处理,在Scheme语言中几乎所有的东西都可以看做是符号或做为符号列表来处理,这也是我们把符号类型做为第一个问题研究的原因。 与符号类型相关的关键字有四个,分别是:quote, quasiquote, unquote和unquote-splicing,如下所示: 规范用法:(quote obj)? 简化用法:obj (注意,为右单引号,双引号下面的那个符号。)? 意义:符号类型的定义,(quote obj)本身就是一个值,虽然它不如数字123这样直观。 规范用法:(quasiquote obj)? 简化用法:`obj (注意,`为左单引号,~波浪号下面的那个符号。)? 意义:类似符号类型的定义,最好称之为逆符号类型,它可以将符号类型转换为具有实际意义的东西。 规范用法:(unquote obj)? 简化用法:,obj (注意,,逗号,小于号下面的那个符号。)? 意义:非符号类型的定义,非符号类型出现在符号类型或逆符号类型定义中间,它不直接做为符号类型使用,而是将运算结果做为符号类型的一部分。 规范用法:(unquote-splicing obj)? 简化用法:,@obj? 意义:非符号类型的拼接,注意:,@ 两个符号做为一个操作符来使用)。当非符号类型是一些复杂算法时,需要用它来做一下拼接,以达到符号类型的目的。? 上面所说的所有规范用法和简化用法的功能都是相同的。 符号类型的意义在于,一个说明,英文单词zebra指的是活生生的斑马,而zebra或(quote zebra)指的是由字母z、e、b、r、a构成的这串符号(不是字符串),就象我们定义变量(define x 100),这时x指的就是100这个数值,而x或(quote x)则代表字母x构成的这个符号。 首先看一段代码: guile (define s (good morning)) guile s (good morning) guile (symbol? s) #f guile (list? s) #t guile (symbol? (list-ref s 1)) #t 从此示例中可以看出,用quote定义的列表的类型仍是列表,而列表中的某一值的类型则是符号类型。还可以看出有点类似于如下: (+ 1 (+ 2 (+ 3 (+ 4 5)))) == (+ 1 2 3 4 5) (list a b c d e) == (a b c d e) 两者有异曲同工之妙,减少了多余的操作符,使表达式更直观,更容易理解。 从 (1 2 3 4 5) == (1 2 3 4 5) 可以看出,由符号类型的定义来形成列表,这是Scheme语言继承自LISP语言的传统。 下面是在guile中的用法示例: guile `(1 ,(+ 1 1) 3) (1 2 3) guile (quasiquote (1 (unquote (+ 1 1)) 3)) (1 2 3) ;;;第一个是简化用法,第二个是标准用法。 guile `(1 ,@(map + (1 3) (2 4)) 9) (1 3 7 9) guile (quasiquote (1 (unquote-splicing (map + (quote (1 3)) (quote (2 4)))) 9)) (1 3 7 9) ;;;第一个是简化用法,第二个是标准用法(注意:,@ 两个符号做为一个操作符来使用)。 从示例中我们可以看出,这些应用多数与列表有关,而处理列表是Scheme语言的关键所在。符号类型的用法对深入理解Scheme语言也非常关键,因为Scheme语言本身就可以理解为是这种符号类型的列表,处理符号类型就是处理Scheme语言本身。 回页首 二、关于尾递归 数列问题是研究递归的非常好的范例,在王垠的主页中有关于用菲波那契数列来说明非尾递归与尾递归之间区别和尾递归的好处的一个例子,见?/homepage/2001315450/wiki/TailRecursion.html?。 我们这里用更简单一点的问题,求累计的问题来说明,即求自然数1+2+3+4+ ... +n的和。事实上就是设计一个过程,给它一个参数n,求1+2+3+ ...

文档评论(0)

gangshou + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档