scheme 学习笔记(0)

早有打算学习一下scheme, 这个传说中的语言, 可是由于各方面的原因, 一直迁延 .近来心情颇为烦躁,  学习一下scheme , 转移一下注意力.


第一篇, 做一个概述, 记录一些听来的和自己感受到的. 以后在逐步细化, 将来做总结的时候, 看看有什么体会.

首先, scheme, 的历史.

前身是lisp, 是一个古老, 应用的非常广泛的语言. 函数是语言, 其核心就是lambda. 号称是一个自己实现自己的编译器的语言. 有相当数量的老程序员和高手的拥戴. 自己实现自己的编译器, 神乎其神吧. 如果你想了解一下原因, 来打发一下自己的好奇心. 好, 我可以回答你, 我不知道. 不过, 若是你想知道结果, 可以和我一起走完scheme之旅.

函数语言. 所谓函数语言, 据老外们的描述, 是区别于过程语言. c之类的, 我们平时虽然也叫做函数, 被老外们划分在procedure 语言里面. 是一种命令式的语言. c是弱类型的, c++/java/c#. 之流一直发展下来, 都是强类型的静态编译语言.  python之类的, 是无类型的动态语言. 不过, 随着语言的发展, 各个元素有融合的趋势. 这个, 非常不幸. 当一个东西包含了所有的东西的时候, 我们通常可以看到, 这个东西已经走向末路了.

特别强调. lisp是不同于以上任何一种计算机语言的东西. 有许许多多的实现版本. 相当龙蛇混杂, 随着岁月的变迁. 自然有一些智力人士, 对他做一些改造. 可能一开始以异端存在, 一时间难以获得主流的认可, 只好自立门户. scheme就是其中之一. 还有一个可能比较了解人多一些的, 就是 EMacs lisp. 强大的emacs 的内嵌脚本语言.
在这里, 再喷一下emacs.说实话, emacs是一个令人敬畏的东西, 强大, 怪异, 热键, 以及难用, 难学. 建议用vi, 一旦拥有, 别无所求. 当然, 直接用ue的同学也是要称赞的, vi绝对是一个好的选择. 尤其在对代码做一些替换, 格式化的时候, 比如下面要贴的代码, 就是用vi生成的html代码...

有没有见过或者不太熟悉的同学, 我贴一段下来, 大家来向这个长相怪异, 内心善良, 能力强大的朋友致敬.

 1       (define elaboration-exn-handler
 2         (lambda (exn)
 3           (compiler:fatal-error 
 4             #f
 5             (format "Error during elaboration: ~a" 
 6                     (if (exn? exn)
 7                       (exn-message exn)
 8                       exn)))
 9           (raise exn))


这是一段完整的lambda定义, 相当于是一个函数的定义, 呵呵. 看着是不是有一种变态的感觉. 这还算好的, 诸位兄弟, 是我从核心代码里面摘取出来一段标注代码. 如果代码格式比较差的, 没有经验的人写出来, 比如我亲自写的那几段. 您肯定一眼就吐血了.

scheme 也有几种不同的实现, 有MIT的实现和PLT两个, 比较强大. 其中又以PLT的那个比较适合学习和使用. 当然, 我也十分相信MIT的那个, 可能以后稍微看一下.

scott meyers 先生建议大家开发c++的时候, 用两个编译器来编译自己的代码. 我在这里也借用一下, 用两个scheme实现来检验您的代码, 这样, 可以确保不会把你绑死在编译器或者IDE环境里, 从而对比两者的异同, 更加深刻了解系统本质.

首先来一句纲领:

scheme的所有内容, 就是list, every thing.... . list的第一个元素是一个操作符, 剩下的是参数.


剩下的欲知详情, 请看下回. 我希望我不要太忙, 有时间逐步把这个东西给大家介绍完.
当然, 详情如何, 我现在也不是很清楚. 我也要去看一下才知道啊....

以上为一家之言, 或有误解, 错误, 全因本人也没有学习完整之故. 欢迎指出, 更加欢迎纠正. 让我有所进步 , 多谢了.


我建了一个scheme新闻组, 大家愿意的话, 可以交流发邮件给我. 我一般会写在blog里面.

http://groups.google.com/group/scheme_cn




阅读更多
换一批

没有更多推荐了,返回首页