En aquest tema, explorarem dos conceptes fonamentals en la programació funcional: l'aplicació parcial i el currying. Aquests conceptes permeten crear funcions més flexibles i reutilitzables, facilitant la composició de funcions complexes a partir de funcions més senzilles.

Aplicació Parcial

Què és l'Aplicació Parcial?

L'aplicació parcial és una tècnica en la qual una funció que pren múltiples arguments es transforma en una funció que pren menys arguments. Això es fa fixant alguns dels arguments de la funció original.

Exemple d'Aplicació Parcial

Considerem una funció que suma tres nombres:

let sum3 x y z = x + y + z

Podem crear una nova funció que suma 5 a dos nombres fixant el primer argument a 5:

let add5 = sum3 5

Ara, add5 és una funció que pren dos arguments:

let result = add5 3 4  // result és 12

Exercici Pràctic

  1. Defineix una funció multiply que multiplica tres nombres.
  2. Utilitza l'aplicació parcial per crear una funció doubleAndAdd que multiplica el primer nombre per 2 i després suma els altres dos nombres.
let multiply x y z = x * y * z
let doubleAndAdd = multiply 2
let result = doubleAndAdd 3 4  // result és 24

Currying

Què és el Currying?

El currying és el procés de transformar una funció que pren múltiples arguments en una seqüència de funcions que prenen un sol argument. En F#, totes les funcions són curried per defecte.

Exemple de Currying

Considerem la mateixa funció sum3:

let sum3 x y z = x + y + z

Podem veure que sum3 és realment una funció que retorna una altra funció:

let sum3Curried = sum3 1  // sum3Curried és una funció que pren dos arguments
let result = sum3Curried 2 3  // result és 6

Exercici Pràctic

  1. Defineix una funció subtract que resta tres nombres.
  2. Utilitza el currying per crear una funció subtractFrom10 que resta dos nombres del nombre 10.
let subtract x y z = x - y - z
let subtractFrom10 = subtract 10
let result = subtractFrom10 3 2  // result és 5

Comparació entre Aplicació Parcial i Currying

Característica Aplicació Parcial Currying
Definició Fixar alguns arguments d'una funció per crear una nova funció amb menys arguments. Transformar una funció que pren múltiples arguments en una seqüència de funcions que prenen un sol argument.
Exemple let add5 = sum3 5 let sum3Curried = sum3 1
Ús Crear funcions especialitzades a partir de funcions generals. Facilitar la composició de funcions i la reutilització de codi.

Exercicis Addicionals

  1. Defineix una funció divide que divideix tres nombres.
  2. Utilitza l'aplicació parcial per crear una funció halfAndDivide que divideix el primer nombre per 2 i després divideix els altres dos nombres.
  3. Defineix una funció modulus que calcula el mòdul de tres nombres.
  4. Utilitza el currying per crear una funció modulusBy5 que calcula el mòdul de dos nombres respecte a 5.

Solucions

// Exercici 1
let divide x y z = x / y / z
let halfAndDivide = divide 2
let result1 = halfAndDivide 4 2  // result1 és 1

// Exercici 2
let modulus x y z = x % y % z
let modulusBy5 = modulus 5
let result2 = modulusBy5 3 2  // result2 és 1

Conclusió

En aquesta secció, hem après sobre l'aplicació parcial i el currying, dues tècniques poderoses en la programació funcional que ens permeten crear funcions més flexibles i reutilitzables. Hem vist exemples pràctics i hem realitzat exercicis per reforçar aquests conceptes. Aquests coneixements seran fonamentals per a la programació funcional avançada i la composició de funcions complexes en F#.

© Copyright 2024. Tots els drets reservats