有点烦了,改个次序做题发博文。今天先发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是在列表的后部添加。这样代码的编写简单了很多。