SlideShare a Scribd company logo
1 of 33
Download to read offline
Recursion
schemes
in Scala
and also fixed point data types
Today we will speak about freaky
functional stuff, enjoy :)
Arthur Kushka // @Arhelmus
Yo
a method for structuring programs mainly
as sequences of possibly nested function
procedure calls.
programmingFunctional
((x: Array[Byte]) => x)
   .andThen(encodeBase64)
   .andThen(name => s"Hello $name")
   .andThen(println)
everywhere!
Recursive schemas
Lists and trees
Filesystems
Databases
list match {
   // Cons(1, Cons(2, Cons(3, Nil)))
   case 1 :: 2 :: 3 :: Nil =>
   case Nil =>
 }
Example
01
Sum
Multiply
Divide
Square
Math equasionevaluation
Lets define our DSL
sealed trait Exp
case class IntValue(value: Int) extends Exp
case class DecValue(value: Double) extends Exp
case class Sum(exp1: Exp, exp2: Exp) extends Exp
case class Multiply(exp1: Exp, exp2: Exp) extends Exp
case class Divide(exp1: Exp, exp2: Exp) extends Exp
case class Square(exp: Exp) extends Exp
Example
equation
Sum(
   Square(
     IntValue(4)
   ),
   Multiply(
     DecValue(3.3),
     IntValue(4)
   )
 )
4^2 + 3.3 * 4
val evaluate: Exp => Double = {
   case DecValue(value) => value
   case IntValue(value) => value.toDouble
   case Sum(exp1, exp2) =>
      evaluate(exp1) + evaluate(exp2)
   case Multiply(exp1, exp2) =>
      evaluate(exp1) * evaluate(exp2)
   case Divide(exp1, exp2) =>
      evaluate(exp1) / evaluate(exp2)
   case Square(exp) =>
     val v = evaluate(exp)
     v * v
 }
val stringify: Exp => String = {
   case DecValue(value) => value.toString
   case IntValue(value) => value.toString
   case Sum(exp1, exp2) =>
     s"${stringify(exp1)} + ${stringify(exp2)}"
   case Square(exp) =>
     s"${stringify(exp)} ^ 2"
   case Multiply(exp1, exp2) =>
     s"${stringify(exp1)} * ${stringify(exp2)}"
   case Divide(exp1, exp2) =>
     s"${stringify(exp1)} / ${stringify(exp2)}"
 }
It will work!
but...
evaluate(expression) // prints 29.2
stringify(expression) // prints 4 ^ 2 + 3.3 * 4
There are a lot of
mess
   case Sum(exp1: Exp, exp2: Exp) =>
      evaluate(exp1) + evaluate(exp2)
And not only...
Problem of partial
interpretation
val optimize: Exp => Exp = {
   case Multiply(exp1, exp2) if exp1 == exp2 =>
     Square(optimize(exp1))
   case other => ???
}
Lets improve
going to
result
types02
Generalize it
sealed trait Exp[T]
case class IntValue[T](value: Int) extends Exp[T]
case class DecValue[T](value: Double) extends Exp[T]
case class Sum[T](exp1: T, exp2: T) extends Exp[T]
case class Multiply[T](exp1: T, exp2: T) extends Exp[T]
case class Divide[T](exp1: T, exp2: T) extends Exp[T]
case class Square[T](exp: T) extends Exp[T]
val expression: Exp[Exp[Exp[Unit]]] =
Sum[Exp[Exp[Unit]]](
   Square[Exp[Unit]](
     IntValue[Unit](4)
   ),
   Multiply[Exp[Unit]](
     DecValue[Unit](3.3),
     IntValue[Unit](4)
   )
 )
Nesting types issue
its like a hiding of part that doesn't matter
fixed point types
F[_] is a generic type with a hole, after
wrapping of Exp with that we will have
Fix[Exp] type.
let's add
typehack
case class Fix[F[_]](unFix: F[Fix[F]])
val expression: Fix[Exp] = Fix(Sum(
   Fix(Square(
     Fix(IntValue(4))
   )),
   Fix(Multiply(
     Fix(DecValue(3.3)),
     Fix(IntValue(4))
   ))
 ))
Hacked code
case class Square[T](exp: T) extends Exp[T]
object Square {
  def apply(fixExp: Exp[Fix[Exp]]) = Fix[Exp](fixExp)
}
val expression: Fix[Exp] = Square(
   Square(
     Square(
       IntValue(4)
     )))
Let's do it cleaner
time to traverse
our structure
03
def map[F[_], A, B](fa: F[A])(f: A=>B): F[B]
Functor 911
Scalaz example
case class Container[T](data: T)
implicit val functor = new Functor[Container] {
override def map[A, B](fa: Container[A])
(f: A => B): Container[B] =
Container(f(fa.data))
}
functor.map(Container(1))(_.toString) // "1"
For cats you will have same code
implicit val functor = new Functor[Exp] {
override def map[A, B](fa: Exp[A])(f: A => B): Exp[B] =
fa match {
case IntValue(v) => IntValue(v)
case DecValue(v) => DecValue(v)
case Sum(v1, v2) => Sum(f(v1), f(v2))
case Multiply(v1, v2) => Multiply(f(v1), f(v2))
case Divide(v1, v2) => Divide(f(v1), f(v2))
case Square(v) => Square(f(v))
}
}
catamorphism
anamorphism
hylomorphism04
“Functional Programming with Bananas,
Lenses, Envelopes and Barbed Wire”, by
Erik Meijer
generalized folding operation
catamorphism
Lets define
Algebra
type Algebra[F[_], A] = F[A] => A
val evaluate: Algebra[Exp, Double] = {
   case IntValue(v) => v.toDouble
   case DecValue(v) => v
   case Sum(v1, v2) => v1 + v2
   case Multiply(v1, v2) => v1 * v2
   case Divide(v1, v2) => v1 / v2
   case Square(v) => Math.sqrt(v)
 }
So as a result
val expression: Fix[Exp] = Sum(
   Multiply(IntValue(4), IntValue(4)),
   Multiply(DecValue(3.3), IntValue(4))
 )
import matryoshka.implicits._
expression.cata(evaluate) // 29.2
do you remember about partial interpretation?
Extra profit
val optimize: Algebra[Exp, Fix[Exp]] = {
   case Multiply(Fix(exp), Fix(exp2)) if exp == exp2 =>      
      Fix(Square(exp))
   case other => Fix[Exp](other)
 }
import matryoshka.implicits._
expression.cata(optimize).cata(stringify) // 4 ^ 2 + 3.3 * 4
val evaluate: Exp => Double = {
   case DecValue(value) => value
   case IntValue(value) => value.toDouble
   case Sum(exp1, exp2) =>
      evaluate(exp1) + evaluate(exp2)
   case Multiply(exp1, exp2) =>
      evaluate(exp1) * evaluate(exp2)
   case Divide(exp1, exp2) =>
      evaluate(exp1) / evaluate(exp2)
   case Square(exp) =>
     val v = evaluate(exp)
     v * v
 }
type Algebra[F[_], A]
val evaluate: Algebra[Exp, Double] = {
   case IntValue(v) => v.toDouble
   case DecValue(v) => v
   case Sum(v1, v2) => v1 + v2
   case Multiply(v1, v2) => v1 * v2
   case Divide(v1, v2) => v1 / v2
   case Square(v) => Math.sqrt(v)
 }
catamorphism: F[_] => A 
anamorphism: A => F[_] 
hylomorphism: F[_] => A => F[_] 
Just good to
know
Fixed point types is perfect to create
DSLs
Recursion schemas is composable
All you need to use that stuff, you
already know from Scala
Summary
thank you.
any questions?

More Related Content

What's hot

Code generator
Code generatorCode generator
Code generatorTech_MX
 
String Matching with Finite Automata,Aho corasick,
String Matching with Finite Automata,Aho corasick,String Matching with Finite Automata,Aho corasick,
String Matching with Finite Automata,Aho corasick,8neutron8
 
Memory management ppt
Memory management pptMemory management ppt
Memory management pptManishaJha43
 
Arm DynamIQ: Intelligent Solutions Using Cluster Based Multiprocessing
Arm DynamIQ: Intelligent Solutions Using Cluster Based MultiprocessingArm DynamIQ: Intelligent Solutions Using Cluster Based Multiprocessing
Arm DynamIQ: Intelligent Solutions Using Cluster Based MultiprocessingArm
 
XPDDS17: Shared Virtual Memory Virtualization Implementation on Xen - Yi Liu,...
XPDDS17: Shared Virtual Memory Virtualization Implementation on Xen - Yi Liu,...XPDDS17: Shared Virtual Memory Virtualization Implementation on Xen - Yi Liu,...
XPDDS17: Shared Virtual Memory Virtualization Implementation on Xen - Yi Liu,...The Linux Foundation
 
Verilog-HDL Tutorial (14)
Verilog-HDL Tutorial (14)Verilog-HDL Tutorial (14)
Verilog-HDL Tutorial (14)Hiroki Nakahara
 
Crash Analysis with Reverse Taint
Crash Analysis with Reverse TaintCrash Analysis with Reverse Taint
Crash Analysis with Reverse Taintmarekzmyslowski
 
Presentation on Core i9
Presentation on Core i9Presentation on Core i9
Presentation on Core i9Abir Junayed
 
Linux memory-management-kamal
Linux memory-management-kamalLinux memory-management-kamal
Linux memory-management-kamalKamal Maiti
 
WebAssembly向け多倍長演算の実装
WebAssembly向け多倍長演算の実装WebAssembly向け多倍長演算の実装
WebAssembly向け多倍長演算の実装MITSUNARI Shigeo
 
Computer Science A Level Specification
Computer Science A Level SpecificationComputer Science A Level Specification
Computer Science A Level SpecificationLuke Ravenscroft
 
Optimization of basic blocks
Optimization of basic blocksOptimization of basic blocks
Optimization of basic blocksishwarya516
 
Linux Memory Management with CMA (Contiguous Memory Allocator)
Linux Memory Management with CMA (Contiguous Memory Allocator)Linux Memory Management with CMA (Contiguous Memory Allocator)
Linux Memory Management with CMA (Contiguous Memory Allocator)Pankaj Suryawanshi
 

What's hot (20)

Code generator
Code generatorCode generator
Code generator
 
Cs8493 unit 1
Cs8493 unit 1Cs8493 unit 1
Cs8493 unit 1
 
Memory virtualization
Memory virtualizationMemory virtualization
Memory virtualization
 
String Matching with Finite Automata,Aho corasick,
String Matching with Finite Automata,Aho corasick,String Matching with Finite Automata,Aho corasick,
String Matching with Finite Automata,Aho corasick,
 
Memory management ppt
Memory management pptMemory management ppt
Memory management ppt
 
Arm DynamIQ: Intelligent Solutions Using Cluster Based Multiprocessing
Arm DynamIQ: Intelligent Solutions Using Cluster Based MultiprocessingArm DynamIQ: Intelligent Solutions Using Cluster Based Multiprocessing
Arm DynamIQ: Intelligent Solutions Using Cluster Based Multiprocessing
 
XPDDS17: Shared Virtual Memory Virtualization Implementation on Xen - Yi Liu,...
XPDDS17: Shared Virtual Memory Virtualization Implementation on Xen - Yi Liu,...XPDDS17: Shared Virtual Memory Virtualization Implementation on Xen - Yi Liu,...
XPDDS17: Shared Virtual Memory Virtualization Implementation on Xen - Yi Liu,...
 
Matlab file
Matlab fileMatlab file
Matlab file
 
Verilog-HDL Tutorial (14)
Verilog-HDL Tutorial (14)Verilog-HDL Tutorial (14)
Verilog-HDL Tutorial (14)
 
Logging system of Android
Logging system of AndroidLogging system of Android
Logging system of Android
 
Crash Analysis with Reverse Taint
Crash Analysis with Reverse TaintCrash Analysis with Reverse Taint
Crash Analysis with Reverse Taint
 
Presentation on Core i9
Presentation on Core i9Presentation on Core i9
Presentation on Core i9
 
Linux memory-management-kamal
Linux memory-management-kamalLinux memory-management-kamal
Linux memory-management-kamal
 
Vfs
VfsVfs
Vfs
 
WebAssembly向け多倍長演算の実装
WebAssembly向け多倍長演算の実装WebAssembly向け多倍長演算の実装
WebAssembly向け多倍長演算の実装
 
Computer Science A Level Specification
Computer Science A Level SpecificationComputer Science A Level Specification
Computer Science A Level Specification
 
Optimization of basic blocks
Optimization of basic blocksOptimization of basic blocks
Optimization of basic blocks
 
Linux Memory Management with CMA (Contiguous Memory Allocator)
Linux Memory Management with CMA (Contiguous Memory Allocator)Linux Memory Management with CMA (Contiguous Memory Allocator)
Linux Memory Management with CMA (Contiguous Memory Allocator)
 
Semaphores
SemaphoresSemaphores
Semaphores
 
CPU Caches
CPU CachesCPU Caches
CPU Caches
 

Similar to Recursion schemes in Scala

The Scala Programming Language
The Scala Programming LanguageThe Scala Programming Language
The Scala Programming Languageleague
 
R short-refcard
R short-refcardR short-refcard
R short-refcardconline
 
(How) can we benefit from adopting scala?
(How) can we benefit from adopting scala?(How) can we benefit from adopting scala?
(How) can we benefit from adopting scala?Tomasz Wrobel
 
Scala training workshop 02
Scala training workshop 02Scala training workshop 02
Scala training workshop 02Nguyen Tuan
 
Short Reference Card for R users.
Short Reference Card for R users.Short Reference Card for R users.
Short Reference Card for R users.Dr. Volkan OBAN
 
Functional programming with_scala
Functional programming with_scalaFunctional programming with_scala
Functional programming with_scalaRaymond Tay
 
R Programming Reference Card
R Programming Reference CardR Programming Reference Card
R Programming Reference CardMaurice Dawson
 
R command cheatsheet.pdf
R command cheatsheet.pdfR command cheatsheet.pdf
R command cheatsheet.pdfNgcnh947953
 

Similar to Recursion schemes in Scala (20)

The Scala Programming Language
The Scala Programming LanguageThe Scala Programming Language
The Scala Programming Language
 
Spark workshop
Spark workshopSpark workshop
Spark workshop
 
R short-refcard
R short-refcardR short-refcard
R short-refcard
 
Meet scala
Meet scalaMeet scala
Meet scala
 
(How) can we benefit from adopting scala?
(How) can we benefit from adopting scala?(How) can we benefit from adopting scala?
(How) can we benefit from adopting scala?
 
Scala training workshop 02
Scala training workshop 02Scala training workshop 02
Scala training workshop 02
 
Files,blocks and functions in R
Files,blocks and functions in RFiles,blocks and functions in R
Files,blocks and functions in R
 
Scala introduction
Scala introductionScala introduction
Scala introduction
 
Introduction to Scala
Introduction to ScalaIntroduction to Scala
Introduction to Scala
 
Reference card for R
Reference card for RReference card for R
Reference card for R
 
Short Reference Card for R users.
Short Reference Card for R users.Short Reference Card for R users.
Short Reference Card for R users.
 
Scala Bootcamp 1
Scala Bootcamp 1Scala Bootcamp 1
Scala Bootcamp 1
 
Introducing scala
Introducing scalaIntroducing scala
Introducing scala
 
Functional programming with_scala
Functional programming with_scalaFunctional programming with_scala
Functional programming with_scala
 
R Programming Reference Card
R Programming Reference CardR Programming Reference Card
R Programming Reference Card
 
A bit about Scala
A bit about ScalaA bit about Scala
A bit about Scala
 
R command cheatsheet.pdf
R command cheatsheet.pdfR command cheatsheet.pdf
R command cheatsheet.pdf
 
@ R reference
@ R reference@ R reference
@ R reference
 
R language introduction
R language introductionR language introduction
R language introduction
 
C# programming
C# programming C# programming
C# programming
 

Recently uploaded

CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdfCCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdfAsst.prof M.Gokilavani
 
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsync
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsyncWhy does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsync
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsyncssuser2ae721
 
lifi-technology with integration of IOT.pptx
lifi-technology with integration of IOT.pptxlifi-technology with integration of IOT.pptx
lifi-technology with integration of IOT.pptxsomshekarkn64
 
Past, Present and Future of Generative AI
Past, Present and Future of Generative AIPast, Present and Future of Generative AI
Past, Present and Future of Generative AIabhishek36461
 
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETE
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETEINFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETE
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETEroselinkalist12
 
Transport layer issues and challenges - Guide
Transport layer issues and challenges - GuideTransport layer issues and challenges - Guide
Transport layer issues and challenges - GuideGOPINATHS437943
 
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdf
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdfCCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdf
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdfAsst.prof M.Gokilavani
 
US Department of Education FAFSA Week of Action
US Department of Education FAFSA Week of ActionUS Department of Education FAFSA Week of Action
US Department of Education FAFSA Week of ActionMebane Rash
 
8251 universal synchronous asynchronous receiver transmitter
8251 universal synchronous asynchronous receiver transmitter8251 universal synchronous asynchronous receiver transmitter
8251 universal synchronous asynchronous receiver transmitterShivangiSharma879191
 
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catchers
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor CatchersTechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catchers
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catcherssdickerson1
 
Earthing details of Electrical Substation
Earthing details of Electrical SubstationEarthing details of Electrical Substation
Earthing details of Electrical Substationstephanwindworld
 
Indian Dairy Industry Present Status and.ppt
Indian Dairy Industry Present Status and.pptIndian Dairy Industry Present Status and.ppt
Indian Dairy Industry Present Status and.pptMadan Karki
 
Vishratwadi & Ghorpadi Bridge Tender documents
Vishratwadi & Ghorpadi Bridge Tender documentsVishratwadi & Ghorpadi Bridge Tender documents
Vishratwadi & Ghorpadi Bridge Tender documentsSachinPawar510423
 
UNIT III ANALOG ELECTRONICS (BASIC ELECTRONICS)
UNIT III ANALOG ELECTRONICS (BASIC ELECTRONICS)UNIT III ANALOG ELECTRONICS (BASIC ELECTRONICS)
UNIT III ANALOG ELECTRONICS (BASIC ELECTRONICS)Dr SOUNDIRARAJ N
 
Solving The Right Triangles PowerPoint 2.ppt
Solving The Right Triangles PowerPoint 2.pptSolving The Right Triangles PowerPoint 2.ppt
Solving The Right Triangles PowerPoint 2.pptJasonTagapanGulla
 
Arduino_CSE ece ppt for working and principal of arduino.ppt
Arduino_CSE ece ppt for working and principal of arduino.pptArduino_CSE ece ppt for working and principal of arduino.ppt
Arduino_CSE ece ppt for working and principal of arduino.pptSAURABHKUMAR892774
 

Recently uploaded (20)

CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdfCCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
 
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsync
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsyncWhy does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsync
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsync
 
🔝9953056974🔝!!-YOUNG call girls in Rajendra Nagar Escort rvice Shot 2000 nigh...
🔝9953056974🔝!!-YOUNG call girls in Rajendra Nagar Escort rvice Shot 2000 nigh...🔝9953056974🔝!!-YOUNG call girls in Rajendra Nagar Escort rvice Shot 2000 nigh...
🔝9953056974🔝!!-YOUNG call girls in Rajendra Nagar Escort rvice Shot 2000 nigh...
 
Exploring_Network_Security_with_JA3_by_Rakesh Seal.pptx
Exploring_Network_Security_with_JA3_by_Rakesh Seal.pptxExploring_Network_Security_with_JA3_by_Rakesh Seal.pptx
Exploring_Network_Security_with_JA3_by_Rakesh Seal.pptx
 
Design and analysis of solar grass cutter.pdf
Design and analysis of solar grass cutter.pdfDesign and analysis of solar grass cutter.pdf
Design and analysis of solar grass cutter.pdf
 
lifi-technology with integration of IOT.pptx
lifi-technology with integration of IOT.pptxlifi-technology with integration of IOT.pptx
lifi-technology with integration of IOT.pptx
 
Past, Present and Future of Generative AI
Past, Present and Future of Generative AIPast, Present and Future of Generative AI
Past, Present and Future of Generative AI
 
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETE
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETEINFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETE
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETE
 
Transport layer issues and challenges - Guide
Transport layer issues and challenges - GuideTransport layer issues and challenges - Guide
Transport layer issues and challenges - Guide
 
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdf
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdfCCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdf
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdf
 
US Department of Education FAFSA Week of Action
US Department of Education FAFSA Week of ActionUS Department of Education FAFSA Week of Action
US Department of Education FAFSA Week of Action
 
8251 universal synchronous asynchronous receiver transmitter
8251 universal synchronous asynchronous receiver transmitter8251 universal synchronous asynchronous receiver transmitter
8251 universal synchronous asynchronous receiver transmitter
 
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catchers
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor CatchersTechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catchers
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catchers
 
young call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Service
young call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Serviceyoung call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Service
young call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Service
 
Earthing details of Electrical Substation
Earthing details of Electrical SubstationEarthing details of Electrical Substation
Earthing details of Electrical Substation
 
Indian Dairy Industry Present Status and.ppt
Indian Dairy Industry Present Status and.pptIndian Dairy Industry Present Status and.ppt
Indian Dairy Industry Present Status and.ppt
 
Vishratwadi & Ghorpadi Bridge Tender documents
Vishratwadi & Ghorpadi Bridge Tender documentsVishratwadi & Ghorpadi Bridge Tender documents
Vishratwadi & Ghorpadi Bridge Tender documents
 
UNIT III ANALOG ELECTRONICS (BASIC ELECTRONICS)
UNIT III ANALOG ELECTRONICS (BASIC ELECTRONICS)UNIT III ANALOG ELECTRONICS (BASIC ELECTRONICS)
UNIT III ANALOG ELECTRONICS (BASIC ELECTRONICS)
 
Solving The Right Triangles PowerPoint 2.ppt
Solving The Right Triangles PowerPoint 2.pptSolving The Right Triangles PowerPoint 2.ppt
Solving The Right Triangles PowerPoint 2.ppt
 
Arduino_CSE ece ppt for working and principal of arduino.ppt
Arduino_CSE ece ppt for working and principal of arduino.pptArduino_CSE ece ppt for working and principal of arduino.ppt
Arduino_CSE ece ppt for working and principal of arduino.ppt
 

Recursion schemes in Scala