Maison > développement back-end > Golang > Comment pouvez-vous obtenir une application partielle et un curry de fonctions dans Go ?

Comment pouvez-vous obtenir une application partielle et un curry de fonctions dans Go ?

Patricia Arquette
Libérer: 2024-11-08 10:39:02
original
347 Les gens l'ont consulté

How Can You Achieve Partial Application and Function Currying in Go?

Currying en Go

En programmation fonctionnelle, le currying est une technique permettant de transformer une fonction qui prend plusieurs arguments en une série de fonctions imbriquées qui prennent chacune un seul argument. Cela permet une application partielle, où une fonction peut être appliquée à un sous-ensemble de ses arguments pour produire une nouvelle fonction qui prend les arguments restants.

Application partielle dans Go

L'application partielle n'est pas directement pris en charge dans Go, mais cela peut être réalisé en utilisant des fermetures. Une fermeture est une fonction qui conserve l'accès aux variables de sa portée englobante même après la sortie de la portée. En renvoyant une fermeture d'une fonction, nous pouvons créer une fonction partiellement appliquée.

Par exemple, la fonction suivante renvoie une fermeture qui ajoute un nombre donné à son entrée :

func add(a int) func(b int) int {
    return func(b int) int {
        return a + b
    }
}
Copier après la connexion

Nous peut ensuite utiliser cette fermeture pour appliquer partiellement la fonction d'ajout :

add2 := add(2)
fmt.Println(add2(3)) // prints 5
Copier après la connexion

Fonction Currying dans Go

La fonction currying peut également être réalisée dans Go en utilisant des fermetures. La fonction suivante currie une fonction qui prend plusieurs arguments :

func curry(f func(...int) int) func(int) func(...int) int {
    return func(a int) func(...int) int {
        return func(b... int) int {
            args := append([]int{a}, b...)
            return f(args...)
        }
    }
}
Copier après la connexion

Cette fonction renvoie une fonction qui prend un argument et renvoie une nouvelle fonction qui prend les arguments restants. Nous pouvons ensuite utiliser cette fonction pour curry n'importe quelle fonction :

add := curry(func(a, b, c int) int { return a + b + c })
add2 := add(2)
add3 := add3(3)
fmt.Println(add3(4)) // prints 9
Copier après la connexion

Conclusion

Bien que Go ne prenne pas nativement en charge les applications partielles ou le curry de fonctions, ces techniques peuvent être réalisées à l'aide de fermetures. Cela permet aux programmeurs Go de profiter des concepts de programmation fonctionnelle d'application partielle et de curry, même si le langage lui-même ne les prend pas directement en charge.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal