struct ArithProg{
a:u16,
d:u16,
n:u16
}
impl ArithProg{
fn new(a:u16,d:u16,n:u16)->Self{
Self{a,d,n}
}
fn display(&self)->String{
format!("Arithmetic Progression : {{a:{},d:{},n:{}}}",self.a,self.d,self.n)
}
}
impl Iterator for ArithProg{
type Item=u16;
fn next(&mut self)->Option<Self::Item>{
let nth_term=self.a+(self.n-1)*self.d;
self.n+=1;
Some(nth_term)
}
}
fn main(){
let mut series1=ArithProg::new(5,4,7);
assert_eq!(series1.next(),Some(29));
println!("{}",series1.display());
let mut series2=ArithProg::new(4,3,1);
println!("\nThe given series with first term as 4 and common difference as 3:");
println!("{:?}",series2.next());
println!("{:?}",series2.next());
for i in ArithProg::new(4,3,1).take(3){
println!("{} ",i)
}
print!("\nSkipping the first two terms and iterating through the next 3 terms:\n");
for i in ArithProg::new(4,3,1).skip(2).take(3){
println!("{} ",i)
}
}