A consumer can request only part of a producer's sequence.

consumer The consumer decides how many produced values it needs before stopping.

Consumer Request

requested
consumer_request.lua
Replay: real traced execution (multi-file project)
local requested = 2
local consumed = 0
local lastItem = ""

for item = 1, 3 do
  if consumed < requested then
    consumed = consumed + 1
    lastItem = "item" .. item
  end
end

print("requested=" .. requested)
print("consumed=" .. consumed)
print("lastItem=" .. lastItem)
local requested = 1
local consumed = 0
local lastItem = ""

for item = 1, 3 do
  if consumed < requested then
    consumed = consumed + 1
    lastItem = "item" .. item
  end
end

print("requested=" .. requested)
print("consumed=" .. consumed)
print("lastItem=" .. lastItem)
local requested = 3
local consumed = 0
local lastItem = ""

for item = 1, 3 do
  if consumed < requested then
    consumed = consumed + 1
    lastItem = "item" .. item
  end
end

print("requested=" .. requested)
print("consumed=" .. consumed)
print("lastItem=" .. lastItem)
  1. requested ← 2, consumed ← 0, lastItem ← (empty)

    1local requested→ 2 = 2 --@requested=1, 32local consumed→ 0 = 03local lastItem→ (empty) = ""
  2. item = 1, 3 do

    pass 1 of 3
    5for item1 = 1, 3 do6  if consumed < requested then7    consumed = consumed + 1
    All 3 passes — pass 1 is the card above
    passitemrequestedconsumedlastItem
    1120 1item1
    2221 2item2
    33
  3. consumed ← 1, lastItem ← item1

    pass 1 of 2
    5for item = 1, 3 do6  if consumed0 < requested2 then7    consumed→ 1 = consumed + 18    lastItem→ item1 = "item" .. item19  end
  4. consumed ← 2, lastItem ← item2

    pass 2 of 2
    5for item = 1, 3 do6  if consumed1 < requested2 then7    consumed→ 2 = consumed + 18    lastItem→ item2 = "item" .. item29  end
  5. print("requested=" .. requested)

    12print("requested=" .. requested2)13print("consumed=" .. consumed2)14print("lastItem=" .. lastItemitem2)
    outputrequested=2
    consumed=2
    lastItem=item2
  1. requested ← 1, consumed ← 0, lastItem ← (empty)

    1local requested→ 1 = 12local consumed→ 0 = 03local lastItem→ (empty) = ""
  2. item = 1, 3 do

    pass 1 of 3
    5for item1 = 1, 3 do6  if consumed < requested then7    consumed = consumed + 1
    All 3 passes — pass 1 is the card above
    passitemrequestedconsumedlastItem
    1110 1item1
    22
    33
  3. consumed ← 1, lastItem ← item1

    5for item = 1, 3 do6  if consumed0 < requested1 then7    consumed→ 1 = consumed + 18    lastItem→ item1 = "item" .. item19  end
  4. print("requested=" .. requested)

    12print("requested=" .. requested1)13print("consumed=" .. consumed1)14print("lastItem=" .. lastItemitem1)
    outputrequested=1
    consumed=1
    lastItem=item1
  1. requested ← 3, consumed ← 0, lastItem ← (empty)

    1local requested→ 3 = 32local consumed→ 0 = 03local lastItem→ (empty) = ""
  2. item = 1, 3 do

    pass 1 of 3
    5for item1 = 1, 3 do6  if consumed < requested then7    consumed = consumed + 1
    All 3 passes — pass 1 is the card above
    passitem
    11
    22
    33
  3. consumed ← 1, lastItem ← item1

    pass 1 of 3
    5for item = 1, 3 do6  if consumed0 < requested3 then7    consumed→ 1 = consumed + 18    lastItem→ item1 = "item" .. item19  end
    All 3 passes — pass 1 is the card above
    passitemconsumedlastItem
    110 1item1
    221 2item2
    332 3item3
  4. print("requested=" .. requested)

    12print("requested=" .. requested3)13print("consumed=" .. consumed3)14print("lastItem=" .. lastItemitem3)
    outputrequested=3
    consumed=3
    lastItem=item3