module Kernel

Public Instance Methods

binop_streams(op, stream1, stream2) click to toggle source
# File lib/lab42/stream/kernel.rb, line 5
def binop_streams op, stream1, stream2
  combine_streams stream1, stream2 do |e1, e2|
    e1.send op, e2
  end
end
combine_streams(stream, *streams_and_ops, &operation) click to toggle source
# File lib/lab42/stream/kernel.rb, line 11
def combine_streams stream, *streams_and_ops, &operation
  stream.combine( *streams_and_ops, &operation )
end
cons_stream(head, &tail) click to toggle source
# File lib/lab42/stream/kernel.rb, line 15
def cons_stream head, &tail
  Lab42::Stream.new head, tail
end
cons_stream_n(first_head, *more_heads, &tail) click to toggle source
# File lib/lab42/stream/kernel.rb, line 19
def cons_stream_n first_head, *more_heads, &tail
  return cons_stream( first_head, &tail ) if more_heads.empty?
  return cons_stream( first_head ){
    cons_stream_n( *more_heads, &tail )
  }
end
const_stream(const) click to toggle source
# File lib/lab42/stream/kernel.rb, line 26
def const_stream const
  c = cons_stream( const ){ c }
end
cyclic_stream(*args) click to toggle source
# File lib/lab42/stream/kernel.rb, line 30
def cyclic_stream *args
  args = args.first if
  args.size == 1 && Enumerable === args.first

  finite_stream( args ).make_cyclic
end
empty_stream() click to toggle source
# File lib/lab42/stream/empty.rb, line 54
def empty_stream; Empty.new end
false() click to toggle source
# File lib/lab42/stream/kernel/extensions.rb, line 4
def false; false end
finite_stream(enum) click to toggle source
# File lib/lab42/stream/kernel.rb, line 37
def finite_stream enum
  case enum
  when Range
    _finite_stream_from_range enum
  when Array
    return empty_stream if enum.empty?
    cons_stream(enum.first){ finite_stream(enum.drop(1)) }
  when Hash
    return empty_stream if enum.empty?
    cons_stream(enum.first){ finite_stream(enum.without(enum.first.first)) }
  when Enumerator
    _finite_stream_from_enumerator! enum.to_enum
  else
    raise TypeError, "cannot create a finite stream from type #{enum.class.inspect}"
  end
end
flatmap(stream, *args, &blk) click to toggle source
# File lib/lab42/stream/kernel.rb, line 55
def flatmap stream, *args, &blk
  stream.flatmap( *args, &blk )
end
iterate(*args, &blk) click to toggle source
# File lib/lab42/stream/auto_import.rb, line 7
def iterate *args, &blk
  Stream.iterate( *args, &blk )
end
Also aliased as: stream_by, stream_by
iterate_without_block(args) click to toggle source
# File lib/lab42/stream/kernel.rb, line 81
def iterate_without_block args
  rest = args.drop 1
  if rest.first && rest.first.respond_to?( :call )
    cons_stream( args.first ){ iterate( rest.first.(*([args.first] + rest.drop(1))), *rest ) }
  else
    cons_stream( args.first ){ iterate( args.first.send(*rest), *rest ) }
  end
end
merge_streams(*streams) click to toggle source
# File lib/lab42/stream/kernel.rb, line 59
def merge_streams *streams
  s = streams.reject( &:empty? )
  return empty_stream if s.empty?
  cons_stream s.first.head do
    merge_streams(*(s.drop(1) + [s.first.tail]))
  end
end
merge_streams_by(*streams_and_beh, &blk) click to toggle source
# File lib/lab42/stream/kernel.rb, line 67
def merge_streams_by *streams_and_beh, &blk
  beh = Lab42::Stream::Behavior.make1( blk || streams_and_beh.pop, &blk )
  __merge_streams_by__ beh, streams_and_beh
end
nil() click to toggle source
# File lib/lab42/stream/kernel/extensions.rb, line 5
def nil; nil end
self() click to toggle source
# File lib/lab42/stream/kernel/extensions.rb, line 6
def self; self end
stream_by(*args, &blk)
Alias for: iterate
true() click to toggle source
# File lib/lab42/stream/kernel/extensions.rb, line 3
def true; true end

Private Instance Methods

__merge_streams_by__(beh, streams) click to toggle source
# File lib/lab42/stream/kernel.rb, line 110
def __merge_streams_by__ beh, streams
  still_there = streams.reject( &:empty? )
  return empty_stream if still_there.empty?
  __merge_streams_by_with_present__ beh, still_there
end
__merge_streams_by_with_present__(beh, still_there) click to toggle source
# File lib/lab42/stream/kernel.rb, line 116
def __merge_streams_by_with_present__ beh, still_there
  ordered_heads = still_there
  .map( &:head )
  .ordered_by( beh )

  cons_stream_n( *ordered_heads ){
    __merge_streams_by__ beh, still_there.map( &:tail )
  }
end
_finite_stream_from_boundaies(fst, lst) click to toggle source
# File lib/lab42/stream/kernel.rb, line 92
def _finite_stream_from_boundaies fst, lst
  return empty_stream if fst > lst 
  cons_stream(fst){ _finite_stream_from_boundaies fst.succ, lst }
end
_finite_stream_from_enumerator!(enum) click to toggle source
# File lib/lab42/stream/kernel.rb, line 97
def _finite_stream_from_enumerator! enum
  cons_stream( enum.next ){ _finite_stream_from_enumerator! enum }
rescue StopIteration
  empty_stream
end
_finite_stream_from_range(range) click to toggle source
# File lib/lab42/stream/kernel.rb, line 103
def _finite_stream_from_range range
  fst = range.first
  lst = range.last
  lst = lst.pred if range.exclude_end?
  _finite_stream_from_boundaies fst, lst
end