En pseudo-code, que signifie: =?

25

La section intitulée Implémentation algorithmique contient le code suivant:

// Return RC low-pass filter output samples, given input samples,
 // time interval dt, and time constant RC
 function lowpass(real[0..n] x, real dt, real RC)
   var real[0..n] y
   var real α := dt / (RC + dt)
   y[0] := x[0]
   for i from 1 to n
       y[i] := α * x[i] + (1-α) * y[i-1]
   return y

que signifie: = signifie?


la source
2
J'ai appris que c'était de la philosophie et de la notation logique, qui le définit comme ": = défini pour être" donc x: = 1 est x est défini pour être 1.
Patrick Hughes
3
Quand j'ai commencé l'informatique AP en 1990, nous avons utilisé Pascal comme langage d'apprentissage. J'ai toujours prononcé :="devient égal à". En fait, je préfère cela =et ==puisque "=" en langage naturel est un opérateur de comparaison (ou au moins une déclaration de vérité.)
TecBrat

Réponses:

59

: = est l'opérateur d'affectation pour les langues qui utilisent un test d'égalité de signe égal. Le plus connu de ces langages est Pascal. En raison de l'influence de C, la plupart des langues sont passées à = pour l'affectation et == pour les tests. Certains textes et auteurs plus anciens qui ont été formés à de tels styles utilisent: = pour le pseudocode. Vous voyez parfois des flèches <- également pour l' affectation .

De l'article:

input: an array a of length n with array elements numbered 0 to n − 1

inc ← round(n/2)
while inc > 0 do:
    for i = inc .. n − 1 do:
        temp ← a[i]
        j ← i
        while j ≥ inc and a[j − inc] > temp do:
            a[j] ← a[j − inc]
            j ← j − inc
        a[j] ← temp
    inc ← round(inc / 2.2)

Certaines langues modernes utilisent des flèches pour l'affectation; plus particulièrement R , qui l'utilise pour l'affectation globale tout en utilisant le seul égal (=) pour l'affectation locale.

Des concepts de Sebesta des langages de programmation et des notes de classe du Dr KN King, nous apprenons que les normes d'affectation remontent beaucoup plus loin que C ou Pascal. Il semble qu'en 1958, lors de la conception d'Algol, il a été décidé d'utiliser: = pour l'affectation. Le comité était composé de représentants américains et européens. Certains des Allemands du comité connaissaient la langue de Plankalkul de Konrad Zuse (qui a été rédigée pendant la Seconde Guerre mondiale mais qui n'a été publiée qu'en 1972 et qui n'a pas été mise en œuvre avant 2005) et souhaitaient que l'affectation suive la méthode d'affectation proposée dans cette langue, qui étaitb+c => aoù b + c est affecté à a. Le comité a changé cela en =: au motif que la méthode de saisie des programmes à l'époque appelée clavier, n'avait pas de ">" à utiliser. Ils ont donc compromis sur le colon égal. Cependant, les Américains connaissant FORTRAN (il n'avait pas de minuscules jusqu'en 1990) voulaient que l'affectation opère à gauche puisque c'était ainsi que FORTRAN le faisait.

Ils ont donc réussi à le changer en: = à la place et ont fait fonctionner l'affectation vers la gauche plutôt que vers la droite dans le style de FORTRAN (étant une langue implémentée connue) plutôt que Plankalkul (une langue pratiquement inconnue en dehors de l'Allemagne et non implémentée) . Algol 60 a fortement influencé tous les principaux langages impératifs ultérieurs, y compris Pascal et C. Ainsi, Pascal a conservé la syntaxe d'ALGOL pour l'affectation et les deux ont conservé la gaucherie de l'affectation.

ALGOL a été conçu pour être facile à lire et proche de la notation mathématique. C'était la norme de facto (et essentiellement de jure) pour l'écriture d'algorithmes dans des revues pour les 20 prochaines années. Par conséquent, les instructeurs et les informaticiens formés de 1960 à environ 1980 auraient été familiers avec ce style de notation.

La sortie de l' IBM 029 Keypunch en 1964 a permis les caractères> et <, provoquant ainsi leur inclusion dans C entre autres.

Ingénieur du monde
la source
1
Mis à part les points-virgules manquants et le type de retour de fonction, ce code ressemble de toute façon à PASCAL, MODULA ou à un autre langage Wirth.
Ingo
7
la plupart des pseudo-codes sont utilisés :=pour l'attribution. les personnes ayant des connaissances en mathématiques y seront également favorables.
oenone
3
Juste pour ajouter qu'il est encore très utilisé pratiquement en PL / SQL.
Jalayn
1
Je ne sais pas pourquoi, mais la flèche gauche comme affectation me rend fou 9
shabunc
2
Pascal (et le reste des "langues Wirth") l'ont obtenu d'ALGOL, qui l'a obtenu de la notation mathématique.
Mason Wheeler
18

Juste une note rapide et pédante. Le pseudocode est assez informel, donc ": =" signifie seulement ce que vous voulez qu'il signifie. Comme d'autres l'ont dit, des langages spécifiques tels que Pascal utilisent ": =" pour l'affectation afin d'éviter toute confusion avec "=" pour l'égalité, tandis que d'autres langages utilisent la combinaison de "=" et "==" dans le même but.

En ce qui concerne le pseudocode réel , vous pouvez utiliser "=", "==", "égal", "est affecté à", ": =", "a", "reçoit", ou tout ce qui fait flotter votre bateau, juste tant que vous êtes cohérent, et l'utilisation et le contexte sont dans votre pseudocode est clair.

S.Robins
la source
6

Je suppose que c'est l'affectation (je pense que c'est l'opérateur d'affectation dans Delphi), donc dans y [0]: = x [0] vous affectez la valeur de x [0] à y [0].

Mais AFAIK n'existe pas de pseudo-code standard , donc en théorie cela pourrait être n'importe quoi: =).

Christophe Vanfleteren
la source
8
@loudsight: Parce que a = déjà une signification très différente : l'égalité. Utiliser un opérateur qui a déjà une signification bien comprise pour quelque chose de différent serait extrêmement stupide.
Jörg W Mittag
1
@ Jörg W Mittag Eh bien, je suppose que cela dépend de qui est le public visé. J'imagine pour la plupart des développeurs (Java, C / C ++, etc.) = signifie affectation.
5
@loudsight: La plupart des développeurs n'étaient même pas nés, lorsque le premier pseudo-code a été écrit. À l'époque, ce sont principalement des personnes ayant une solide formation mathématique qui ont écrit des algorithmes, ce qui fait :=le choix naturel, car dans la notation mathématique, cela x := vsignifie ` ` laisser xêtre v'' par opposition à x = v, ce qui signifie x`` égal v'' et serait donc source de confusion.
back2dos
8
S'il y avait un pseudo-code standard, nous verrions beaucoup de pseudo-code.
2
@ back2dos etc Même aujourd'hui, l'utilisation =pour l'affectation est source de confusion. Je me souviens encore, il y a longtemps, lorsque j'ai appris à programmer, à quel point c'était déroutant de voir x = x + 1. Une fois que vous avez étudié les mathématiques de base au lycée, cela x = x + 1ressemble à un charabia contradictoire impossible. Ensuite, j'ai lu un excellent livre sur l'informatique pour le lecteur général ( je pense que c'était celui-ci ) qui servait <-de devoir. x <- x + 1est beaucoup plus facile à comprendre.
MarkJ
-1

Cela signifie généralement la même chose que cela signifie en mathématiques: l'affectation.

Jörg W Mittag
la source
6
Il n'y a pas de "devoir" en mathématiques à ma connaissance.
Ingo
7
en mathématiques, :=signifie généralement "est défini comme" ou "est égal par définition".
oenone
3
@Ingo: "écrire le modèle de bits pour la valeur de l'expression x dans un emplacement mémoire nommé y" est complètement différent d'une affectation dans les langages de programmation. Ce que vous décrivez est une implémentation possible de l'exécution des instructions d'affectation.
back2dos
3
@Ingo: je ne suis pas d'accord. Sans parler du fait que, dans le cas des propriétés, une affectation génère un appel, et du fait qu'une grande partie du code est exécutée dans des machines virtuelles ou par des interprètes, plutôt que directement sur «l'architecture actuelle», même des affectations à des variables n'a pas besoin d'entraîner une telle opération, en raison de l'optimisation. À quelques exceptions près, un langage doit être utilisé conformément à ses spécifications et non sur la base de certaines hypothèses concernant sa mise en œuvre. Tout ce que vous pouvez vraiment dire sur les affectations aux variables, c'est que la variable nommée y est rebondie à la valeur de l'expression x.
back2dos
3
@Ingo: Non, ce n'est pas un non-sens. Compiler x := 1; y := 2; if (x = 1) y := 3comme si c'était juste y := 3est une optimisation raisonnable (en supposant que x n'est pas utilisé plus tard). Sur 3 affectations, 2 sont mises en œuvre au moyen d'une analyse statique. Votre «définition» des affectations est une déclaration générale, qui ne tient tout simplement pas sans de nombreuses hypothèses sur lesquelles une définition de ce terme ne devrait pas dépendre.
back2dos