首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 软件时空 > 软件相关 > OnLisp学习笔记-1 The Extensible Language
【标  题】:OnLisp学习笔记-1 The Extensible Language
【关键字】:OnLisp,The,Extensible,Language
【来  源】:http://www.cublog.cn/u/4614/showart.php?id=92522

OnLisp学习笔记-1 The Extensible Language

    大部分人把Lisp当成一种古老的人工智能语言,实际上Lisp与AI的联系只是因为古老的历史原因。Lisp是 John McCarthy发明的,同时这位老兄也发明了 Artificial Intelligence 这个术语(这还是我第一次知道这件事)。于是,于是AI就和Lisp挂上钩了,历史阿……
    现在,Lisp存在于很多领域,最著名的 Emacs, AutoCAD,以及Interleaf,一个高端出版系统。
    Lisp与其他语言的区别在于,Lisp就像橡皮泥一样可以随意捏,适应各种任务。Lisp本身就是一个Lisp程序,而Lisp程序又是一个List结构,用户可以自己添加语言特性~(又晕了,不说了)

1.1 Design by Evolution
    由于Lisp赋予使用者设置自己的操作符的自由,总之就是要写什么样的软件,就可以把Lisp塑造成适合什么样软件的程序语言。(还是不大理解,这一点其他语言通过函数库似乎也可以做到,继续读下去)。大概就是写着写着,吧唧一下~Lisp就变成你需要的语言了:)
    哈~今天总算读到我喜欢的东西了: The plan-and-implement method并不适合于写程序!◎!(真希望我的项目总监能读到这些)(如果真读到了,当我没说过)
    毕竟,软件开发与传统的工程是有区别的,可变因素太多了,硬要使用传统的管理工程方法来指导软件开发,只能产生出呆板的代码和呆板的文档员。
    先做详尽计划的一个原因是:缺少 Flexible 的工具。总是希望在开始的时候估计好任何的变化与可能,我们从来没有做到过,J2EE不能,软件工程不能,oh shit,连.net都不行。Lisp可以么?也不行。
    不过我们可以变写边计划,预见3个月的情况很困难,但预见3天的情况还是可能的,如果我们用足够flexible的工具与方法,生活应该可以更简单些。边干边计划。
    实际上,这很符合“敏捷开发”的思路,最好的文档和计划,就是呢写的代码~
    多花时间在代码上,要比花时间在Word上强多了,不知道老板们为什么就不这么想。

1.2 Programming Bottom-Up
    函数不能太大,太大了就会容易出错,阅读起来也困难。这是一条程序风格的共识。功能复杂就需要分解到适当的粒度上。
    Top-down 的方法是比较通常的做法,而有经验的Lisp程序员用一种不同的方法:Bottom-up。在Lisp中,不单单是用Lisp程序来写特定的问题的程序,而是把Lisp构建成解决那个问题的语言。在写程序时,将会考虑,Lisp应该有什么样的操作符,什么样的函数,于是就写出来。语言与程序同时进化。写到最后,程序看上去就好像语言是专门为此设计的一样。
    后面还讲了一大堆Bottom-up的好处,总之Lisp不仅仅是另一种编程语言,更是另一种编程方式。这也是它用户那么少的原因吧。

1.3 Extensible Software
    说道可扩展的软件,现在我正在用PHP改写的一个社区程序,可以算做一例:边开发边使用。
    用户需求不可能完全满足,所以软件应该可以扩展,让高级用户自己通过接口来扩展自己的功能,就像Autocad的二次开发。Bottom-up的开发方式可以很自然的实现拓展。
    一些例子: Gnu Emacs, XWindow, TeX。Emacs大部分使用Lisp实现的,同样,很多Autocad二次开发的工具包也是Lisp写的,一些高级命令用Lisp来实现。
    因为Lisp本身是可以扩展的,因此使用Lisp来做可扩展软件的开发,就可以给用户一个扩展了的Lisp语言(比如AutoLisp)。
    当然,动态语言渐渐的开始流行起来,没有必要再过多的强调。

1.4 Extending Lisp
Function & Macros

Function例子:
(map1-n fn 10)  对1-n 每一个数调用fn

Macros are programs that write programs. 听上去很酷阿,还记得我们当初为什么学程序么?难道不是因为觉得程序员很酷么。
Macro这个东西不好理解在于其他语言中没有对等物,C++ Template 算不算,我不清楚。

Macro的例子:
(defmacro for ((var start stop) &body body)
    (let ((gstop (gensym)))
        ‘(do ((,var ,start (1+ ,var))
            (,gstop ,stop))
            ((> ,var ,gstop))
            ,@body)))
(for (x a,b)
    (print x))
--- 对比:
(do ((x a (+ 1 x)))
    ((> x b))
  (print x))

Lisp语言可以生成很多变种:Embedded language,CLOS就是一个。

1.5 Why Lisp (or When)

    Lisp 具有的一些特性:动态存储分配和垃圾收集,runtime typing ,函数对象,内建list类型,一个内建的compiler,交互环境。(听起来有点像Python,确实Python有很多Lisp的特性)
    Fortran和Lisp是现在还在用的最古老的两种高级语言,他们代表着两种相反的程序哲学:Fortran是从汇编演进的,Lisp是用来描述算法的。其他的语言大多在这两者之间。同时,这两种语言也在向中间靠近。
    近些年的发展,已经越来越朝着有利于Lisp的方向发展,很多新进的语言吸收了Lisp的特性。还记得Java中的GC么,Lisp可是在60年代就有了。
    现在的问题已经不是要不要Lisp,而是 When?

go on Lisp。。。。

APUE 2E Section 16.3 Addressing (part1):【上一篇】
OnLisp学习笔记1:【下一篇】
【相关文章】
  • OnLisp学习笔记2-Functions
  • The Advantages of the Java EE 5 Platform
  • The IQ of Government
  • Just SQL Part II – The Simple SELECT
  • The Oracle 10g Scheduler, Part 1: Overview
  • The Oracle 10g Scheduler, Part 2: Implementation
  • The Oracle 10g Scheduler, Part 3: Advanced Feature
  • 引起unauthenticated user的另类原因
  • DNS and the resolver function
  • The North American Network Operators' Group
  • 【随机文章】
  • Instructions for setting up MySQL Replication
  • 如何在Linux下配置socks5代理
  • 扩展 PHP
  • 1.3怎么写HLSL着色器
  • 洞察Vista之后微软技术发展的趋势
  • [精彩] FREEBSD5.1上用IPFILTER做NAT做网关.
  • VBScript 过程
  • C#控制光驱开关
  • Application 物件
  • Asp.Net 使用 GDI+ 绘制3D饼图入门篇源码
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.