习题2.31

打印 上一主题 下一主题

主题 863|帖子 863|积分 2589

先上代码
  1. (defn square [x](* x x))
  2. (defn square-tree[tree]
  3.   (tree-map square tree)
  4. )
  5. (defn tree-map [op tree]
  6.    (cond (not (seq? tree)) (op tree)
  7.        (empty? tree) nil
  8.        :else (cons (tree-map op (first tree))  (tree-map op (rest tree))
  9.         )
  10.   )
  11. )
复制代码
标题实际上是想让我们将树的遍历与平方操作分脱离,以方便我们实现树的其他操作,好比立方,自加之类的操作。
标题标难点是理解op参数应该在什么时间调用。理解透以后这个题就非常简单。
对比下原来的做法,实际上就是在原来代码中(square tree) 变成(op tree),其他部分没有变化。
相当于将方法以参数的情势传递给方法内部,并在适当的时间调用。这也是函数式编程中经常提及的高阶函数的用法。为背面解释高阶函数做铺垫。
  1. (defn square-tree[tree]
  2.   (cond (not (seq? tree)) (square tree)
  3.        (empty? tree) nil
  4.        :else (cons (square-tree (first tree))  (square-tree (rest tree))
  5.         )
  6.   )
  7. )
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

去皮卡多

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表