0 views

Uploaded by bharathmh

explains concept of currying in scala

save

You are on page 1of 13

Principles of Functional Programming

a. a. b) def sumFactorials(a: Int. b: Int) = sum(x => x * x * x. b: Int) = sum(fact. a. Can we be even shorter by getting rid of these parameters? . b) Question Note that a and b get passed unchanged from sumInts and sumCubes into sum. b) def sumCubes(a: Int. b: Int) = sum(x => x.Motivation Look again at the summation functions: def sumInts(a: Int.

.Functions Returning Functions Let’s rewrite sum as follows. Int) => Int = { def sumF(a: Int. The returned function sumF applies the given function parameter f and sums the results. b: Int): Int = if (a > b) 0 else f(a) + sumF(a + 1. def sum(f: Int => Int): (Int. b) sumF } sum is now a function that returns another function.

Stepwise Applications We can then define: def sumInts = sum(x => x) def sumCubes = sum(x => x * x * x) def sumFactorials = sum(fact) These functions can in turn be applied like any other function: sumCubes(1. 10) + sumFactorials(10. 20) .

Consecutive Stepwise Applications In the previous example. sumCubes. can we avoid the sumInts. … middlemen? Of course: sum (cube) (1. 10) .

▶ sum(cube) is therefore equivalent to sumCubes. can we avoid the sumInts. … middlemen? Of course: sum (cube) (1. ▶ This function is next applied to the arguments (1. 10).Consecutive Stepwise Applications In the previous example. sumCubes. . 10) ▶ sum(cube) applies sum to cube and returns the sum of cubes function.

can we avoid the sumInts. … middlemen? Of course: sum (cube) (1. 10). 10) == (sum (cube)) (1. function application associates to the left: sum(cube)(1. ▶ sum(cube) is therefore equivalent to sumCubes. 10) . sumCubes. ▶ This function is next applied to the arguments (1. Generally. 10) ▶ sum(cube) applies sum to cube and returns the sum of cubes function.Consecutive Stepwise Applications In the previous example.

Multiple Parameter Lists The definition of functions that return functions is so useful in functional programming that there is a special syntax for it in Scala. but shorter: def sum(f: Int => Int)(a: Int. the following definition of sum is equivalent to the one with the nested sumF function. b: Int): Int = if (a > b) 0 else f(a) + sum(f)(a + 1. For example. b) .

Expansion of Multiple Parameter Lists In general.(argsn ) = E where n > 1.. a definition of a function with multiple parameter lists def f(args1 ).. g} where g is a fresh identifier.. is equivalent to def f(args1 ).(argsn−1 ) = (argsn ⇒ E) ... Or for short: def f(args1 )..(argsn−1 ) = {def g(argsn ) = E.

. a twentieth century logician.Expansion of Multiple Parameter Lists (2) By repeating the process n times def f(args1 ).. named for its instigator. Haskell Brooks Curry (1900-1982).. In fact.. the idea goes back even further to Schönfinkel and Frege.(argsn ⇒ E)..)) This style of definition and function application is called currying. .(argsn−1 )(argsn ) = E is shown to be equivalent to def f = (args1 ⇒ (args2 ⇒ .. but the term “currying” has stuck.

.. b: Int): Int = .More Function Types Question: Given. def sum(f: Int => Int)(a: Int. What is the type of sum ? .

b: Int): Int = . What is the type of sum ? Answer: (Int => Int) => (Int.. def sum(f: Int => Int)(a: Int. Int) => Int Note that functional types associate to the right..More Function Types Question: Given. That is to say that Int => Int => Int is equivalent to Int => (Int => Int) .

3. which generalizes both sum and product? . 2. Write a product function that calculates the product of the values of a function for the points on a given interval. Write factorial in terms of product. Can you write a more general function.Exercise 1.

- Using-UserExit-for-Variables-in-BEx-Reporting1.pdfUploaded byvtsuri
- m720bmUploaded byJoe
- 15 CM OverviewUploaded byChitwan Bhardwaj
- Part Modules CAST(NX10) 1 2 3 4Uploaded bySrdjan
- MD050 Application Extensions Functional DesignUploaded bydkarteek
- TPS Control GuideUploaded byAnton Kazakov
- Oracle Reports and XML PublisherUploaded bySurendra Babu
- EC2-111 Universal ControllerUploaded byMaria Daza
- Working With QtpUploaded byprasadsunny
- GUI.pdfUploaded bySyed Imtiaz Ali Shah
- EmSo Manual CompletoUploaded byYuri Zopelario Mareli
- ch06Uploaded bykyle_tosh3484
- Java Language Companion.pdfUploaded byAnonymous 41DhRd
- Oracle Reports and XML Publisher.docUploaded bySurendra Babu
- 615 Series Quick Start Guide 757435 ENa. Relay ABBUploaded byTung Nguyen
- DRS-C2BB Description eUploaded byyuy0607
- Mini Pak HoneywellUploaded byliviu_dova
- PowerCenter 8 Advanced Mapping Design Exam:Skill Set InventoryUploaded byalainfi2010
- Basics_Synon Basics.docUploaded bysasi_kesh1_262084389
- 91 Computer ScienceUploaded byrkvenkatgmail
- msgboxUploaded byAriane
- Sap System ProfilesUploaded bySrikanth Siddareddy
- All Datastage QnaUploaded byKumar Sumit
- gettingstartedwithstatisticaprogramming.pdfUploaded byOlivier Adissin
- Turbo C GraphicsUploaded byTristan Bancoro Estudillo
- Graphics Programming GuideUploaded byali
- Assignmt1Uploaded bylawac3
- Beginners Guide to Accessing SQL Server Through C#Uploaded byghar_dash
- SQR FAQ's_CUploaded byabhi10aug