摘要: 找Clojure中一些常用宏的实现可以在GitHub中找到一些常用宏的实现一个自定义延迟序列的例子看到这么个例子:(defn recur-fibo [n] (letfn [(fib [current next n] (if (zero? n) current (recur next (+ current next) (dec n))))] (fib 0 1 n))) 使用LazySeq后:(defn lazy-seq-fibo ([] (concat [0 1] (lazy-seq-fibo 0 1))) ([a b] (let [n (+ a b)] (lazy-s... 阅读全文
posted @ 2013-01-31 21:26 冰激淋 阅读(342) 评论(0) 推荐(0) 编辑
摘要: 到第六门语言了。Clojure是JVM上的Lisp实现,这是很让人振奋的。Clojure的安装比之前的几门语言都要复杂,因为需要使用额外的leiningen工具,在Ubuntu 12.04下可以使用 sudo apt-get install leiningen 安装。如果是其他版本或者GNU/Linux发行版可能需要通过项目主页上提供的脚本进行安装。 需要通过lein repl 启动Clojure的交互式解释器(可能需要一段等待的时间)。Clojure序列的例子(via OCIWEB) What does the following code ... 阅读全文
posted @ 2013-01-29 20:32 冰激淋 阅读(338) 评论(0) 推荐(0) 编辑
摘要: Erlang的重头戏来了--并发。还记得那句让人记忆深刻的话么:“就让他崩溃吧”。找可以在进程终止时重启它的OTP服务。在Erlang Doc 中可以看到OTP监督行为(Supervisor Behaviour)中的3种重启策略(Restart Strategy),翻译如下:one_for_one如果一个子进程终止了,那么只有那个终止的进程会被重启。one_for_all如果一个子进程终止了,那么所有同一级别的子进程都会被终止并且重启(包含那个终止的子进程)。rest_for_one如果一个子进程终止了,那么子进程集合中的“rest”部分--如终止的子进程之后的进程都会都会被终止并且重启。当然 阅读全文
posted @ 2013-01-28 16:44 冰激淋 阅读(401) 评论(0) 推荐(0) 编辑
摘要: 虽然在前一天就已经“提前”用过了一些控制结构,但毕竟还是半生不熟的。控制结构、匿名函数、迭代、映射、过滤、列表解析等等,这一天的内容真够丰富的,没有做附加题,原因是Tic Tac Toe真的是被做烂了:| (PS:并发又在最后一天。。)考虑包含键-值元组的列表,如[{erlang, "a functional language"}, {ruby, "an OO language"}]。写一个函数,接受列表和键为参数,返回该键对应的值。这很简单,只要读入一个Hash表并获取需要查询的Key就可以查得其对应的Value了。-module(day2_hw1). 阅读全文
posted @ 2013-01-26 21:40 冰激淋 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 相比之前的几门语言,对于Erlang来说更有一种“久闻Erlang大名,今日终得一见”的感觉。刚知道Erlang原来是是Ercisson Language的缩写。 这一天其实没有介绍很多,很多内容(HW中的)都需要从doc或者Google找到;当然,还没有接触到Erlang的核心内容Concurrency呢。 Erlang官网:erlang.org Erlang/OTP函数库的官方文档:erlang.org/doc 写一个函数,用递归返回字符串中的单词数。 ... 阅读全文
posted @ 2013-01-25 21:51 冰激淋 阅读(427) 评论(0) 推荐(0) 编辑
摘要: 这一天的内容还是比较丰富的,不仅介绍了Scala中的对于XML的处理、正则,更有比较重要的“并发”。Scala支持并发的方式代表了并行编程领域的一次重大进步。actor模型和线程池都是很受欢迎的改进,并且无需可变状态的并发应用设计能力也绝对是一个巨大的进步。--摘自《七周七语言》对于sizer程序,如果你没有为每一个要跟踪的链接创建一个新的actor,这段程序的性能会发生怎样的变化?感觉会很慢,因为每个actor都包含了react和receive方法,如果没有对于每个链接都创建actor的话,那和sequentially的方法就没有什么区别了。修改sizer程序,增加一个计算页面上链接总和的消 阅读全文
posted @ 2013-01-23 14:34 冰激淋 阅读(266) 评论(0) 推荐(0) 编辑
摘要: 这天的内容给人印象最深的就是foldLeft这玩意儿,用起来就知道;读写文件感觉和Java很相似:-D关于如何使用Scala文件的讨论Scala可以使用所有的Java的对象,所以,java.io.File就可以被用来在Scala中读写文件。例如将“Hello,Scala”写进文件:import java.io.*object Test { def main(args: Array[String]) { val writer = new PrintWriter(new File("test.txt")) writer.write("Hello Scala" 阅读全文
posted @ 2013-01-21 20:36 冰激淋 阅读(434) 评论(0) 推荐(0) 编辑
摘要: 之前由于期末考试各种预习、复习所以在Prolog之后停顿了好久,寒假开始又有时间可以慢慢看书了:)Scala 是一门基于JVM的静态类型语言,支持面向对象和函数式编程,twitter在前几年也从Ruby转向了Scala,Scala的效率可见一斑。整个过程下来感觉Scala和Java还是有比较大的区别的(具体可以看下文以及附带的链接)。最后完成了一个可以玩的tic-tac-toe,由于对Scala的不熟悉,还是耽搁了一段时间。Scala的APIhttp://www.scala-lang.org/node/216对比Java和Scala联系:Scala有着和Java相同的编译模型并且可以调用Jav 阅读全文
posted @ 2013-01-19 21:55 冰激淋 阅读(461) 评论(0) 推荐(0) 编辑
摘要: 第三天Prolog真是一位解题高手,Sudoku是我非常喜欢的一个游戏,Programming Logically!不过对于不熟悉Prolog谓词的而言,又成了一个比较头疼所事,如果不告诉我可以用fd_all_difference来判断一个列表中元素没有重复值,真的不会想到用“谓词”。其实觉得用Prolog来解决一下AI问题是很有用的,比如做一个棋类游戏的AI,告诉Prolog规则,恐怕就能将我击败:-| 先找了一下Prolog的输出谓词: geto(X) 如 X与输入流中的下一个字符匹配,则目标成功。 get(X) 如 X与输入流中的下一个打印字符匹配,则目标成功 skip(X... 阅读全文
posted @ 2012-12-26 16:28 冰激淋 阅读(520) 评论(0) 推荐(0) 编辑
摘要: 发现了一个有趣的事,在用我的vim编辑Prolog程序的时候, 是默认将其用Perl的高亮进行处理的。(UPDATE: 发现.pl的确是unix/perl的后缀,.pro才是正确的prolog程序后缀名)做翻转一个列表中的元素次序由于Head表示的就是列表中的第一个元素,而Tail表示的列表中剩余的几个元素,那么要翻转列表中的元素次序,就先将Head取出并将其放入翻转的列表之中,并对此进行递归操作。%-- 给定几个翻转列表的事实reserve([], []).reserve([a],[a]).reserve([a,b,c], [c,b,a]).reserve(List, ReserveList 阅读全文
posted @ 2012-12-24 22:28 冰激淋 阅读(390) 评论(0) 推荐(0) 编辑