9
votes

Exemple d'appel par nom

Dans mes principes de classe de programmation, nous parlons de différentes méthodes d'appel. Certains nous avons discuté étaient:

  • appelez par valeur
  • appelez par référence
  • appelez par valeur / résultat
  • et appel par nom

    Je ne trouve pas d'exemple de la façon dont l'appel passe le nom fonctionne. Quelqu'un se soucie de me donner un exemple? Je pense que lorsque vous prenez un fichier XML comme entrée, c'est similaire à appeler par nom. Quelqu'un pourrait-il me donner un exemple plus traditionnel?


3 commentaires

Je ne connais pas d'exemples modernes d'appel par nom. Ce fut une très mauvaise idée dans Algol 60 et je doute que cela ait changé.


Quel genre d'exemple cherchez-vous? Un exemple de langage qui utilise appelé par nom ou un exemple de ce que l'évaluation d'une expression utilisant un nom appelé ressemblerait?


@ SEPP2K, les deux pourraient être utiles. Je ne suis pas sûr, mais de ce que j'ai compris jusqu'à présent, cela ressemble à une jolie idée morte (corrigez-moi si je me trompe), mais il est inclus dans le matériel de cours (peut-être pour des raisons historiques?)


3 Réponses :


9
votes

Je vais travailler dans un langage de programmation hypothétique. Supposons que nous avons une fonction p (x) qui imprime x puis le renvoie. Maintenant, définissons une fonction: xxx

appelons maintenant avec quelques arguments: xxx

x et < Code> y va être substitué aux paramètres, de sorte que l'appel à foo ci-dessus va résulter: xxx

Nous allons donc imprimer 456 à l'écran et renvoyer 457. Dans une autre stratégie d'évaluation, nous évaluerons les paramètres de fonction (impression 123 et 456 à l'écran du processus), puis remplacez 456 pour y Dans l'organe de la fonction, renvoyant finalement 457.

C'est artificiel, mais j'espère que vous obtenez l'idée. Tout est question de substitution.


5 commentaires

alors appellerait par nom aussi appeler appel par référence? valeur? Quelque chose de spécifique?


@sixtyfootersDude, cette phrase a fait mal au cerveau. Soin de le réindiquer?


Sûr. Disons que vous avez ceci ( appel par nom ): int x = 0; foo (t (x)); imprimer (x); s'il était aussi "appeler par valeur", cela serait imprimé 0. Si c'était aussi "appeler par référence" IT> pourrait imprimer quelque chose d'autre.


Gian! Revenez et répondez-lui!


Je suis toujours assez certain que je ne comprends pas la question. Dans un scénario d'appel par référence, il est toujours possible que la valeur référencée puisse être modifiée, de sorte que la sémantique attendue de la réussite de nom ne tient pas tout à fait de contrôle. Outre cela, je ne suis toujours pas sûr de ce qui est demandé.



3
votes

http://fr.wikipedia.org/wiki/evaluation_strategy#call_by_name

Dans la valeur de l'appel, vous évaluez les arguments, récupérant les valeurs qui sont ensuite transmises à la fonction. foo (barre ()) est évalué comme arg = bar (); , puis foo (arg) est appelé, et dans le corps de la fonction, cette nouvelle allouée argument La variable est accessible, modifiable, ...

Dans l'appel par nom, vous substituez dans le corps de la fonction toutes les références aux arguments par leur code utilisé pendant l'appel. Ensuite, évaluez le corps, vous évaluerez les arguments. FOO (barre ()) avec foo (arg) {retour arg; } sera évalué comme foo (arg) {barre de retour (); }


0 commentaires

2
votes

appel par nom Travailler comme Appelez par référence Lorsque le paramètre réel soit Stracter , mais soit différent lorsque le paramètre réel est expression ou Array puis le paramètre réel est réévalué sur chaque accès.

Voici un exemple simple xxx

  • Appelez par valeur Sortie => 10 10
  • Appelez par nom Sortie => 10 11

1 commentaires

J'ai vu cet exemple ailleurs, vous devriez citer