2008-02-18

Scheme的Lambda与Ruby的Block

关键字: scheme ruby
SICP中有一个简单而经典的例子:构造一个通用的求和函数 这里的m, n和函数f都不是预先定好的。在Scheme语言中,利用 可以定义出一个这样的sum函数: (define (sum m n func) (if (> m n) 0 (+ (func m)(sum (+ m 1) n func)))) 要计算1+2+...+100,先定义一个函数(define (f x)(x)),然后代入到sum中:(sum 1 100 f)。当然如果每换一个通项公式都要定义一个函数的话,程序中就会充斥着大量一次性的小函数。采用Scheme的“匿名函数”(在Sch ...
刚才没什么事,决定试试用新学的Ruby把那个O(1)栈的问题做了一下。写着是挺快,一口气就下来了,只是代码里带着明显的C++气味。唉,习惯不是一两天就能改的。代码和C++的差不多长。主要还是不习惯Ruby的思维,再加上那个C++代码中用了很多STL的东西,已经相当精简了。class Stack class Pair def initialize(first, second) @first=first @second=second end attr_reader :first, :second end def initialize @stack ...
我经常在网上用IM软件和别人讨论问题,有时非常需要用图形来交流。我不知道有没有一种类似于白板的软件,我在这边画图,他那边就能看到,而且我们能一起修改这个图形,就像是两个人在用一块白板一样。至少我是没找到合适的。 要是找不到的话只好自己做了。能做出能和GTalk互通的软件最好。查资料得知GTalk是采用的XMPP协议,Java有个程序库叫Smackr的实现了对XMPP的封装,估计有用。关键是图形数据的传输,大家觉得最好用什么方法?我感觉用SVG格式可能会比较简单,这样就都是使用XML了,而且Java里也有现成的SVG类库,batik。 在Java图形编程这一块本人知之甚少,主要应该考虑哪些问题? ...
引用题目:对现在的Stack(栈)数据结构进行改进,加一个min()功能,使之能在常数,即O(1),时间内给出栈中的最小值。可对push()和pop()函数进行修改,但要求其时间复杂度都只能是O(1)。 题目是在http://akalius.javaeye.com/blog/162156看到的,提供了两种方法。不幸的是第一种方法是错误的,第二种方法也不完全正确。都没有考虑到连续压入、弹出和有相同元素的情况。我用的方法是基于第一种的,即在push操作前先将要压入的数值和当前栈中的最小值“打包”成一个结点再压入,如果栈为空,则和自身一起打包。这样在弹出一个元素后,栈中的最小元素可直接由弹出的结点 ...
三门问题又叫蒙提霍尔问题。说的是在一个电视游戏中,参赛者面对三扇一模一样的关闭着的门,其中一扇门后面是汽车,另外两扇后面是山羊。参赛者选择了一扇门,但并没有打开;这时主持人开启了另外一扇门,后面是山羊。主持人问参赛者要不要换另外一扇关着的门。问题是:换另一扇门是否会增加参赛者赢得汽车的概率?注解(引自Wikipedia):Mueser和Granberg透过在主持人的行为身上加上明确的限制条件,提出了对这个问题的一种不含糊的陈述:参赛者在三扇门中挑选一扇。他并不知道内里有甚么。主持人知道每扇门后面有什么。主持人必须开启剩下的其中一扇门,并且必须提供换门的机会。主持人永远都会挑一扇有山羊的门。 如 ...
2008-02-16

几个免费的Scheme(Lisp)解释器

关键字: lisp scheme
Lisp是一个古老的函数式编程语言,Scheme则起源于MIT的一种Lisp方言。当前编程语言的一些特性,如尾递归、匿名函数、动态改变代码的功能等等,不少是受到了Lisp的启发。这里介绍几个能在Windows下使用的免费Scheme语言或Lisp语言的环境。DrScheme。这个是我一直在用的Scheme解释器,界面设计得既漂亮又方便。调试、括号匹配功能我也相当喜欢。而且带有大量的文档资料,如果英文够好,基本上就可以学会Scheme了。MIT-Scheme。这个是MIT为SICP(计算机程序的构造与解释)课程开发的Scheme环境。SICP是一本相当有名的教材,对计算原理讲得非常深入。书中采用 ...
看了一些关于建网站的论坛,里面常常见到“采集”这个词,今天终于明白了。郁闷…… 所谓的“采集”原来就是在自己的服务器上运行一个类似于搜索引挚爬虫的程序,设置好关键字,放出去让它在网上爬,把找到的内容统统下载到自己的服务器上,再发布到自己的网站。说白了这不和抄袭一样吗?说抄袭还轻了,手工复制粘贴虽然也常常侵权,但起码还算有所劳动。采集是自动化作业,几个小时就能抄下几十万的文章。 刚才在写一段C++程序时,忘了有关于Deque容器的一点东西,于是在Google里用“C++ deque”在中文网页里找。大家有兴趣可以试试,看看有多少个“深入研究C++中的STL Deque 容器”,或者干脆就用“深入 ...
Ruby声称自己是完全面向对象的语言,不像Java那样;当年Java也声称自己是完全面向对象的……总之,这样标榜自己显得不厚道。但Ruby在面向对象方面的确更加彻底,例如像1924这样的字面量都被认为是对象。 Ruby声称遵循“最小惊讶原则”,但实事上还是给我带来了不少的惊讶。在Ruby中,类(Class)的用法是相当灵活的。一个类的定义甚至是可以在程序运行时改变的,比如已经定义好一个MyClass类: class MyClass # code... end 如果事后需要在MyClass中添加一个方法,那么不必直接修改类的定义部分,只要在需要的地方写出来即可: class ...
观望Ruby也有几个月了吧,几个小时前我终于按捺不住,把Ruby安上了。里面带了个fxri,一个集成了Ruby解释器和文档的交互环境,感觉挺不错的。可以随时查阅文档,对于初学来说是个很好的设计。安装包还捆绑了SciTE编辑器,这个编辑器可是牛得很啊。很多人认为功能最强的编辑器是Emacs,但Emacs相当难用,而SciTE则把可定制性和易用性二者融合得很好。SciTE用好了是相当方便的,至于如何高效地使用SciTE,估计能写一本书了。最让人兴奋的是Ruby带的帮助文档居然是Programming Ruby的CHM电子版。一口气把Ruby.new一章看完了,对Ruby也有了初步的认识。因为以前写 ...
如果说Brainf-u-c-k语言只是难用的话,这个Whitespace可就很令人匪夷所思了。Whitespace只认三个空白字符:空格、Tab和换行,其他一切字符都当作注释来处理。以下翻译自Wikipedia。引用Whitespace是由Durham大学的Wdwin Brady和Chris Morris发明的,于2003年4月1日发布(和愚人节有关?)。和大多数语言通常忽略空白字符不同,Whitespace解释器忽略一切非空白字符。空格、Tab和换行是仅有的语法元素。这就带来了一个有趣的事实:一个Whitespace程序可以完美地嵌入进一个文章之中。Whitespace是一种命令式堆栈型语言 ...
证明存在这样的无理数a,b,使得为有理数。 几年前在一本书上看到过一个证明,印象特别深刻。 众所周知,是无理数。如果是有理数,则令,于是命题得证;如果不是有理数,则令,于是,2是有理数,命题得证。 评注:说是就是,不是也是。
我说的这种语言相当难,比机器语言都要难。Brainf-u-c-k,名字有点恶心……恶心到连JavaEye都逼着我在中间加上了连字符…… 我刚才仅仅用它写了个"Hello World",已经有些恶心了。 Brainf-u-c-k构造了一台假想的图灵机:一个长长的纸带(连续存储空间)和一个可以在上面移动的读写头(指针)。Brainf-u-c-k的代码仅仅由八种字符组成。 >: 将指针移到下一个单元; <: 将指针移到上一个单元; +: 当前单元的值自增一; -: 当前单元的值自减一; ,: 输入一个字节,存入当前单元; .: 输出当前单元的内容; [: 如果当前单元的内容为0,则跳转到与之 ...
效果:上面的公式是在BBCode下用[img]http://www.forkosh.dreamhost.com/mathtex.cgi?x_{1,2}=\frac{-b\pm\sqrt{b^2-4ac}}{2a}[/img]插入的。实际上就是一个图片,只不过这个图片是在forkosh的服务器上动态生成的。“?”后的内容是用LaTeX文本描述的数学公式。LaTeX是一个排版工具,特别擅长排版含有很多数学公式的文章。CTeX论坛是国内最大的LaTeX交流地。说着说着到了LaTeX,有点跑题。能看到公式的根本原因在于forkosh提供了公共的mathTeX服务。forkosh ...
ggggqqqqihc
搜索本博客
存档
最新评论