Racket入门

Racket是众多Lisp方言中的一种,语法简洁优雅(可以说,对语法的“蔑视”是Lisp系语言的一大特点,也正因为这个原因,学习它们可以让我们更关注计算的本质,而非语法上的细枝末节)。国内关于Racket语言的教程不多,本篇文章仅作为入门用途,如果您想继续深入学习,不妨访问:http://racket.tchen.me/

(1)下载DrRacket

在plt-scheme官网(plt-scheme现在改名成了racket)上下载racket。主要会用到的是DrRacket,是racket的IDE,长下面这个样子:


进去以后选择语言(Racket),然后就可以开始写代码了。您既可以在“>”的后面执行单条语句,也可以在代码编辑区书写成段的代码。

(2)语法基础

这个部分参考的是SICP的第一章。SICP是一本以lisp为基础介绍“什么是计算”的好书,您可以点击这里阅读。

1)lisp系的语言用的都是前缀表达式,而非我们熟悉的中缀,书写的时候注意要用空格隔开,例如:


2)使用define

define可以帮助我们进行最初级的抽象,即,用x来代替y,例如:


上述例子将圆周率的具体数值定义成了一个名字“pi”,这个名字也可以参与正常的运算。

使用define还可以定义复杂的过程(您可以将“过程”理解为“函数”,但严格来说这两者是不同的,过程偏向于一个问题怎么解决,而函数只是描述了这个问题的特征,不过...在意这些细节干嘛呢 :-)),例如:


您也许会关心这个过程的具体运算步骤,这就需要了解两种不同的求值顺序:一种叫“应用序”,一种叫“正则序”。Lisp采用应用序,即首先求参数的值再应用,从而避免了重复运算;正则序则把整个表达式展开,让表达式只含有基本运算符后才开始计算。对于可以用替换去模拟、并产生合法值的过程,应用序和正则序得到的结果完全一样。

在上述例子中,采用应用序或者正则序,求值的计算步骤都是:(+(* a a)(* b b))->(+(* 3 3) (* 8 8 ))->(+ 9 64)->73。两者的差异在处理递归的时候就很明显了,这里从略。

3)条件表达式

使用cond函数(rackect没有关键字这个概念,每个括号括起来的基本单元都是通过函数来构建的,cond就是一个函数)


和cond类似的还有if,这里从略。

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值