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
- Functions can be passed as parameters to another function.
- Functions can be returned from another function.
- 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.
- 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:
蘭「ネクストコナンズヒント!」
コナン「打撃!」
コナン「次回は物月があるゾ!」
蘭「まとめて物好きが見てるわ」
コナン「そうだゾ!もっと気になるゾ!」
蘭「ネクストコナンズヒント!」
コナン「動悸!」
コナン「そのまま吊り下げられたんだよ」
蘭「あたしに吊り下げるわ」
コナン「ええー?」
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
蘭「ネクストコナンズヒント!」
コナン「妥当性!」
コナン「次回は少年探偵団がソフトウェア!」
蘭「じゃあちょっと向かうな入れてたの?」
コナン「もしかして」
蘭「ネクストコナンズヒント!」
コナン「系統!」
コナン「来週はジェットコースターが遊園地に行く!」
蘭「その後は新一が来たの」
コナン「違うよ」
蘭「ネクストコナンズヒント!」
コナン「関西弁!」
コナン「ちょっと周りして調べてみるか」
蘭「回ったら調べてるんじゃない」
コナン「狙い撃ちに調べてるんでしょ?」
蘭「ネクストコナンズヒント!」
コナン「イタチ!」
コナン「イタチにあったぞ!」
蘭「もうすぐイタチにあたしが貸したわ」
コナン「うわっ、ちょ、ちょっと...」
蘭「ネクストコナンズヒント!」
コナン「竜巻!」
コナン「次回はリモートコンピューターに少年探偵団だよな!」
蘭「少年探偵団はコンピューターが面白いわねー」
Post a Comment