In pseudo codice cosa significa: =?


25

La sezione intitolata Implementazione algoritmica ha il seguente codice:

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

cosa significa: =?


2
Ho imparato che era dalla filosofia e dalla notazione logica, che la definisce come ": = definita come", quindi x: = 1 è x è definita come 1.
Patrick Hughes,

3
Quando ho preso l'informatica nel 1990, abbiamo usato Pascal come linguaggio di apprendimento. Ho sempre pronunciato :=come "diventa uguale a". In realtà preferisco questo oltre =e ==poiché "=" in linguaggio naturale è un operatore di confronto (o almeno una dichiarazione di verità).
TecBrat,

Risposte:


59

: = è l'operatore di assegnazione per le lingue che utilizzano il test di uguaglianza dei segni di uguale singolo. La più conosciuta di quelle lingue è Pascal. A causa dell'influenza di C, la maggior parte delle lingue è passata a = per assegnazione e == per verifica. Alcuni testi e autori più vecchi che sono stati addestrati in tali stili usano: = per pseudocodice. A volte vedi le frecce <- anche per l' assegnazione .

Dall'articolo:

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)

Alcune lingue moderne usano le frecce per il compito; in particolare R , che lo usa per l'assegnazione globale mentre usa i singoli uguali (=) per l'assegnazione locale.

Dai concetti di Sebesta sui linguaggi di programmazione e dalle note di lezione del Dr. KN King apprendiamo che gli standard di assegnazione risalgono a molto più lontano di C o Pascal. Sembra che nel 1958, quando fu progettato Algol, fu deciso di utilizzare: = per incarico. Il comitato era composto da rappresentanti americani ed europei. Alcuni tedeschi del comitato avevano familiarità con il linguaggio Plankalkul di Konrad Zuse (che fu redatto durante la seconda guerra mondiale ma non pubblicato fino al 1972 e non implementato fino al 2005) e volevano che l'incarico seguisse il metodo di assegnazione proposto di quella lingua che erab+c => adove b + c è assegnato a a. Il comitato ha cambiato questo in =: sulla base del fatto che il metodo di inserimento dei programmi in quel momento chiamato keypunch, non aveva un ">" da usare. Quindi si sono compromessi sulla parità dei due punti. Tuttavia, gli americani che avevano familiarità con FORTRAN (non aveva lettere minuscole fino al 1990) volevano che l'incarico operasse a sinistra poiché era così che FORTRAN lo faceva.

Così sono riusciti a farlo cambiare in: = invece e hanno fatto sì che il compito operasse verso sinistra piuttosto che verso destra nello stile di FORTRAN (essendo una lingua implementata conosciuta) piuttosto che Plankalkul (una lingua praticamente sconosciuta fuori dalla Germania e non implementata) . L'Algol 60 ha fortemente influenzato tutte le principali lingue imperative successive, tra cui Pascal e C. In tal modo Pascal ha mantenuto la sintassi di ALGOL per il compito ed entrambi hanno mantenuto la mancinità del compito.

ALGOL è stato progettato per essere facile da leggere e vicino alla notazione matematica. Fu lo standard de facto (e sostanzialmente de jure) per la scrittura di algoritmi su riviste per i successivi 20 anni. Pertanto, istruttori e scienziati informatici istruiti dal 1960 al 1980 circa avrebbero avuto familiarità con questo stile di notazione.

Il rilascio di IBM 029 Keypunch nel 1964 permise di> e <caratteri, spingendo così la loro inclusione in C tra gli altri.


1
A parte i punti e virgola mancanti e il tipo restituito dalla funzione, questo codice sembra comunque PASCAL, MODULA o qualche altro linguaggio di Wirth.
Ingo,

7
la maggior parte degli pseudo codici utilizza :=per l'assegnazione. anche le persone con un background matematico favoriranno questo.
oenone,

3
Solo per aggiungere che è ancora molto usato praticamente in PL / SQL.
Jalayn,

1
non so perché, ma la freccia sinistra come compito mi fa impazzire 9
shabunc

2
Pascal (e il resto delle "lingue di Wirth") lo ottenne da ALGOL, che lo ottenne da notazione matematica.
Mason Wheeler,

18

Solo una nota rapida e pedante. Lo pseudocodice è piuttosto informale, quindi ": =" significa solo ciò che vuoi che significhi. Come altri hanno già detto, linguaggi specifici come Pascal usano ": =" per assegnazione per evitare confusione con "=" per uguaglianza, mentre altre lingue usano la combinazione di "=" e "==" per lo stesso scopo.

Per quanto riguarda lo Pseudocodice reale , puoi usare "=", "==", "uguale a", "è assegnato a", ": =", "has", "riceve", o qualunque cosa galleggi la tua barca, solo fintanto che sei coerente e l'utilizzo e il contesto all'interno del tuo pseudocodice sono chiari.


6

Immagino che sia un incarico (penso che sia l'operatore di assegnazione in Delphi), quindi in y [0]: = x [0] stai assegnando il valore di x [0] a y [0].

Ma AFAIK non esiste un pseudo codice standard , quindi in teoria potrebbe essere qualsiasi cosa: =).


8
@loudsight: Perché ha = già un significato molto diverso : uguaglianza. Usare un operatore che ha già un significato ben compreso per qualcosa di diverso sarebbe estremamente stupido.
Jörg W Mittag,

1
@ Jörg W Mittag Beh, immagino che dipenda da chi è il pubblico previsto. Immagino per la maggior parte degli sviluppatori (Java, C / C ++, ecc.) = Significa assegnazione.

5
@loudsight: La maggior parte degli sviluppatori non era nemmeno nata, quando fu scritto il primo pseudo-codice. All'epoca, erano soprattutto le persone con un forte background matematico a scrivere degli algoritmi, che fanno :=la scelta naturale, perché in notazione matematica x := vsignifica "lascia xstare v" in contrapposizione x = v, che significa " xuguale v" e quindi causerebbe confusione.
back2dos,

8
Se esistesse uno pseudo codice standard, vedremmo un sacco di pseudo codice.

2
@ back2dos ecc. Anche oggi l'utilizzo =per l'assegnazione è confuso. Ricordo ancora, molto tempo fa, quando ho imparato a programmare per la prima volta, quanto fosse confuso vedere x = x + 1. Una volta che hai studiato matematica di base al liceo, x = x + 1sembra impossibile incomprensibile contraddizione. Successivamente ho letto un libro eccellente sull'informatica per il lettore generale ( penso che fosse questo ) che ha usato <-per l'incarico. x <- x + 1è molto più facile da capire.
MarkJ,

-1

Di solito significa la stessa cosa che significa in matematica: compito.


6
Per quanto ne so, in matematica non esiste una "assegnazione".
Ingo

7
in matematica, di :=solito significa "è definito come" o "è uguale per definizione".
oenone

3
@Ingo: "scrivere il modello di bit per il valore dell'espressione x in una posizione di memoria che si chiama y" è completamente diverso da un compito nei linguaggi di programmazione. Ciò che descrivi è una possibile implementazione dell'esecuzione delle istruzioni di assegnazione.
back2dos,

3
@Ingo: non sono d'accordo. Per non parlare del fatto che, nel caso di proprietà, un'assegnazione produce una chiamata e il fatto che una vasta parte del codice viene eseguita in macchine virtuali o da interpreti, piuttosto che direttamente sull'architettura attuale, persino assegnazioni a variabili non è necessario comportare tale operazione, a causa dell'ottimizzazione. Con poche eccezioni, un linguaggio dovrebbe essere usato in base alle sue specifiche e non sulla base di alcune ipotesi sulla sua implementazione. Tutto quello che puoi veramente dire sulle assegnazioni alle variabili è che la variabile denominata y è rimbalzata sul valore dell'espressione x.
back2dos,

3
@Ingo: No, non è una sciocchezza. Compilare x := 1; y := 2; if (x = 1) y := 3come se fosse solo y := 3una ragionevole ottimizzazione (supponendo che x non venga utilizzato in seguito). Di 3 incarichi 2 sono implementati mediante analisi statica. La tua "definizione" di incarichi è un'affermazione generale, che semplicemente non regge senza numerosi presupposti su cui una definizione di questo termine non dovrebbe dipendere.
back2dos,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.