随笔分类 - Seven Languages In Seven Weeks
摘要:找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...
阅读全文
摘要:到第六门语言了。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 ...
阅读全文
摘要:Erlang的重头戏来了--并发。还记得那句让人记忆深刻的话么:“就让他崩溃吧”。找可以在进程终止时重启它的OTP服务。在Erlang Doc 中可以看到OTP监督行为(Supervisor Behaviour)中的3种重启策略(Restart Strategy),翻译如下:one_for_one如果一个子进程终止了,那么只有那个终止的进程会被重启。one_for_all如果一个子进程终止了,那么所有同一级别的子进程都会被终止并且重启(包含那个终止的子进程)。rest_for_one如果一个子进程终止了,那么子进程集合中的“rest”部分--如终止的子进程之后的进程都会都会被终止并且重启。当然
阅读全文
摘要:虽然在前一天就已经“提前”用过了一些控制结构,但毕竟还是半生不熟的。控制结构、匿名函数、迭代、映射、过滤、列表解析等等,这一天的内容真够丰富的,没有做附加题,原因是Tic Tac Toe真的是被做烂了:| (PS:并发又在最后一天。。)考虑包含键-值元组的列表,如[{erlang, "a functional language"}, {ruby, "an OO language"}]。写一个函数,接受列表和键为参数,返回该键对应的值。这很简单,只要读入一个Hash表并获取需要查询的Key就可以查得其对应的Value了。-module(day2_hw1).
阅读全文
摘要:相比之前的几门语言,对于Erlang来说更有一种“久闻Erlang大名,今日终得一见”的感觉。刚知道Erlang原来是是Ercisson Language的缩写。 这一天其实没有介绍很多,很多内容(HW中的)都需要从doc或者Google找到;当然,还没有接触到Erlang的核心内容Concurrency呢。 Erlang官网:erlang.org Erlang/OTP函数库的官方文档:erlang.org/doc 写一个函数,用递归返回字符串中的单词数。 ...
阅读全文
摘要:这一天的内容还是比较丰富的,不仅介绍了Scala中的对于XML的处理、正则,更有比较重要的“并发”。Scala支持并发的方式代表了并行编程领域的一次重大进步。actor模型和线程池都是很受欢迎的改进,并且无需可变状态的并发应用设计能力也绝对是一个巨大的进步。--摘自《七周七语言》对于sizer程序,如果你没有为每一个要跟踪的链接创建一个新的actor,这段程序的性能会发生怎样的变化?感觉会很慢,因为每个actor都包含了react和receive方法,如果没有对于每个链接都创建actor的话,那和sequentially的方法就没有什么区别了。修改sizer程序,增加一个计算页面上链接总和的消
阅读全文
摘要:这天的内容给人印象最深的就是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"
阅读全文
摘要:之前由于期末考试各种预习、复习所以在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
阅读全文
摘要:第三天Prolog真是一位解题高手,Sudoku是我非常喜欢的一个游戏,Programming Logically!不过对于不熟悉Prolog谓词的而言,又成了一个比较头疼所事,如果不告诉我可以用fd_all_difference来判断一个列表中元素没有重复值,真的不会想到用“谓词”。其实觉得用Prolog来解决一下AI问题是很有用的,比如做一个棋类游戏的AI,告诉Prolog规则,恐怕就能将我击败:-| 先找了一下Prolog的输出谓词: geto(X) 如 X与输入流中的下一个字符匹配,则目标成功。 get(X) 如 X与输入流中的下一个打印字符匹配,则目标成功 skip(X...
阅读全文
摘要:发现了一个有趣的事,在用我的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
阅读全文
摘要:第一天看到‘地图着色’那个例子的时候觉得prolog这下牛逼了……的确,只要通过描述的事实,就能将其填色 :)这里介绍一下怎么用prolog来解地图填色问题:在prolog中,只需要描述颜色的种类、以及各个区域的接壤问题即可。different(red, green).different(red, blue).different(green, red).different(green, blue).different(blue, red).different(blue, green).coloring(Alabama, Mississippi, Georgia, Tennessee, Flor
阅读全文
摘要:第三天做改进本节生成的XML程序,增加空格以显示缩进结构。Builder := Object cloneBuilder depth ::= 0Builder forward := method( #depth ::= 0 prefix := (" " repeated (self depth)) writeln(prefix, "<", call message name, ">") #depth = (depth +1) self setDepth(self depth + 1) call message argumen
阅读全文
摘要:第二天今天做这些花了几乎一个下午……主要原因是要查iolanguage.org上的文档,而且那个文档不知道为什么不能搜索 :( 这“一天”的内容,关于Io的控制语句、文件IO、错误处理、列表都有涉及。个人比较喜欢的是Io的控制语句,写在一个()里,没有else,条件、语句都用一个comma隔开的感觉很不错;有点不理解的是关于Io的消息机制和反射,虽然书上的例子举的比较清楚,可是还是觉得将其称之为“反射”比较不习惯;再者,关于原型和对象的关系,感觉就是类的继承(?!)……好吧,学习一门语言的过程还是挺欢乐的~计算fibonacci数列 #循环的方法array := List clonearray
阅读全文
摘要:关于Io programming language起初看到Io这两个字母的时候,的确觉得比较奇怪,因为为世人所熟知的Io也即Input/output(还记得那门IO系统课……那神奇的汇编)。关于Io的资料比较少,当然,Io有他风格简洁(btw, 字好小)的官网:iolanguage.org。Io的源代码托管在Github上,star一下表示关注 : )另外有关Io的history以及特性介绍可以参照wikipedia:Io(programming language)第一天答对1+1求值,然后对1+"one"求值。Io是强类型还是弱类型?用代码验证。 Io> 1+&qu
阅读全文
摘要:第二天找Ruby用代码块和不用代码块读取文件的方法,用代码块有什么好处?用代码块读取文件的方法:File.open("text.txt") do |f| puts f.getsend不用代码块读取文件的方法:f = File.new("text.txt","r")puts f.getsf.close使用代码块,是一种用来打开一个单独文件的方法,而且可以在一个地方(代码块内)对该文件进行操作。相比与不用代码块而言,使用代码块显得比较干净利落。如何把散列表转换成数组?数组能转换成散列表吗?散列表转换成数组:hash.to_a #其中每个元
阅读全文
摘要:第一天找Ruby API 文档:http://ruby-doc.org/core-1.9.3/Programming Ruby: The Pragmatic Programmer's Guide [TFH08]的免费在线版本:http://www.ruby-doc.org/docs/ProgrammingRuby/替换字符串某一部分的方法:替换一次:"Hello World".sub('World','Ruby')=> Hello Ruby 替换所有:"This is not right".gsub('
阅读全文

浙公网安备 33010602011771号