class Frypan::Signal::Foldp

Public Class Methods

new(init_state, *arg_signals, &proc) click to toggle source
# File lib/frypan.rb, line 178
def initialize(init_state, *arg_signals, &proc)
  @init_state, @arg_signals, @proc = init_state, arg_signals, proc
end

Public Instance Methods

__calc(memo0, memo1, memo2) click to toggle source
# File lib/frypan.rb, line 186
def __calc(memo0, memo1, memo2)
  if __same(memo1, memo2) && @arg_signals.all?{|sig| sig.__same(memo0, memo1)}
    memo0.merge(self => memo1[self])
  else
    state = memo1.has_key?(self) ? memo1[self] : @init_state
    memo0.merge(self => @proc.call(state, *@arg_signals.map{|sig| memo0[sig]}))
  end
end
__pull_deps(memo0, memo1, memo2) click to toggle source
# File lib/frypan.rb, line 182
def __pull_deps(memo0, memo1, memo2)
  @arg_signals.inject(memo0){|acc, sig| sig.__pull(acc, memo1, memo2)}
end