Module: Kernel

Defined in:
lib/lab42/stream/empty.rb,
lib/lab42/stream/kernel.rb,
lib/lab42/stream/auto_import.rb,
lib/lab42/stream/kernel/extensions.rb

Overview

class Empty

Instance Method Summary collapse

Instance Method Details

#binop_streams(op, stream1, stream2) ⇒ Object



5
6
7
8
9
# 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) ⇒ Object



11
12
13
# 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) ⇒ Object



15
16
17
# 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) ⇒ Object



19
20
21
22
23
24
# 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) ⇒ Object



26
27
28
# File 'lib/lab42/stream/kernel.rb', line 26

def const_stream const
  c = cons_stream( const ){ c }
end

#cyclic_stream(*args) ⇒ Object



30
31
32
33
34
35
# 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_streamObject



54
# File 'lib/lab42/stream/empty.rb', line 54

def empty_stream; Empty.new end

#falseObject



4
# File 'lib/lab42/stream/kernel/extensions.rb', line 4

def false; false end

#finite_stream(enum) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# 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) ⇒ Object



55
56
57
# File 'lib/lab42/stream/kernel.rb', line 55

def flatmap stream, *args, &blk
  stream.flatmap( *args, &blk )
end

#iterate(*args, &blk) ⇒ Object Also known as: stream_by



72
73
74
75
76
77
78
# File 'lib/lab42/stream/kernel.rb', line 72

def iterate *args, &blk
  if blk
    cons_stream(*args){ iterate( blk.(*args), &blk ) }
  else
    iterate_without_block args
  end
end

#iterate_without_block(args) ⇒ Object



81
82
83
84
85
86
87
88
# 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) ⇒ Object



59
60
61
62
63
64
65
# 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) ⇒ Object



67
68
69
70
# 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

#nilObject



5
# File 'lib/lab42/stream/kernel/extensions.rb', line 5

def nil; nil end

#selfObject



6
# File 'lib/lab42/stream/kernel/extensions.rb', line 6

def self; self end

#trueObject



3
# File 'lib/lab42/stream/kernel/extensions.rb', line 3

def true; true end