有点烦了,改个次序做题发博文。今天先发2.18
题目很简单 将列表反序。用clojure来写,还是有点不习惯。忽然想起来,以前面试遇到过面试题,要求用递归函数对数组反序。原来就是想考察这些内容。

因为源语言已经有提供reverse,我就偷懒改个简单的名rever ,上代码
- (defn rever [a]
- (defn item[l r]
- (if (= nil (first l)) r
- (item (rest l) (cons (first l) r))
- )
- )
- (item a nil)
- )
运行结果如下

确实挺挑战固有思维的。用了十多年的c系语言。很容易转不过来弯。
试着来个JavaScript版本吧,也是遵循上面的规范,逆序数组
- var x = [1,2,3,4];
- function rever(x)
- {
- var ret =[];
- return item(x ,ret);
- // return ret;
- }
-
- function item(l ,r)
- {
- if(l.length== 0)
- {
- return r;
- }else{
- var tmp = l.pop();
- return item(l, r.concat(tmp));
- }
- }
pop模仿的是first和rest的结果。但是concat做不到cons的效果。
cons是在列表的前部添加,concat是在列表的后部添加。这样代码的编写简单了很多。