# Scala | Partially Applied functions

The Partially applied functions are the functions which are not applied on all the arguments defined by the stated function i.e, while invoking a function, we can supply some of the arguments and the left arguments are supplied when required. we call a function we can pass less arguments in it and when we pass less arguments it does not throw an exception. these arguments which are not passed to function we use underscore( _ ) as placeholder. Some important points:

• Partially applied functions are helpful in minimizing a function which accepts many arguments to a function that accepts only some arguments.
• It can replace any number of arguments defined by a function.
• It is easier for users to utilize this method.

Syntax:

```val multiply = (a: Int, b: Int, c: Int) => a * b * c

// less arguments passed
val f = multiply(1, 2, _: Int)```

As we can see in above syntax we defined a normal function multiply which have three arguments we pass less arguments (two). we can see it does not throw an exception that is partially applied function. Example:

## Scala

 `// Scala program of Partially` `// applied functions`   `// Creating object` `object` `Applied` `{`   `    ``// Main method` `    ``def` `main(args``:` `Array[String])` `    ``{`   `        ``// Creating a Partially applied` `        ``// function` `        ``def` `Book(discount``:` `Double, costprice``:` `Double) ` `        ``:` `Double ``=` `        ``{`   `            ``(``1` `- discount/``100``) * costprice`   `        ``}`   `        ``// Applying only one argument` `        ``val` `discountedPrice ``=` `Book(``25``, ``_:` `Double)`   `        ``// Displays discounted price` `        ``// of the book` `        ``println(discountedPrice(``400``))`   `    ``}` `}`

Output:

`300.0`

Here, the discount is passed in the argument and costprice part is left empty which can be passed later when required so, the discounted price can be calculated any number of times. Some more examples of Partially applied functions:

1. A partially applied function can be obtained even when not applied on any of the arguments defined. Example:

## Scala

 `// Scala program of Partially` `// applied functions`   `// Creating object` `object` `Applied` `{`   `    ``// Main method` `    ``def` `main(args``:` `Array[String])` `    ``{`   `        ``// Creating a Partially applied` `        ``// function` `        ``def` `Mul(x``:` `Double, y``:` `Double)` `        ``:` `Double ``=` `        ``{` `            ``x * y` `        ``}`   `        ``// Not applying any argument` `        ``val` `r ``=` `Mul ``_`   `        ``// Displays Multiplication` `        ``println(r(``9``, ``8``))` `    ``}` `}`

Output:

`72.0`
1. Partially applied functions can be utilized to replace any number of parameters. Example:

## Scala

 `// Scala program of Partially` `// applied functions`   `// Creating object` `object` `Applied` `{`   `    ``// Main method` `    ``def` `main(args``:` `Array[String])` `    ``{`   `        ``// Creating a Partially applied` `        ``// function` `        ``def` `Mul(x``:` `Double, y``:` `Double, z``:` `Double)` `        ``:` `Double ``=` `        ``{` `            ``x * y * z` `        ``}`   `        ``// applying some arguments` `        ``val` `r ``=` `Mul(``7``, ``8``, ``_` `:` `Double)`   `        ``// Displays Multiplication` `        ``println(r(``10``))` `    ``}` `}`

Output:

`560.0`
1. Currying approach can be utilized in Partially applied functions to transmit a function with multiple arguments into multiple functions, where each function takes only one argument. Example:

## Scala

 `// Scala program of Partially` `// applied functions using` `// Currying approach`   `// Creating object` `object` `curr` `{`   `    ``// Main method` `    ``def` `main(args``:` `Array[String])` `    ``{`   `        ``// Creating a Partially applied` `        ``// function` `        ``def` `div(x``:` `Double, y``:` `Double) ` `        ``:` `Double ``=` `        ``{` `            ``x / y` `        ``}`   `        ``// applying currying approach ` `        ``val` `m ``=` `(div ``_``).curried`   `        ``// Displays division` `        ``println(m(``72``)(``9``))` `    ``}` `}`

Output:

`8.0`
1. Here, currying approach breaks the given function into two functions, where each function takes one parameter so, you need to pass one value for each of the functions and get the desired output.

Whether you're preparing for your first job interview or aiming to upskill in this ever-evolving tech landscape, GeeksforGeeks Courses are your key to success. We provide top-quality content at affordable prices, all geared towards accelerating your growth in a time-bound manner. Join the millions we've already empowered, and we're here to do the same for you. Don't miss out - check it out now!

Previous
Next