Sunday, September 29, 2013

Higher Order functions in Scala


The other day I was experimenting with functional programming in scala and  the concept of first class functions.

A programming language is said to support first class functions if

  1. Functions can be passed as parameters to another function.
  2. Functions can be returned from another function.
  3. Functions can be assigned to a variable in the same ways as any other first class object or primitive data types can be assigned to a variable.
  4. Functions can be defined within another function.
A corollary to this is that first class functions in a programming language lead to the language supporting closures since it has to clearly define what variables and values are being referred to by inner functions.

Exploring all these things in Scala made me write some sample code to demonstrate these concepts.
Below is a scala function which demonstrates all these concepts.

// 1.Takes a function as input, 
// 2.creates a nested function and assigns it to a variable,
//  3. applies the input function to input variables
 // 4. returns a function
  
  def firstclassfunc(inputfunc:(Int)=> Int, inputparam:Int): (Int,Int) => Int = {
    
    //val innerfunc = (x:Int, y:Int) => inputfunc(inputparam+x+y)
    val innerfunctionliteral =  (x:Int, y:Int)=> { inputfunc(inputparam+x+y) } 
    
    def anotherinnerfunc(x:Int, y:Int):Int = {inputfunc(inputparam+x+y)}
    
    val innerfunctionvalclassrepresentation = new Function2[Int, Int, Int] {
    def apply(x: Int, y:Int): Int = inputfunc(inputparam+x+y)
    }
    
    val innerfuncdefvalpartiallyapplied =  anotherinnerfunc _
    val innerfuncdefvalinstantiated = anotherinnerfunc(1,2);
    // All of the below scala mechanisms work. As long as we can return a function that can still has accept //two  free variables, it seems we conform to the parent functions' return type definition of (Int,Int) => Int
    
      return innerfunctionliteral
    // return anotherinnerfunc _
   //  return innerfunctionvalclassrepresentation
   //   return innerfuncdefvalpartiallyapplied
   //  return anotherinnerfunc(_,_)
   // return innerfunctionval
  }

8 comments:

Kontzu henshin shutsu said...

蘭「ネクストコナンズヒント!」
コナン「打撃!」
コナン「次回は物月があるゾ!」
蘭「まとめて物好きが見てるわ」
コナン「そうだゾ!もっと気になるゾ!」

Uang maizo nobita said...

蘭「ネクストコナンズヒント!」
コナン「動悸!」
コナン「そのまま吊り下げられたんだよ」
蘭「あたしに吊り下げるわ」
コナン「ええー?」

Ayo, Wujudkan Impian Ayah said...

Daftar Lagu After
Album Nyaman

01. Pemimpi - 3:24
02. Nyaman - 4:32
03. Katakanlah - 4:29
04. Cemburu - 4:03
05. Angan - 3:08
06. Bila - 4:24
07. Biarkan - 3:51
08. D. T. A. - 4:25
09. Putus - 5:08
10. Sekutu Abadi - 4:19
11. Tundukkan Aku - 3:38
12. Lagu Kita - 3:29

Bertanding Dengan Pompa Besar said...

蘭「ネクストコナンズヒント!」
コナン「妥当性!」
コナン「次回は少年探偵団がソフトウェア!」
蘭「じゃあちょっと向かうな入れてたの?」
コナン「もしかして」

Giant Menikah said...

蘭「ネクストコナンズヒント!」
コナン「系統!」
コナン「来週はジェットコースターが遊園地に行く!」
蘭「その後は新一が来たの」
コナン「違うよ」

Tas 4 Dimensi said...

蘭「ネクストコナンズヒント!」
コナン「関西弁!」
コナン「ちょっと周りして調べてみるか」
蘭「回ったら調べてるんじゃない」
コナン「狙い撃ちに調べてるんでしょ?」

Kue pembuat mirip hewan peliharaan said...

蘭「ネクストコナンズヒント!」
コナン「イタチ!」
コナン「イタチにあったぞ!」
蘭「もうすぐイタチにあたしが貸したわ」
コナン「うわっ、ちょ、ちょっと...」

Tempat lilin fatamorgana said...

蘭「ネクストコナンズヒント!」
コナン「竜巻!」
コナン「次回はリモートコンピューターに少年探偵団だよな!」
蘭「少年探偵団はコンピューターが面白いわねー」