第5章雄辩的Java示例:高阶函数

时间:2015-11-12 20:12:54

标签: javascript higher-order-functions

我正在创建"Eloquent Javascript: Higher Order Functions example"的副本,因为我觉得这个问题得不到满意的答案。在以下代码中,fromMother和fromFather的实际值来自何处。我可以追溯到f指定值的位置,但为什么这些值不为零?当递归调用到达最老的一代时,母亲和父亲将被分配默认值0,对吧?那么,(0 + 0)/ 2 = 0.我知道我错过了什么,但我不确定是什么。

 function reduceAncestors(person, f, defaultValue) {
    function valueFor(person) {
      if (person == null)
        return defaultValue;
      else
        return f(person, valueFor(byName[person.mother]),
                       valueFor(byName[person.father]));
  }
    return valueFor(person);
  }


  function sharedDNA(person, fromMother, fromFather) {
    if (person.name == "Pauwels van Haverbeke")
      return 1;
    else
      return (fromMother + fromFather) / 2;
  }
  var ph = byName["Philibert Haverbeke"];
  console.log(reduceAncestors(ph, sharedDNA, 0) / 4);
  // → 0.00049

0 个答案:

没有答案