习题2.18

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

你可能感兴趣的:(计算机程序的构造课后题,clojure)