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
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