FP是老的死掉的语言吗?不过最近在我脑子里活了起来。
以前没学过lambda,其实可以在本科教的,何必一定要研究生课,其实很简单,初中课程也可以。
(虽然我现在还不具体了解,~_~!),属于知道的就知道,不知道就不知道的问题吧。
几年前我还培训过公司新员工的java。有人交作业,好像是写在纸上的。
其中有一块是遍历一个list,然后对每个元素做一个相同的操作。
一般写法就是for循环里面写上操作。但是一个人他写的好像是for(func((list))之类的,
总之怎么写的不记得,作为人能看懂他是什么意思。但是也能明白他不会java。
更严重的是很可能连面向过程式和面向对象的编程都不了解。我无语了,觉得不是一句话
能把他教懂的问题了。无语是自己没想明白其中的奥妙。
但是事隔几年,我发现这样的语言也有阿,就是FP啊。那个人真是天才啊。
或者发明FP的人是白痴?
现在我发现可以自己用Java实现map, reduce, filter这三个基本的FP概念。
虽然我还没想到什么好方法来实现lambda.
下面是参考程序:
package neoe.fp;
import java.util.ArrayList;
import java.util.List;
public class Fp {
public static abstract class Func {
public abstract Object run(Object o);
}
public static abstract class Func2 {
public abstract Object run(Object o1, Object o2);
}
/** make a list, element is func(data's element) */
public static List map(List data, Func func) {
if (data == null) {
return null;
}
List res = new ArrayList();
for (Object o : data) {
res.add(func.run(o));
}
return res;
}
/**
* t also takes a function and a list. But unlike map, the function passed
* to filter returns a boolean value. If, and only if, the value is NOT
* NULL, the element is copied over to the new list
*/
public static List filter(List data, Func func) {
if (data == null) {
return null;
}
List res = new ArrayList();
for (Object o : data) {
if (null != func.run(o)) {
res.add(o);
}
}
return res;
}
/**
* the method takes not one but two arguments: the first argument is the
* current element of the list, the other is the result from the previous
* call of the function (if there was one).
*/
public static Object reduce(List data, Func2 func) {
if (data == null || data.size() < 2) {
return null;
}
Object res = data.get(0);
int size = data.size();
for (int i = 1; i < size; i++) {
res = func.run(res, data.get(i));
}
return res;
}
}
注:如果你看不懂就千万不要用它们。
-----
2006年8月21日星期一
2006年8月14日星期一
意义
在玩了两天的游戏后,我想起了生命的意义。有人玩了游戏后跳楼自杀的也有。
其实不玩游戏活着也许也没有好好考虑过活着的意义。玩过以后发现了意义的虚无。
也许有人一辈子也不会认真考虑这个问题。
RPG和SLG本质的区别在于非均衡性,RPG不是均衡的,但是可以比SLG更让人觉得有挑战性。
均衡的好比一盘象棋,但是可玩性不一定好,
不均衡的好比生活,好比三国志英杰传,不断有挑战,但都是作者安排好的。
生活的不均衡性,但是很可能不具有可玩性,挑战很可能是无法克服的障碍。
游戏中多挑战一次终于把不可能的变成的可能,顺利通关后会有很大满足感,
虽然看看时钟觉得怎么这么快都早上4点了。干别的事早就睡着了。而睡过四小时后
又可以开始玩了,一点不觉得累而感到饿的时候已经是很饿了。
周一就有点不想起床,要是周末反而睡不着。主要是要干的事情不同。
回过头来,穿上工作的服装,衬衫西裤皮鞋,坐堵车的公交车,回到
熟悉而又陌生的生活。会有一种重新认识的感觉。
晚上君临国际大厦的广场上陈列着这种名狗和名女人。
和女友一个星期没见面了,觉得性情变了,从火变成了平和。
2006年8月10日星期四
对应多国语言的程序
比如,一个已经做好的JSP网站,要对应中日英韩等多国语言, 怎么办呢?
我比较笨,考虑了两天, 终于想出了一个觉得比较实用的方法。
我甚至自己写了一个jsp2java的编译程序,httpserver也很早实现过了,
但是做servlet的时候,httpservletrequest, httpservletresponse的方法加上session就有好几十个,
让我断念。 而且用自己的servlet接口的话和sun的javax.servlet下的不同, 就很难兼容所有jsp,
这样就必须用固定的application server固定的开发方法,而不是通用的,这是很大的缺点。
所以我还是决定用jsp.
比如原来我有一个xxx.jsp
我把它复制成
cn_xxx.jsp
jp_xxx.jsp
en_xxx.jsp
ko_xxx.jsp
这些不同语言的jsp可以交给翻译者去翻译了。
而原来的xxx.jsp写成
<%@ include file="../common/getLang.inc" %><jsp:include page="<%=_lang+"_deptSelector.inc"%>"/>
而getLang.inc为:
<%@page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%><%
String _lang = (String) request.getSession().getAttribute("_lang");
if (_lang==null){
_lang=DEFLAUT_LANG;
request.getSession().setAttribute("_lang", _lang);
}
%>
这些工作都是写程序来批量完成的。
还有一点是把??_xxx.jsp里的include全部替换成??_yyy.jsp, 这个也是写程序自动完成的。
其实电脑很多在服务于网站,而网站的页面就是模版替换而已。
jsp, asp, php, python web,就是相似的道理。
把代码嵌在网页里和把网页嵌在代码里,从理论上是同样的,但是这正是实际上
jsp存在的意义。所以理论上计算机都是1和0的演算,但是实际上就是丰富多彩的程序。
也许进步就在这一点点不同上吧!
而大尺寸的文件下载就不仅仅是模版替换,不是先生成后传输,
而是从读文件到写到最终socket直线型的。不然下载2GB的文件肯定会内存溢出。
我发现我太傻了,竟然没去学python,而学精python必须有C的基础。
等到问题出现的时候我才觉得,如果精通python的话是不是会把问题的实现
简单一些呢。 听说google就用了很多的python。
当然java的地位一时不会被python取代。或者进入一个语言只是一种语言的语言无关论。
--真的猛士勇于微笑的面对惨淡的现实。
-----
我比较笨,考虑了两天, 终于想出了一个觉得比较实用的方法。
我甚至自己写了一个jsp2java的编译程序,httpserver也很早实现过了,
但是做servlet的时候,httpservletrequest, httpservletresponse的方法加上session就有好几十个,
让我断念。 而且用自己的servlet接口的话和sun的javax.servlet下的不同, 就很难兼容所有jsp,
这样就必须用固定的application server固定的开发方法,而不是通用的,这是很大的缺点。
所以我还是决定用jsp.
比如原来我有一个xxx.jsp
我把它复制成
cn_xxx.jsp
jp_xxx.jsp
en_xxx.jsp
ko_xxx.jsp
这些不同语言的jsp可以交给翻译者去翻译了。
而原来的xxx.jsp写成
<%@ include file="../common/getLang.inc" %><jsp:include page="<%=_lang+"_deptSelector.inc"%>"/>
而getLang.inc为:
<%@page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%><%
String _lang = (String) request.getSession().getAttribute("_lang");
if (_lang==null){
_lang=DEFLAUT_LANG;
request.getSession().setAttribute("_lang", _lang);
}
%>
这些工作都是写程序来批量完成的。
还有一点是把??_xxx.jsp里的include全部替换成??_yyy.jsp, 这个也是写程序自动完成的。
其实电脑很多在服务于网站,而网站的页面就是模版替换而已。
jsp, asp, php, python web,就是相似的道理。
把代码嵌在网页里和把网页嵌在代码里,从理论上是同样的,但是这正是实际上
jsp存在的意义。所以理论上计算机都是1和0的演算,但是实际上就是丰富多彩的程序。
也许进步就在这一点点不同上吧!
而大尺寸的文件下载就不仅仅是模版替换,不是先生成后传输,
而是从读文件到写到最终socket直线型的。不然下载2GB的文件肯定会内存溢出。
我发现我太傻了,竟然没去学python,而学精python必须有C的基础。
等到问题出现的时候我才觉得,如果精通python的话是不是会把问题的实现
简单一些呢。 听说google就用了很多的python。
当然java的地位一时不会被python取代。或者进入一个语言只是一种语言的语言无关论。
--真的猛士勇于微笑的面对惨淡的现实。
-----
2006年8月7日星期一
迷信 - 抽血和迷信
我其实还是有点崇拜血的,所以听说古代欧洲抽血治病的事也觉得似乎有道理。
你看美国华盛顿总理,应该是比较英明的人,总不见的是没见识的糊涂虫,
他也死于抽血治疗。
所以我想现在我年龄大了,对事物有了看法,但是很多说不出个明确的道理,
也是一种迷信吧。
想到自己迷信着,会做错很多事,可能是影响一生的错误。于是觉得自己应该理智一些。
不要太自信。敢于怀疑。
现在很多事无法评判好坏对错,没有人也没有坐标可以评判,所以自己应该多自省。
-----
你看美国华盛顿总理,应该是比较英明的人,总不见的是没见识的糊涂虫,
他也死于抽血治疗。
所以我想现在我年龄大了,对事物有了看法,但是很多说不出个明确的道理,
也是一种迷信吧。
想到自己迷信着,会做错很多事,可能是影响一生的错误。于是觉得自己应该理智一些。
不要太自信。敢于怀疑。
现在很多事无法评判好坏对错,没有人也没有坐标可以评判,所以自己应该多自省。
-----
订阅:
评论 (Atom)