nomasp

風立ちぬ、いざ生きめやも」

从Hello World到defmacro,那些令人惊叹的代码!

前言自从看到那个征文活动便灵感突现,这是个为大家介绍Lisp语言的机会,也是个赞扬最让我心动的语言的机会。毕竟还是学生党,还未有太多时间来学习它,但内心满满的都是热爱与兴奋。文中如有疏漏,还请各位指教!一次偶然在《黑客与画家》第二版中了解到这门神奇的语言,瞬间便被”洗脑“,立刻找到一大堆资料,前前...

2015-09-16 16:08:28

阅读数 3786

评论数 4

【SICP归纳】6 副作用与环境模型

虽说叫做副作用显得不太好听,但在Lisp中副作用还是非常重要的。而相对于所有状态都必须显式地操作和传递额外参数的方式,如果引进赋值和将状态隐藏在局部变量中,那么就可以用更加模块化的方式来构造系统。正如你所知道的,不用任何赋值的程序设计称为函数式程序设计。相反,广泛采用赋值的程序设计称为命令式程序设...

2015-03-28 10:38:51

阅读数 4292

评论数 0

【SICP归纳】5 泛型运算符

关于数据抽象,有两个很重要的思想。一是在构建一些水平的抽象障碍在这个系统中。用某些对象来代换这些单独使用的抽象屏障。二是当需要使用某种形式的数据对象时,往往可以由其他人来将其实现,而我们并不需要知道具体操作。这都是在数据抽象方面非常强大的编程方法。但是这还不足以完成一个真正复杂的系统。在这里的问题...

2015-03-23 20:47:46

阅读数 4580

评论数 0

【SICP归纳】4 模式匹配和以规则为基础的代换

在书中符号数据一节中,作者写了关于微积分的演算规则的程序。这是一个很程序化的程序,我们所做的是在讲这些(数学)规则翻译成计算机语言。因为它有程序化的行为和结构,那么存在其他的方法使书写这个程序更加清晰吗?这些规则都具有左右两侧。左侧是我们想要采取的导数的表达式,有右边则是其的替代。用可以匹配的模式...

2015-03-23 20:24:27

阅读数 4588

评论数 0

【SICP归纳】3 层次性数据和符号数据

如果你在函数的描述中做些改变,它更可能是由相应的变化所捕获,在这里语言也会自动在下一级别执行,因为你已经完全控制了这一个层次。所以如果不是在谈论一个具体的函数,比如说Beside,那么你便拥有全局的控制,所以如果去进行一点点的改变,更可能的便是你的方法将有能力去捕获、去适应这一改变。 对于由表,...

2015-03-15 15:15:02

阅读数 4407

评论数 0

【SICP归纳】2 高阶函数和数据抽象

上一篇博文对应的是书中的第一章的一二两节,我们已经大致的有了一种构造的感觉不是么。书中展示了很多有趣的句法(syntax)。现在我们要让思想进一步的抽象,写这篇博客的时候并未学完整本书,更不敢说对书中的内容有一个多深的领悟。但我一路学习过来,就感觉书中的示例越来越抽象,作者所引导我们的也是如此方向...

2015-03-14 15:35:55

阅读数 7603

评论数 0

【SICP归纳】1 过程和代换模型

在这里我并不打算去介绍书中的诸如前缀表达式等等知识,因为书中的讲解已经非常完美了,我才疏学浅就不再往博客上堆了。我就归纳一点总结而已。《计算机程序的构造和解释》这本书的目标并不是讲解一门编程语言的语法等,它是一种方法。不是在向你陈述知识,而是在教你如何做到想要做的东西。它是一个过程,一个精神。这些...

2015-03-12 22:56:45

阅读数 8041

评论数 0

【Scheme归纳】7 常用关键字

display ------- 在common lisp中有format,在scheme中则有display,轻松应对各种输出。 ``` (display(+ 1 2 3 4)) 10 ;Unspecifiedreturn value (display‘(1 2 3 4)) (12 3 4) ...

2015-03-12 14:28:00

阅读数 4739

评论数 0

【Scheme归纳】6 赋值

赋值 -- 因为Scheme是函数式语言,通常来说,你可以编写不使用赋值的语句。然后如果使用赋值的话,有些算法就可以轻易实现了。尤其是内部状态和继续(continuations)需要赋值。 R5RS中规定的用于赋值的特殊形式是set!,set-car!,set-cdr!,string-set!...

2015-03-12 14:26:28

阅读数 4778

评论数 0

【Scheme归纳】5 数据结构

Scheme的数据结构 ----------- 在前面的博文中我们使用了list等等,像其他的编程语言一样,Scheme也有字符(Character),字符串(String),符号(Symbol),向量(Vector)等数据结构。下面我们来一一介绍。 字符 -- 在某个字符前添加...

2015-03-12 14:20:18

阅读数 4350

评论数 0

【Scheme归纳】4 高阶函数

高阶函数的英文名称是Higher Order Function,它们是以函数为参数的函数。主要用于映射(mapping)、过滤(filtering)、归档(folding)和排序(sorting)表。高阶函数让程序更具模块性,让函数更加通用。 函数sort具有2个参数,一个是需要排序的表,另一...

2015-03-12 14:10:50

阅读数 4896

评论数 0

【Scheme归纳】3 比较do, let, loop

对象的比较eq?这个函数用来比较2个对象的地址,如果相同的话就返回#t。在Scheme中真用#t表示,假则用#f。 例如,(eq? str str)返回#t,因为str本身的地址的是一样的,但是”scheme”和”scheme”则被存储在不同的地址中,因此函数返回#f。注意,不要用eq?来比较数...

2015-03-12 14:06:16

阅读数 10191

评论数 0

【Scheme归纳】2 算数运算

函数quotient用于求商数(quotient)。 函数remainder和modulo用于求余数(remainder)。 函数sqrt用于求参数的平方根(square root)。 以下是一些示例:

2015-03-12 13:59:06

阅读数 4239

评论数 0

【Scheme归纳】1 使用Edwin

Edwin介绍Edwin是MIT Scheme系统的一个窗口式的编辑使用前端。启动Edwin实际是先启动Scheme系统,再启动也给Edwin前端。Edwin是一个使用Scheme写的交互式编辑器,其特点是支持Scheme表达式的编辑和求职。两种模式Edwin模式: 编辑Scheme文件的模式,...

2015-03-12 13:53:06

阅读数 4695

评论数 0

提示
确定要删除当前文章?
取消 删除