J语言的金字塔

来源:互联网 发布:链家要自己买端口么 编辑:程序博客网 时间:2024/05/01 08:45
http://projecteuler.net/ 是个好玩的地方,你可以当是做脑力体操,同时又可以见识很多牛人的编程技术。
区区解了30多道题,1/3用erlang,1/4用python,还有剩下的是用J解决的。。

最初到Project Euler去玩,纯粹是想练习一下erlang编程的。。其中有些题目,因为急躁,又想不出很方便的erlang解法,就祭起python来搞定了 (啊你问为什么我不用perl或者C++?因为区区最近项目中只使用了Python和Java啦,而你知道的,一般情况下,区区都只开emacs不用eclipse的)。。

由于使用的是emacs,可以很轻松地同时使用多个动态语言,所以后来很轻松地就搭起了J语言的练习buffer了。

到目前为此,有三个编程语言让在下非常头痛过:
C  ---- 中学时学这种东西没人指导,当然会头痛
Lisp ---- 或者说是scheme吧,老实说,虽然痛,但也挺有快感的说
J  ---- 这是APL的主要后继语言之一。看J手册,她说要用类似人类语言的方式来学习。这类事情区区可是有经验的,那些越说自己像人类语言的语言啊,陷阱就越是多(Lisp/Perl/Python/Ruby/TCL都在此列)。

忘了说明自己学J语言的原因了,故事是这样的:
区区尝试用erlang/python好容易写了十来行或者几十行的程序把一个问题解对了,解决了。再到那一题的论坛里看时,那些用APL/J/K的小样(好啦,牛人啦),就一下子丢个十几个字符或者几十个字符的程序也把问题解了,末了还不忘说一句:“诶,不好意思,俺这程序还是太长了,有空偶还是优化一下再说吧”。啊你说,这气不气人。

到真正了解一些J语言的底细之后,才明白,之所以APL/J/K这一系语言的程序那么短小精焊,完全归功于她们都使用特殊符号记法(notation)来表达计算过程,计算模式。

于是区区受了一段时间J语言的虐待,一直使用她来解Project Euler的问题,不过做题太功利,一直觉得没什么意思,直到某日翻看J Vocabulary时,发现可以用@.(Agenda)`(Tie)$:(Self-Reference)可以用来表达Scheme中的判断和递归。。。当时第一个在脑子中想到的程序是Factorial(很挫吧),但是这个程序实在是无聊啊,倒不如配合<(Box)写个图形化的Demo吧,,于是,,以后就有办法跟别人炫这个古怪的notation了。。。。




 <@<`($:@<:;<) @. * 10 NB. 递归输出金字塔的程序

J语言居然使用NB.作为注释的起始标志啊,真是够NB的。。