computer 版 (精华区)

发信人: chumsdock (微笑服务), 信区: computer       
标  题: [合集] lisp确实很强大
发信站: BBS 听涛站 (Sat May  1 21:36:51 2004), 站内

☆─────────────────────────────────────☆
   wizard (Python) 于  (Thu Mar 25 15:34:28 2004)  提到:

search.lisp写完以后就是简单的用1->9的路径测了一下,后来把更新closed表的加进
去后,把water.lisp写完就直接可以用了,代码基本和我开始写的一样

要是C的话,调试就需要不少时间的,不过现在还没有接触大的lisp项目,感觉调试
上,和对lisp中存储的管理机制上还有许多的盲区



☆─────────────────────────────────────☆
   viogus (风之精灵*珍惜每一天) 于  (Thu Mar 25 16:02:53 2004)  提到:

我刚学lisp不久,不要打击我的信心
【 在 wizard (Python) 的大作中提到: 】
: search.lisp写完以后就是简单的用1->9的路径测了一下,后来把更新closed表的加进
: 去后,把water.lisp写完就直接可以用了,代码基本和我开始写的一样
: 要是C的话,调试就需要不少时间的,不过现在还没有接触大的lisp项目,感觉调试
: 上,和对lisp中存储的管理机制上还有许多的盲区




☆─────────────────────────────────────☆
   wizard (Python) 于  (Thu Mar 25 16:19:37 2004)  提到:

加油啊
你要多用递归来描述函数,你就会体会到lisp解决问题的优美之处了,我看过的书上也
说lisp最本质(不太清楚那个essential这儿应该怎么翻译)的方法应该是递归了
因为循环其实是过程化语言的特点,而lisp是函数式的语言,用函数式的方式编程
是不应该有循环出现的

其实let也是一种过程化的,不过lisp也提供这种机制,可以
【 在 viogus (风之精灵*珍惜每一天) 的大作中提到: 】
: 我刚学lisp不久,不要打击我的信心




☆─────────────────────────────────────☆
   viogus (风之精灵*珍惜每一天) 于  (Thu Mar 25 16:22:44 2004)  提到:

嗯,前一阵子看过一个scheme的例子,一下子就晕了,
很美的结构,当时就喜欢上lisp了,嗯,不过,
我还是摸石头过河而已,自己乱学一通,主要是时间也不够了,
好多事。。。
总结一下你的经验,我看能不能走少些弯路
【 在 wizard (Python) 的大作中提到: 】
: 加油啊
: 你要多用递归来描述函数,你就会体会到lisp解决问题的优美之处了,我看过的书上也
: 说lisp最本质(不太清楚那个essential这儿应该怎么翻译)的方法应该是递归了
: 因为循环其实是过程化语言的特点,而lisp是函数式的语言,用函数式的方式编程
: 是不应该有循环出现的




☆─────────────────────────────────────☆
   wizard (Python) 于  (Thu Mar 25 16:22:59 2004)  提到:

不过现在我还基本上上不会调试,一旦出了问题,我就没辙了
trace看了也不太清楚应该怎么办
【 在 viogus (风之精灵*珍惜每一天) 的大作中提到: 】
: 我刚学lisp不久,不要打击我的信心




☆─────────────────────────────────────☆
   viogus (风之精灵*珍惜每一天) 于  (Thu Mar 25 16:24:34 2004)  提到:

我也是,只是会写一些简单的函数,
你用的是什么平台写的
【 在 wizard (Python) 的大作中提到: 】
: 不过现在我还基本上上不会调试,一旦出了问题,我就没辙了
: trace看了也不太清楚应该怎么办




☆─────────────────────────────────────☆
   wizard (Python) 于  (Thu Mar 25 16:40:23 2004)  提到:

其实我也算是刚刚开始学的了,去年暑假的时候看过,后来考研,就中断了,放假把
lisp primer看完了,好多都又忘了,现在开始看Successful Lisp(还不错)

结构优美就是函数式语言的特点

我刚刚开始学lisp的时候还觉得这个语言太诡异了(大概是非典的时候),觉得实现一些
简单操作给人一种很别扭的感觉,开始的时候应该还不知道用递归来描述问题,而且
学的还是emacs lisp,那个文档一上来就是控制流之类的。很快就没有兴趣了,后来期
末考试也就没有继续看了(当时又稍微学了一点组合数学)

当时大脑里的概念就是lisp不过是一种人工智能语言罢了,没有什么特别的,而且
人工智能方面java已经成为新的人工智能语言,有取代之的趋势;还有一种想法就是,
lisp太古老了,应该要被淘汰了。现在看来当时的想法是多么愚蠢的:-(((

后来搬家以后,我的电脑搬到30#楼暂存,看书也觉得无聊,正好同学有笔记本,就装了
emacs开始学lisp,去图书馆借了一本书来看,书上的东西好古老的说(和现代lisp有很
大差距),不过却从中了解到了lisp最关键的数据结构`S表达式',感觉一下就把
cons,append 等等函数理解了,也看到了二叉树的典型的应用。同时也开始理解了lisp
的编程特点。(函数语言和过程语言的差异)

(不过纯的函数语言是有很大局限的,很多东西不借助副作用side effect是没有办法
处理的,所以lisp也不得不引入一些过程化的概念,这样就使很多东西处理起来更方便
了,当然不要烂用就好,原则上即使是C语言也是应该尽量避免副作用的,除非不能避免
的时候)

书上教了许多用递归来描述问题的方法,感觉收获相当大了,到尾递归的时候,当时是
看晕了,不过现在已经很习惯于用递归的时候尽量写成尾递归的
这时候才真的体会到lisp的优美之处,只要你对问题的描述是对的,那么程序一定是对的
而且是可以用数学归纳法证明算法的正确性的。

以前用C语言写程序的时候从来没有想过要用严格的数学推导来证明算法的正确性,
只是评直观加上无止尽的调试:-(
现在才开始学会了,对于算法的正确性是应该通过严格证明的,即使是写C程序要这样

后来又想到很久以前解决排列组合问题的时候构造组合的方法,很多地方都是用递归的
思想在解决问题

可以说是和数学思想的完美的结合
也难怪,当时就是一批数学家搞出来了,都是超级大牛啊

btw:据说要在非冯.诺依曼体系的计算机上才能充分发挥lisp的能力

【 在 viogus (风之精灵*珍惜每一天) 的大作中提到: 】
: 嗯,前一阵子看过一个scheme的例子,一下子就晕了,
: 很美的结构,当时就喜欢上lisp了,嗯,不过,
: 我还是摸石头过河而已,自己乱学一通,主要是时间也不够了,
: 好多事。。。
: 总结一下你的经验,我看能不能走少些弯路




☆─────────────────────────────────────☆
   wizard (Python) 于  (Thu Mar 25 16:41:29 2004)  提到:

clisp

win下据说有个叫corman lisp的东西似乎比clisp快,但是是要付费的

我以前使用emacs直接做解释器的

假期的时候写了那个9nines的程序,结果比网上的慢了不知道多少倍
我用了10多分钟,它只用了3秒钟:((((

当时就被严重打击了,而且我算的结果不对,虽然前面的都是对的
2nine ---- 8nies 到9nines 就错了:(((

【 在 viogus (风之精灵*珍惜每一天) 的大作中提到: 】
: 我也是,只是会写一些简单的函数,
: 你用的是什么平台写的




☆─────────────────────────────────────☆
   oushidaxiong (大雄) 于  (Thu Mar 25 17:13:29 2004)  提到:

牛。。。
【 在 wizard (Python) 的大作中提到: 】
: 其实我也算是刚刚开始学的了,去年暑假的时候看过,后来考研,就中断了,放假把
: lisp primer看完了,好多都又忘了,现在开始看Successful Lisp(还不错)
: 结构优美就是函数式语言的特点
: 我刚刚开始学lisp的时候还觉得这个语言太诡异了(大概是非典的时候),觉得实现一些
: 简单操作给人一种很别扭的感觉,开始的时候应该还不知道用递归来描述问题,而且
: 学的还是emacs lisp,那个文档一上来就是控制流之类的。很快就没有兴趣了,后来期
: 末考试也就没有继续看了(当时又稍微学了一点组合数学)
: 当时大脑里的概念就是lisp不过是一种人工智能语言罢了,没有什么特别的,而且
: 人工智能方面java已经成为新的人工智能语言,有取代之的趋势;还有一种想法就是,
: lisp太古老了,应该要被淘汰了。现在看来当时的想法是多么愚蠢的:-(((
: 后来搬家以后,我的电脑搬到30#楼暂存,看书也觉得无聊,正好同学有笔记本,就装了
: ...................



☆─────────────────────────────────────☆
   viogus (风之精灵*珍惜每一天) 于  (Thu Mar 25 17:18:05 2004)  提到:

好,去啃书去


【 在 wizard (Python) 的大作中提到: 】
: clisp
: win下据说有个叫corman lisp的东西似乎比clisp快,但是是要付费的
: 我以前使用emacs直接做解释器的
: 假期的时候写了那个9nines的程序,结果比网上的慢了不知道多少倍
: 我用了10多分钟,它只用了3秒钟:((((
: 当时就被严重打击了,而且我算的结果不对,虽然前面的都是对的
: 2nine ---- 8nies 到9nines 就错了:(((




☆─────────────────────────────────────☆
   wizard (Python) 于  (Thu Mar 25 17:18:37 2004)  提到:

加油:-))
【 在 viogus (风之精灵*珍惜每一天) 的大作中提到: 】
: 好,去啃书去




☆─────────────────────────────────────☆
   viogus (风之精灵*珍惜每一天) 于  (Thu Mar 25 17:20:04 2004)  提到:

嗯,其实我刚开始的时候也觉得特别怪,已经习惯了C/c++/java的思维了。
一见到lisp的时候感觉特别简单,后来又觉得太美了,嗯,好好学才行
过阵子我也写些感受过来,嗯,大家交流一下
【 在 wizard (Python) 的大作中提到: 】
: 其实我也算是刚刚开始学的了,去年暑假的时候看过,后来考研,就中断了,放假把
: lisp primer看完了,好多都又忘了,现在开始看Successful Lisp(还不错)
: 结构优美就是函数式语言的特点
: 我刚刚开始学lisp的时候还觉得这个语言太诡异了(大概是非典的时候),觉得实现一些
: 简单操作给人一种很别扭的感觉,开始的时候应该还不知道用递归来描述问题,而且
: 学的还是emacs lisp,那个文档一上来就是控制流之类的。很快就没有兴趣了,后来期
: 末考试也就没有继续看了(当时又稍微学了一点组合数学)
: 当时大脑里的概念就是lisp不过是一种人工智能语言罢了,没有什么特别的,而且
: 人工智能方面java已经成为新的人工智能语言,有取代之的趋势;还有一种想法就是,
: lisp太古老了,应该要被淘汰了。现在看来当时的想法是多么愚蠢的:-(((
: 后来搬家以后,我的电脑搬到30#楼暂存,看书也觉得无聊,正好同学有笔记本,就装了
: ...................



☆─────────────────────────────────────☆
   chumsdock (微笑服务) 于  (Thu Mar 25 17:20:54 2004)  提到:

加油 : )
我已经好久没有啃过编程了

【 在 viogus (风之精灵*珍惜每一天) 的大作中提到: 】
: 嗯,其实我刚开始的时候也觉得特别怪,已经习惯了C/c++/java的思维了。
: 一见到lisp的时候感觉特别简单,后来又觉得太美了,嗯,好好学才行




☆─────────────────────────────────────☆
   wizard (Python) 于  (Thu Mar 25 17:31:29 2004)  提到:

重贴一下上次的算法描述

发信人: wizard (Python), 信区: computer
标  题: Re: 讨论一个算法
发信站: BBS 听涛站 (Wed Dec 17 22:14:16 2003), 站内

我有源代码的说,以前曾经做过,呵呵

状态向量:(a,b,c)
;; 对应于lisp中的表如(8 0 0) ;; 似乎更好的办法是用array实现,#(8 0 0) viogus试试吧

规则集:
a->b
a->c
b->c
b->a
c->a
c->b
;; 程序里是
;; rules

;; (defvar rules '(
;;              (0 1)
;;              (0 2)
;;              (1 0)
;;              (1 2)
;;              (2 0)
;;              (2 1)
;;              ))

初状态(8,0,0)
末状态(4,4,0)
;; 这里作了修改,改成结束状态集,是为了通用化(记得好像产生式系统确实是这么说的)

用规则集中的规则作用在当前状态下得到下个状态(状态扩展)
;; pour-water 应用规则集中的一条规则作用在当前状态下
;; mapcar 用pour-water和规则集中的所有规则生成所有的下一个合法状态的表
;; 这里为了照顾mapcar的操作,规则作用不能得到合法状态的,直接返回原状态或空
;; 然后再删去之
;; 后来知道了用mapcan可以更自然的做到这一点
;; pour-water作为参数传递进去以后在search.lisp内部是delta转移函数,这个名字是
;; 借用的书上的叫法:-P

用两个表完成搜索,open,closed
初状态入open表(open表的操作方法(栈还是队列决定是深度优先还是宽度优先)
;; 所以才有一个open表操作函数,用来区别宽度优先和深度优先的
open表出一个元素(出栈或是出对)用规则集中元素作用扩展得到所有状态入open
(入栈或入队)扩展过的状态入closed
最终closed中是搜索过程
;; 如果要能得出正确的路径还需要加入一些新的东西,每个状态节点都有指向父节点的
;; 标识,等有时间再处理一下吧

最终以open为空结束表示无解,如果已达到终状态为结束closed表中为过程

【 在 wizard (Python) 的大作中提到: 】
: search.lisp写完以后就是简单的用1->9的路径测了一下,后来把更新closed表的加进
: 去后,把water.lisp写完就直接可以用了,代码基本和我开始写的一样
: 要是C的话,调试就需要不少时间的,不过现在还没有接触大的lisp项目,感觉调试
: 上,和对lisp中存储的管理机制上还有许多的盲区




[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:1.414毫秒