En pseudocódigo, ¿qué significa: =?

25

La sección titulada Implementación Algorítmica tiene el siguiente código:

// 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

¿Qué significa: = significa?


fuente
2
Aprendí que era de la notación de filosofía y lógica, que lo define como ": = definido como", por lo que x: = 1 es x se define como 1.
Patrick Hughes
3
Cuando tomé la informática AP en 1990, usamos Pascal como nuestro lenguaje de aprendizaje. Siempre pronuncié :=como "se vuelve igual a". De hecho, prefiero esto sobre =y ==dado que "=" en lenguaje natural es un operador de comparación (o al menos una declaración de verdad).
TecBrat

Respuestas:

59

: = es el operador de asignación para idiomas que usan pruebas de igualdad de signo de igual igual. El más conocido de esos idiomas es Pascal. Debido a la influencia de C, la mayoría de los lenguajes cambiaron a = para asignación y == para prueba. Algunos textos antiguos y autores que fueron entrenados en tales estilos usan: = para pseudocódigo. A veces ves flechas <- también para la asignación .

Del artículo:

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)

Algunos idiomas modernos usan flechas para la asignación; más notablemente R , que lo usa para la asignación global mientras usa los iguales únicos (=) para la asignación local.

De los Conceptos de Lenguajes de Programación de Sebesta y las notas de clase del Dr. KN King, aprendemos que los estándares de asignación se remontan mucho más allá de C o Pascal. Parece que en 1958, cuando Algol estaba siendo diseñado, se decidió utilizar: = para la asignación. El comité estaba compuesto por representantes estadounidenses y europeos. Algunos de los alemanes en el comité estaban familiarizados con el lenguaje Plankalkul de Konrad Zuse (que se redactó durante la Segunda Guerra Mundial pero no se publicó hasta 1972 y no se implementó hasta 2005) y querían que la asignación siguiera el método de asignación propuesto para ese idioma, que erab+c => adonde b + c se asigna a a. El comité cambió esto a =: con el argumento de que el método de ingresar a los programas en el momento llamado golpe de teclado no tenía un ">" para usar. Entonces se comprometieron en los dos puntos iguales. Sin embargo, los estadounidenses que estaban familiarizados con FORTRAN (no tenía minúsculas hasta 1990) querían que la asignación operara a la izquierda, ya que así fue como FORTRAN lo hizo.

Así que lograron que se cambiara a: = en su lugar, y que la tarea funcionara hacia la izquierda en lugar de hacia la derecha al estilo de FORTRAN (que es un idioma implementado conocido) en lugar de Plankalkul (un idioma prácticamente desconocido fuera de Alemania y no implementado) . Algol 60 influyó fuertemente en todos los lenguajes imperativos posteriores importantes, incluidos Pascal y C. Por lo tanto, Pascal mantuvo la sintaxis de ALGOL para la asignación y ambos mantuvieron la zurda de la asignación.

ALGOL fue diseñado para ser fácil de leer y cercano a la notación matemática. Fue el estándar de facto (y básicamente de jure) para escribir algoritmos en revistas para los próximos 20 años. Por lo tanto, los instructores y los informáticos educados desde 1960 hasta alrededor de 1980 habrían estado familiarizados con ese estilo de notación.

El lanzamiento de IBM 029 Keypunch en 1964 permitió caracteres> y <, lo que provocó su inclusión en C, entre otros.

Ingeniero mundial
fuente
1
Además de los puntos y comas faltantes y el tipo de retorno de función, este código de todos modos se parece a PASCAL, MODULA o algún otro lenguaje Wirth.
Ingo
77
La mayoría de los pseudocódigos se utilizan :=para la asignación. las personas con conocimientos matemáticos también favorecerán esto.
enone
3
Solo para agregar que todavía se usa mucho en PL / SQL.
Jalayn
1
no sé por qué, pero la flecha izquierda como asignación me vuelve loco 9
shabunc
2
Pascal (y el resto de "los idiomas Wirth") lo obtuvo de ALGOL, que lo obtuvo de la notación matemática.
Mason Wheeler
18

Solo una nota rápida y pedante. El pseudocódigo es bastante informal, por lo que ": =" significa solo lo que quiere que signifique. Como otros han dicho, los lenguajes específicos como Pascal usan ": =" para la asignación para evitar confusiones con "=" para la igualdad, mientras que otros lenguajes usan la combinación de "=" y "==" para el mismo propósito.

En lo que respecta al Pseudocódigo real , puede usar "=", "==", "igual", "se asigna a", ": =", "tiene", "recibe", o lo que sea que flote su barco, solo siempre y cuando sea coherente, y el uso y el contexto dentro de su pseudocódigo sea claro.

S.Robins
fuente
6

Supongo que es una asignación (creo que es el operador de asignación en Delphi), así que en y [0]: = x [0] estás asignando el valor de x [0] a y [0].

Pero AFAIK no existe un pseudocódigo estándar , por lo que en teoría podría ser cualquier cosa: =).

Christophe Vanfleteren
fuente
8
@loudsight: Porque = ya tiene un significado muy diferente : igualdad. Usar un operador que ya tiene un significado bien entendido para algo diferente sería extremadamente estúpido.
Jörg W Mittag
1
@ Jörg W Mittag Bueno, supongo que depende de quién sea la audiencia prevista. Me imagino que para la mayoría de los desarrolladores (Java, C / C ++, etc.) = significa asignación.
55
@loudsight: la mayoría de los desarrolladores ni siquiera nacieron cuando se escribió el primer pseudocódigo. En aquel entonces, eran en su mayoría personas con una sólida formación matemática, quienes escribían algoritmos, lo que hace :=la elección natural, porque en notación matemática x := vsignifica "dejar xser v" en lugar de x = v, lo que significa " xigual v" y, por lo tanto, causar confusión.
back2dos
8
Si hubiera un pseudocódigo estándar, veríamos muchos pseudocseudocódigo.
2
@ back2dos, etc. Incluso hoy en día el uso =para la asignación es confuso. Todavía recuerdo, hace mucho tiempo, cuando aprendí a programar, lo confuso que era ver x = x + 1. Una vez que hayas estudiado matemáticas básicas de la escuela secundaria, x = x + 1solo parece imposible galimatías contradictorias. Luego leí un excelente libro sobre informática para el lector general ( creo que fue esto ) que usé <-para la asignación. x <- x + 1Es mucho más fácil de entender.
MarkJ
-1

Por lo general, significa lo mismo que en matemáticas: asignación.

Jörg W Mittag
fuente
66
No hay tal cosa como "asignación" en matemáticas, que yo sepa.
Ingo
77
en matemáticas, :=generalmente significa "se define como" o "es igual por definición".
enone
3
@Ingo: "escribir el patrón de bits para el valor de la expresión x en una ubicación de memoria que se llama y" es completamente diferente de una asignación en lenguajes de programación. Lo que describe es una posible implementación de la ejecución de declaraciones de asignación.
back2dos
3
@Ingo: no estoy de acuerdo. Sin mencionar el hecho de que, en el caso de las propiedades, una asignación produce una llamada y el hecho de que una gran parte del código se ejecuta en máquinas virtuales o por intérpretes, en lugar de directamente en la "arquitectura actual", incluso las asignaciones a variables no es necesario que resulte en tal operación, debido a la optimización. Con pocas excepciones, un lenguaje debe usarse de acuerdo con sus especificaciones y no con base en algunos supuestos sobre su implementación. Todo lo que realmente puede decir acerca de las asignaciones a las variables es que la variable denominada y se recupera al valor de la expresión x.
back2dos
3
@Ingo: No, no es una tontería. Compilar x := 1; y := 2; if (x = 1) y := 3como si fuera y := 3una optimización razonable (suponiendo que x no se use más adelante). De 3 asignaciones, 2 se implementan mediante análisis estático. Su "definición" de asignaciones es una declaración general, que simplemente no se cumple sin numerosos supuestos de los que no debería depender una definición de este término.
back2dos