📖 Scenario: Imagine you want to create a never-ending list of numbers that you can use one by one, like counting forever. This is useful when you want to generate numbers on demand without storing them all at once.
🎯 Goal: You will build a Kotlin program that creates an infinite sequence of numbers starting from 1 and then prints the first 10 numbers from it.
📋 What You'll Learn
Create an infinite sequence starting at 1
Use a variable to hold the starting number
Generate the sequence using Kotlin's generateSequence function
Print the first 10 numbers from the sequence
💡 Why This Matters
🌍 Real World
Infinite sequences help when you want to generate data on demand without using too much memory, like counting events or generating IDs.
💼 Career
Understanding sequences and lazy evaluation is useful for jobs involving data streams, reactive programming, or efficient data processing.
Progress0 / 4 steps
1
Create the starting number
Create a variable called start and set it to 1.
Kotlin
Hint
Use val to create a variable that does not change.
2
Create an infinite sequence starting from start
Create a variable called numbers and assign it an infinite sequence starting from start using generateSequence that adds 1 to the previous number.
Kotlin
Hint
Use generateSequence(start) { it + 1 } to create the sequence.
3
Take the first 10 numbers from the sequence
Create a variable called firstTen and assign it the first 10 numbers from numbers using the take(10) function.
Kotlin
Hint
Use take(10) to get the first 10 items from the sequence.
4
Print the first 10 numbers
Use println to print firstTen.toList() so the numbers show as a list.
Kotlin
Hint
Convert the sequence to a list before printing to see all numbers.
Practice
(1/5)
1. What does an infinite sequence in Kotlin do? sequence { yield(1); yieldAll(generateSequence(2) { it + 1 }) }
easy
A. Generates only the first two numbers and stops
B. Creates a fixed list of numbers from 1 to 10
C. Generates values endlessly, one at a time, starting from 1
D. Throws an error because sequences can't be infinite
Solution
Step 1: Understand sequence behavior
The sequence starts by yielding 1, then continues with an infinite sequence starting at 2, increasing by 1 each time.
Step 2: Recognize infinite generation
Since generateSequence with a lambda that adds 1 never returns null, it produces values endlessly.
Final Answer:
Generates values endlessly, one at a time, starting from 1 -> Option C
Quick Check:
Infinite sequence = endless values [OK]
Hint: Infinite sequences produce values one by one without stopping [OK]
Common Mistakes:
Thinking infinite sequences create fixed lists
Assuming infinite sequences cause errors immediately
Believing sequences stop after a few values
2. Which of the following is the correct syntax to create an infinite sequence of even numbers starting from 0 in Kotlin?
easy
A. sequence { yield(0); yield(2); yield(4) }
B. sequenceOf(0, 2, 4, 6)
C. generateSequence(0, 2)
D. generateSequence(0) { it + 2 }
Solution
Step 1: Identify infinite sequence syntax
generateSequence(seed) { nextValue } creates an infinite sequence by applying the lambda repeatedly.
Step 2: Check each option
generateSequence(0) { it + 2 } correctly uses generateSequence(0) { it + 2 } to produce even numbers endlessly. Options B and D create finite sequences. generateSequence(0, 2) has incorrect syntax.
Final Answer:
generateSequence(0) { it + 2 } -> Option D
Quick Check:
Correct syntax = generateSequence(0) { it + 2 } [OK]
Hint: Use generateSequence(seed) { next } for infinite sequences [OK]
Common Mistakes:
Using sequenceOf for infinite sequences
Passing two arguments to generateSequence incorrectly
Not providing a lambda for next values
3. What will be the output of this Kotlin code?
val seq = generateSequence(1) { it + 3 }
println(seq.take(4).toList())
medium
A. [1, 2, 3, 4]
B. [1, 4, 7, 10]
C. [1, 3, 6, 9]
D. [4, 7, 10, 13]
Solution
Step 1: Understand sequence generation
The sequence starts at 1, then each next value adds 3: 1, 4, 7, 10, ...
Step 2: Apply take and toList
take(4) takes first 4 values: 1, 4, 7, 10. toList() converts them to a list.
Final Answer:
[1, 4, 7, 10] -> Option B
Quick Check:
Sequence values = [1,4,7,10] [OK]
Hint: Add the step value repeatedly starting from seed [OK]
Common Mistakes:
Adding 1 instead of 3 each step
Confusing take with drop
Expecting a finite sequence without take
4. Identify the error in this Kotlin code that tries to generate an infinite sequence of odd numbers:
val odds = generateSequence(1) { it + 2 }
println(odds.take(5).toList())
medium
A. No error; code runs correctly and prints odd numbers
B. Missing yield keyword inside generateSequence
C. The lambda should return null to stop sequence
D. Seed value should be 0 instead of 1
Solution
Step 1: Check generateSequence usage
The code uses generateSequence(1) { it + 2 }, which correctly generates odd numbers starting at 1.
Step 2: Verify output and syntax
take(5).toList() safely takes first 5 odd numbers. No syntax or runtime error exists.
Final Answer:
No error; code runs correctly and prints odd numbers -> Option A
Quick Check:
Correct infinite sequence = No error; code runs correctly and prints odd numbers [OK]
Hint: generateSequence needs only seed and next lambda, no yield [OK]
Common Mistakes:
Thinking yield is needed inside generateSequence
Expecting lambda to return null to continue
Confusing seed value for even numbers
5. You want to generate an infinite sequence of Fibonacci numbers in Kotlin. Which code correctly creates this infinite sequence?
hard
A. Both A and B
B. sequence { var a=0; var b=1; while(true) { yield(a); val c=a+b; a=b; b=c } }
generateSequence(Pair(0, 1)) { Pair(it.second, it.first + it.second) }.map { it.first } uses generateSequence with pairs to generate Fibonacci pairs, then maps to first element, correctly producing Fibonacci numbers infinitely.
Step 2: Analyze sequence { var a=0; var b=1; while(true) { yield(a); val c=a+b; a=b; b=c } }
sequence { var a=0; var b=1; while(true) { yield(a); val c=a+b; a=b; b=c } } uses a sequence builder with a while(true) loop yielding Fibonacci numbers step-by-step, also correct and infinite.
Step 3: Analyze generateSequence(0) { it + it }
generateSequence(0) { it + it } doubles the number each time, not Fibonacci, so it's incorrect.
Final Answer:
Both A and B -> Option A
Quick Check:
Both methods generate Fibonacci infinite sequences [OK]
Hint: Use pairs or sequence builder with yield for Fibonacci [OK]
Common Mistakes:
Using generateSequence without pairs for Fibonacci
Trying to double numbers instead of summing previous two
Not using yield in sequence builder for infinite values
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.