No pseudo-código, o que significa: =?

25

A seção intitulada Implementação algorítmica possui o seguinte 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

o que significa: =?


fonte
2
Eu aprendi que era da filosofia e da notação lógica, que define como ": = definido como sendo" para x: = 1 é x é definido como 1.
Patrick Hughes
3
Quando eu cursei ciências da computação em AP, em 1990, usamos Pascal como nosso idioma de aprendizado. Eu sempre pronunciei :=como "se torna igual a". Eu realmente prefiro isso ao longo =e ==uma vez que "=" em linguagem natural é um operador de comparação (ou pelo menos uma declaração de verdade.)
TecBrat

Respostas:

59

: = é o operador de atribuição para idiomas que usam teste de igualdade de sinal de igual único. O mais conhecido desses idiomas é o Pascal. Devido à influência de C, a maioria dos idiomas mudou para = para atribuição e == para teste. Alguns textos e autores mais antigos treinados em tais estilos usam: = para pseudocódigo. Às vezes, você vê setas <- também para atribuição .

Do artigo:

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)

Alguns idiomas modernos usam setas para atribuição; mais notavelmente R , que o utiliza para atribuição global, enquanto usa os únicos iguais (=) para atribuição local.

Com os Conceitos de Linguagens de Programação da Sebesta e as notas de aula do Dr. KN King, aprendemos que os padrões de atribuição remontam muito mais longe do que C ou Pascal. Parece que em 1958, quando Algol estava sendo projetado, foi decidido usar: = para atribuição. O comitê era composto por representantes americanos e europeus. Alguns dos alemães no comitê estavam familiarizados com o idioma Plankalkul de Konrad Zuse (redigido durante a Segunda Guerra Mundial, mas não publicado até 1972 e não implementado até 2005) e queria que a tarefa seguisse o método de atribuição proposto para essa língua, que erab+c => aonde b + c é atribuído a a. O comitê mudou isso para =: com o argumento de que o método de entrada de programas na época chamado de soco de teclas não tinha um ">" para usar. Então eles comprometeram o cólon igual. No entanto, os americanos familiarizados com a FORTRAN (que não tinham letras minúsculas até 1990) queriam que a missão funcionasse para a esquerda, pois era assim que a FORTRAN fazia isso.

Assim, eles conseguiram alterá-lo para: = em vez disso, e tiveram a atribuição operando para a esquerda, e não para a direita, no estilo FORTRAN (sendo uma linguagem implementada conhecida), em vez de Plankalkul (uma linguagem praticamente desconhecida fora da Alemanha e não implementada) . O Algol 60 influenciou fortemente todas as principais linguagens imperativas subsequentes, incluindo Pascal e C. Assim, Pascal manteve a sintaxe da ALGOL para atribuição e ambas mantiveram a mão esquerda da atribuição.

O ALGOL foi projetado para ser fácil de ler e próximo à notação matemática. Era o padrão de fato (e basicamente de jure) para escrever algoritmos em periódicos pelos próximos 20 anos ou mais. Portanto, instrutores e cientistas da computação formados entre 1960 e 1980 teriam familiarizado com esse estilo de notação.

O lançamento do IBM 029 Keypunch em 1964 permitiu caracteres> e <, solicitando sua inclusão em C, entre outros.

Engenheiro Mundial
fonte
1
Além de ponto-e-vírgula e retorno de função ausentes, esse código parece PASCAL, MODULA ou alguma outra linguagem Wirth.
Ingo
7
a maioria dos pseudo códigos usa :=para atribuição. pessoas com formação matemática também irão favorecer isso.
Enone
3
Apenas para acrescentar que ainda é muito usado praticamente em PL / SQL.
Jalayn
1
Não sei por que, mas esquerda seta como atribuição apenas me enlouquece 9
shabunc
2
Pascal (e o restante das "línguas Wirth") obteve da ALGOL, que obteve notação matemática.
Mason Wheeler
18

Apenas uma nota rápida e pedante. O pseudocódigo é bastante informal, então ": =" significa apenas o que você quer que ele signifique. Como outros já disseram, idiomas específicos como Pascal usam ": =" para atribuição para evitar confusão com "=" para igualdade, enquanto outros idiomas usam a combinação de "=" e "==" para a mesma finalidade.

No que diz respeito ao Pseudocódigo real , você pode usar "=", "==", "igual", "atribuído a", ": =", "possui", "recebe" ou o que flutua em seu barco, apenas desde que você seja consistente e o uso e o contexto estejam dentro do seu pseudocódigo, é claro.

S.Robins
fonte
6

Acho que é atribuição (acho que é o operador de atribuição em Delphi), então em y [0]: = x [0] você está atribuindo o valor de x [0] a y [0].

Mas o AFAIK não existe um pseudo-código padrão ; portanto, em teoria, pode ser qualquer coisa: =).

Christophe Vanfleteren
fonte
8
@ loudsight: Porque = tem um significado muito diferente : igualdade. Usar um operador que já tenha um significado bem entendido para algo diferente seria extremamente estúpido.
Jörg W Mittag
1
@ Jörg W Mittag Bem, acho que depende de quem é o público-alvo. Eu imaginaria para a maioria dos desenvolvedores (Java, C / C ++, etc.) = significa atribuição.
5
@loudsight: a maioria dos desenvolvedores nem nasceu, quando o primeiro pseudo-código foi escrito. Naquela época, eram principalmente pessoas de um fundo matemático forte que escreviam algoritmos, o que faz :=a escolha natural, porque em notação matemática x := vsignifica "let xbe v" em oposição a x = v, o que significa " xigual v" e, portanto, causaria confusão.
Aug2
8
Se houvesse um pseudo-código padrão, veríamos muitos pseudo-pseudo-código.
2
@ back2dos etc Até hoje o uso =para atribuição é confuso. Ainda me lembro, há muito tempo, quando aprendi a programar, quão confuso era ver x = x + 1. Depois de estudar matemática básica do ensino médio, x = x + 1parece uma bobagem contraditória impossível. Em seguida, li um excelente livro sobre ciência da computação para o leitor em geral ( acho que era isso ) que era usado <-para tarefas. x <- x + 1é muito mais fácil de entender.
MarkJ
-1

Geralmente significa o mesmo que significa em matemática: atribuição.

Jörg W Mittag
fonte
6
Não existe "atribuição" em matemática para o meu conhecimento.
Ingo
7
em matemática, :=geralmente significa "é definido como" ou "é igual por definição".
Enone
3
@ Ingo: "escreva o padrão de bits para o valor da expressão x em um local de memória chamado y" é completamente diferente de uma atribuição nas linguagens de programação. O que você descreve é ​​uma possível implementação da execução de instruções de atribuição.
Aug2
3
@ Ingo: eu discordo. Muito menos o fato de que, no caso de propriedades, uma atribuição gera uma chamada e o fato de uma grande parte do código ser executada em máquinas virtuais ou por intérpretes, em vez de diretamente na "arquitetura atual", até mesmo atribuições a variáveis não precisa resultar em tal operação, devido à otimização. Com poucas exceções, um idioma deve ser usado de acordo com suas especificações e não com base em algumas suposições sobre sua implementação. Tudo o que você pode realmente dizer sobre atribuições a variáveis ​​é que a variável chamada y é recuperada para o valor da expressão x.
Aug2
3
@ Ingo: Não, não é um absurdo. Compilar x := 1; y := 2; if (x = 1) y := 3como se fosse apenas y := 3uma otimização razoável (supondo que x não seja usado posteriormente). Das 3 atribuições 2 são implementadas por meio de análise estática. Sua "definição" de atribuições é uma afirmação geral, que simplesmente não se sustenta sem numerosas suposições de que uma definição desse termo não deveria depender.
Aug2