IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Le créateur de Python se retire du Conseil de direction du langage et se positionne en simple contributeur


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Technicien de maintenance / Developpeur PHP
    Inscrit en
    Mai 2015
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien de maintenance / Developpeur PHP
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2015
    Messages : 429
    Par défaut
    Il y a Haskell où il n’y a que des constantes - qui ne « varient » pas. Elle peuvent être créée par « let c=42 in ... » ou des paramètres d’une fonction qui peuvent prendre plusieurs valeurs selon l’appel de la fonction, mais cette dernière ne pourra pas changer son paramètre à moins de s’appeler elle même avec une autre valeur.

    Ceci-dit, il est possible de construire un opérateur (que l’on appelle typiquement « >>= ») qui émule des fonctions qui modifie une variable.
    @floyer
    "let c = 42 in ..." c'est plutôt de l'OCaml il me semble.
    Dans un langage fonctionnel pure (et donc ni OCaml ni les LISP), ont ne parle même pas de variable, mais de "binding".
    Et c'est vrai pour Haskell il s’agira de matching, appel de fonction et de l'opérateur dédier ">>=" (bind, un des trois opérateur de monade).
    En même temps, puisque tout est expression, ça limite l'utilité de la chose.

  2. #2
    Membre Expert
    Avatar de Pyramidev
    Homme Profil pro
    Tech Lead
    Inscrit en
    Avril 2016
    Messages
    1 516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Tech Lead

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 516
    Par défaut
    Citation Envoyé par defZero Voir le message
    "let c = 42 in ..." c'est plutôt de l'OCaml il me semble.
    Je n'ai pas étudié OCaml, mais let c = 42 in est valide en Haskell.
    Exemple de programme Haskell :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    main = let c = 42 in
           putStrLn $ "The answer is " ++ show c ++ "."
    Pour l'exécuter en ligne : https://rextester.com/l/haskell_online_compiler

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par defZero Voir le message
    En même temps, puisque tout est expression, ça limite l'utilité de la chose.
    On peut même dire que ce n'est pas du tout une limite. Ca rend les variables inutiles et ça évite plein de problèmes (side-effects, variables globales...).

  4. #4
    Membre éclairé
    Homme Profil pro
    autre
    Inscrit en
    Septembre 2015
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Septembre 2015
    Messages : 598
    Par défaut
    La construction let a=42 in ... est de même nature en Haskell et en OCaml. Il est question de créer une constante (ou binding, qu’importe le terme). La différence de OCaml est que l’on peut aussi écrire let a=ref 42 in ... si on veut faire varier quelque chose. (Mais techniquement a sera toujours la même référence, seul !a, la valeur référencée variera).

    Pour revenir à Python, je trouve surprenant l’expression selon laquelle il n’y a pas de variable en Python. Si j’écris a=42, a pourra être utilisé à la place de 42 et être changé. Cela caractérise une variable et qu’importe si en interne on ait un objet commun mutualisé ou un entier dédié à la variable. Si j’écris a=table[42]; b=table[42] avec une table d’objets, j’aurais deux variables qui pointent sur le même objet quelque soit le langage, cela n’enlèverait rien au caractère variable de a et b.

  5. #5
    Membre éprouvé
    Inscrit en
    Avril 2010
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Avril 2010
    Messages : 99
    Par défaut
    Citation Envoyé par defZero Voir le message
    "let c = 42 in ..." c'est plutôt de l'OCaml il me semble.
    Dans un langage fonctionnel pure (et donc ni OCaml ni les LISP), ont ne parle même pas de variable, mais de "binding".
    Et c'est vrai pour Haskell il s’agira de matching, appel de fonction et de l'opérateur dédier ">>=" (bind, un des trois opérateur de monade).
    En même temps, puisque tout est expression, ça limite l'utilité de la chose.
    Euh non, en Haskell, on parle aussi de variables, comme en lambda-calcul de manière générale.
    On ne peut pas parler non plus de constantes car elles "varient" en fonction des arguments données à la fonction même si elles restent immutables.
    Un binding, c'est l'action d'associer une expression à une variable. Typiquement, la syntaxe let x = ... in

    Il existe un style de programmation qui permet de s'abstraire des variables (enfin, des arguments de fonctions plutôt), ça s'appelle le point-free style
    https://wiki.haskell.org/Pointfree
    mais poussé à l'extrème, ça donne des trucs illisibles

Discussions similaires

  1. Réponses: 80
    Dernier message: 22/04/2020, 12h00
  2. [INFO] Guido van Rossum en podcast
    Par VinsS dans le forum Général Python
    Réponses: 0
    Dernier message: 27/02/2017, 11h12
  3. Où trouver une biographie de Guido Van Rossum ?
    Par python-learn dans le forum Général Python
    Réponses: 3
    Dernier message: 18/01/2016, 01h02
  4. CORBA & PYTHON
    Par stan91stan dans le forum CORBA
    Réponses: 5
    Dernier message: 10/06/2004, 13h32
  5. [langage] Retirer le premier caractère d'une chaine ?
    Par kwisach dans le forum Langage
    Réponses: 5
    Dernier message: 24/04/2003, 12h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo