Article de reference

Demande partielle

, nous pourrions fixer (ou « lier ») le premier argument, produisant une fonction de type partiel ( f ) : ( Y × Z ) → N {\displaystyle { ext{partial}}(f)\colon (Y imes Z) o N} L...

, nous pourrions fixer (ou « lier ») le premier argument, produisant une fonction de type

Motivation

Intuitivement, l'application partielle d'une fonction stipule que « si l'on fixe les premiers arguments de la fonction, on obtient une fonction des arguments restants ». Par exemple, si la fonction `div ( x , y ) = x / y` , alors `div` avec le paramètre `x` fixé à 1 est une autre fonction : `div 1 ( y ) = div (1, y ) = 1 / y` . Ceci est équivalent à la fonction `inv` qui renvoie l'inverse multiplicatif de son argument, défini par `inv ( y ) = 1 / y` .

L'intérêt pratique de l'application partielle réside dans le fait que les fonctions obtenues en fournissant seulement certains arguments à une fonction sont souvent utiles ; par exemple, de nombreux langages possèdent une fonction ou un opérateur similaire à `addition` plus_one. L'application partielle facilite la définition de ces fonctions, par exemple en créant une fonction qui représente l'opérateur d'addition avec `undefined` comme premier argument.

Mises en œuvre

Dans des langages comme ML , Haskell et F# , les fonctions sont définies par défaut sous forme curryfiée . Fournir un nombre d'arguments inférieur au nombre total est appelé application partielle.

Dans les langages dotés de fonctions de première classe , on peut définir currydes uncurryfonctions papplypermettant d'effectuer explicitement la curryfication et l'application partielle. Ceci peut engendrer une surcharge d'exécution plus importante en raison de la création de fermetures supplémentaires , tandis que Haskell peut utiliser des techniques plus efficaces.

Scala implémente l'application partielle optionnelle avec un espace réservé, par exemple en retournant une fonction incrémentale. Scala prend également en charge plusieurs listes de paramètres sous forme de curryfication, par exemple .defadd(x:Int,y:Int)={x+y};add(1,_:Int)defadd(x:Int)(y:Int)={x+y};add(1)_

Clojure implémente l'application partielle à l'aide de la partialfonction définie dans sa bibliothèque principale.

La bibliothèque standard C++bind(function, args..) permet de renvoyer un objet fonction résultant de l'application partielle des arguments fournis à la fonction donnée. Depuis C++20, la fonction `liaison` bind_front(function, args...)est également disponible ; elle lie les premiers sizeof...(args)arguments de la fonction à `args`. En revanche, ` liaison` bindpermet de lier n'importe quel argument de la fonction qui lui est passée, et pas seulement le premier. On peut également utiliser des expressions lambda .

int f ( int a , int b ); auto f_partial = []( int a ) { return f ( a , 123 ); }; assert ( f_partial ( 456 ) == f ( 456 , 123 ) );

En Java , MethodHandle.bindTo`partiellement` applique une fonction à son premier argument. Alternativement, depuis Java 8, on peut utiliser des lambdas :

public static < A , B , R > Function < B , R > partialApply ( BiFunction < A , B , R > biFunc , A value ) { return b -> biFunc . apply ( value , b ); }

Dans Raku , la assumingméthode crée une nouvelle fonction avec moins de paramètres.

Le module de la bibliothèque standard Pythonfunctools inclut la partialfonction, permettant la liaison d'arguments positionnels et nommés, et renvoyant une nouvelle fonction.

En XQuery , un espace réservé pour les arguments ( ?) est utilisé pour chaque argument non fixe dans une application de fonction partielle.

Définitions

Dans le lambda-calcul simplement typé avec types de fonctions et de produits ( λ →, × ), l'application partielle, la curryfication et la décurryfication peuvent être définies comme

papply
((( une × b ) → c ) × une ) → ( bc ) = λ ( F , X ). Oui . f ( x , y )
curry
(( a × b ) → c ) → ( a → ( bc )) = λf . λx . λy . f ( x , y )
uncurry
( une → ( bc )) → (( une × b ) → c ) = λf . λ ( X , y ). fxy

Notez que currypapply= curry.

Formulation mathématique et exemples

L'application partielle peut être un moyen utile de définir plusieurs notions utiles en mathématiques.

Ensembles donnés

Actions de groupe

Une action de groupe peut être comprise comme une fonction

Les produits scalaires et l'application canonique au dual

Un produit scalaire sur un espace vectoriel

Produits vectoriels et application adjointe pour les algèbres de Lie

L'application partielle du produit croisé

Ceci est étroitement lié à l' application adjointe des algèbres de Lie . Les algèbres de Lie sont munies d'un crochet.

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index