【问题标题】:Lazy.js based fibonacci to map Bacon.js interval?基于 Lazy.js 的斐波那契映射 Bacon.js 区间?
【发布时间】:2014-08-15 11:03:44
【问题描述】:

我有一个代码可以用lazy.js生成fib序列

var fibF = function()
{
  var seq = []; //build sequence array in this closure
  var f = function(n)
  {
    var val;
    if (n <= 1)
    {
      val = 1; // as the Fib definition in Math
    }
    else
    {
      val = seq[n - 2] + seq[n - 1]; // as the Fib definition in Math
    }
    seq[n] = val;
    return val;
  };
  return f;
}();

var fibSequence = _.generate(fibF);  


/*  just for test
var fib_1000 =
  fibSequence
  .take(1000)  
  .toArray();  

console.log(fib_1000); 
//[ 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,...........,4.346655768693743e+208 ]

*/

同时,我有一个定时器代码Bacon.js

var B = require('baconjs');

var timeSequence = B
      .interval(1000); //every second
     
timeSequence 
    .onValue(function() 
      {
        console.log(require('moment')().format('MMMM Do YYYY, h:mm:ss')); 
        // print timestamps every second
      }); 

那么,

我想把mapfibSequence改成timeSequence之类的

var mySequence = fibSequence.map(timeSequence);

var mySequence = timeSequence.map(fibSequence);

有可能吗?

如果有,请给我指路。

欢迎任何解决方法。

谢谢。

编辑工作代码:

//to simplify use Natrual, instead of Fib

var _ = require('lazy.js');
var __ = require('baconjs');

var natural = function(n)
{
  return n;
};

var _natural = _.generate(natural); //natural numbers
var __timer = __.interval(1000); //every second

var map_to__ = function(_seq, __seq)
{
  var it = _seq.getIterator();

  var sequence =
    __seq
    .map(function()
    {
      it.moveNext();
      return it.current();
    });

  return sequence;
};

var __mappedTimer = map_to__(_natural, __timer);

__mappedTimer
  .onValue(function(x)
  {
    console.log(x); // print every second
  });

【问题讨论】:

    标签: javascript node.js reactive-programming frp bacon.js


    【解决方案1】:

    我不确定这是否是 iterators 的预期用途,但它应该可以工作:

    var it = fibSequence.getIterator()
    var mySequence = timeSequence.map(function() {
        return it.moveNext() && it.current();
    });
    

    【讨论】:

    • 谢谢,我有点明白了,但还是不行,请看我的 Q 编辑。
    • 嗯,我已经在网上测试过了,它可以工作。您得到的具体错误是什么?
    • .onValue(function(x) ^ TypeError: Object object has no method 'onValue'
    • 所以,我认为mySequence 不是培根对象。
    • 正如我所说,I cannot reproduce(使用您的代码)。是的,你肯定还有其他事情做错了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-29
    • 1970-01-01
    • 2015-06-05
    • 2014-05-23
    • 2013-08-09
    • 2011-11-27
    • 2013-03-31
    相关资源
    最近更新 更多