Co w pseudokodzie oznacza: =?

25

Sekcja zatytułowana Implementacja algorytmiczna zawiera następujący kod:

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

co znaczy: =?


źródło
2
Dowiedziałem się, że pochodzi z filozofii i notacji logicznej, która definiuje go jako „: = zdefiniowane jako”, więc x: = 1 oznacza, że ​​x jest zdefiniowane jako 1.
Patrick Hughes
3
Kiedy wziąłem informatykę AP w 1990 roku, używaliśmy Pascala jako naszego języka nauki. Zawsze wymawiałem :=jako „staje się równy”. Właściwie wolę to, =a ==ponieważ „=” w języku naturalnym jest operatorem porównania (lub przynajmniej stwierdzeniem prawdy.)
TecBrat

Odpowiedzi:

59

: = jest operatorem przypisania dla języków korzystających z testu równości pojedynczego znaku równości. Najbardziej znanym z tych języków jest Pascal. Ze względu na wpływ języka C większość języków zmieniła na = w celu przypisania i == w celu przetestowania. Niektóre starsze teksty i autorzy, którzy zostali przeszkoleni w takich stylach, używają: = dla pseudokodu. Czasami widzisz strzałki <- również do przypisania .

Z artykułu:

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)

Niektóre współczesne języki używają strzałek do przypisywania; w szczególności R , który wykorzystuje go do przypisania globalnego, a pojedynczą równość (=) do przypisania lokalnego.

Z Koncepcji Języków Programowych Sebesty oraz notatek dr Dr. KN Kinga dowiadujemy się, że standardy przydziału sięgają znacznie dalej niż C lub Pascal. Wygląda na to, że w 1958 r., Kiedy projektowano Algol, postanowiono użyć: = do przypisania. Komitet składał się z przedstawicieli amerykańskich i europejskich. Niektórzy Niemcy w komitecie znali język Plankalkul Konrada Zuse'a (który został opracowany podczas II wojny światowej, ale nie został opublikowany do 1972 r. I nie został wdrożony do 2005 r.) I chcieli, aby zlecenie było zgodne z proponowaną metodą przypisania tego języka, która byłab+c => agdzie b + c jest przypisane do a. Komitet zmienił to na =: na tej podstawie, że metoda wprowadzania programów w tym czasie nazywana keypunchem nie miała opcji „>”. Więc poszli na kompromis na okrężnicy. Jednak Amerykanie znający FORTRAN (nie miał małych liter aż do 1990 r.) Chcieli, aby to zadanie działało po lewej stronie, ponieważ tak właśnie robił FORTRAN.

Udało im się to zmienić na: = zamiast tego i zlecenie działało w lewo, a nie w prawo w stylu FORTRAN (będącym znanym zaimplementowanym językiem), a nie Plankalkul (praktycznie nieznany język poza Niemcami i niewdrożony) . Algol 60 silnie wpłynął na wszystkie główne kolejne języki imperatywne, w tym Pascal i C. W ten sposób Pascal zachował składnię ALGOL-a dla przypisania i oba zachowały lewostronność przypisania.

ALGOL został zaprojektowany tak, aby był łatwy do odczytania i bliski notacji matematycznej. Był to de facto (i w zasadzie de jure) standard pisania algorytmów w czasopismach przez następne 20 lat. Dlatego instruktorzy i informatycy kształceni od 1960 r. Do około 1980 r. Znaliby ten styl zapisu.

Wydanie Keypuncha IBM 029 w 1964 roku pozwoliło na znaki> i <, co skłoniło ich do włączenia do C między innymi.

Inżynier świata
źródło
1
Poza brakującymi średnikami i typem powrotu funkcji ten kod i tak wygląda jak PASCAL, MODULA lub inny język Wirth.
Ingo
7
większość pseudo kodów używa :=do przypisania. ludzie o matematycznym pochodzeniu też to sprzyjają.
oenone,
3
Wystarczy dodać, że nadal jest bardzo często używany praktycznie w PL / SQL.
Jalayn
1
nie wiem dlaczego, ale lewa strzałka jako zadanie doprowadza mnie do szaleństwa 9
shabunc
2
Pascal (i reszta „języków Wirtha”) otrzymał go od ALGOL, który otrzymał go z notacji matematycznej.
Mason Wheeler,
18

Tylko krótka i pedantyczna nuta. Pseudokod jest dość nieformalny, więc „: =” oznacza tylko to, co chcesz. Jak powiedzieli inni, określone języki, takie jak Pascal, używają „: =” do przypisywania, aby uniknąć pomyłki z „=” dla równości, podczas gdy inne języki używają kombinacji „=” i „==” w tym samym celu.

Jeśli chodzi o rzeczywisty Pseudokod , możesz użyć „=”, „==”, „równa się”, „jest przypisany do”, „: =”, „ma”, „odbiera” lub cokolwiek płynie po twojej łodzi, po prostu tak długo, jak jesteś konsekwentny, a użycie i kontekst znajdują się w twoim pseudokodzie, jest jasne.

S.Robins
źródło
6

Zgaduję, że to przypisanie (myślę, że to operator przypisania w Delphi), więc w y [0]: = x [0] przypisujesz wartość x [0] do y [0].

Ale AFAIK nie ma czegoś takiego jak standardowy pseudo kod , więc teoretycznie może to być cokolwiek: =).

Christophe Vanfleteren
źródło
8
@loudsight: Ponieważ ma = już zupełnie inne znaczenie: równość. Używanie operatora, który już ma dobrze zrozumiałe znaczenie dla czegoś innego, byłoby wyjątkowo głupie.
Jörg W Mittag,
1
@ Jörg W Mittag Cóż, myślę, że to zależy od tego, kto jest zamierzonym odbiorcą. Wyobrażam sobie, że dla większości programistów (Java, C / C ++ itp.) = Oznacza przypisanie.
5
@loudsight: Większość programistów nawet się nie urodziła, kiedy napisano pierwszy pseudo-kod. Wtedy to głównie ludzie z silnego zaplecza matematycznego zapisali algorytmy, co stanowi :=naturalny wybór, ponieważ w notacji matematycznej x := voznacza „pozwól xbyć v” w przeciwieństwie do x = v, co oznacza „ xrówna się v”, a zatem spowodowałoby zamieszanie.
back2dos,
8
Gdyby istniał standardowy pseudo-kod, zobaczylibyśmy wiele pseudo-pseudo kodu.
2
@ back2dos itp. Nawet dzisiaj korzystanie =z przydziału jest mylące. Wciąż pamiętam, dawno temu, kiedy nauczyłem się programować, jak mylące było to widzieć x = x + 1. Po przestudiowaniu podstawowych matematyki w szkole średniej x = x + 1wygląda to jak niemożliwy sprzeczny bełkot. Następnie przeczytałem doskonałą książkę na temat informatyki dla ogólnego czytelnika ( myślę, że to była ta ), która posłużyła się <-zadaniami. x <- x + 1jest znacznie łatwiejszy do zrozumienia.
MarkJ
-1

Zazwyczaj oznacza to to samo, co w matematyce: zadanie.

Jörg W Mittag
źródło
6
Według mojej wiedzy nie ma czegoś takiego jak „przydział” w matematyce.
Ingo
7
w matematyce :=zwykle oznacza „jest zdefiniowany jako” lub „jest z definicji równy”.
oenone,
3
@Ingo: „zapisz wzór bitowy dla wartości wyrażenia x w miejscu pamięci o nazwie y” różni się całkowicie od przypisania w językach programowania. Opisujesz możliwą implementację wykonywania instrukcji przypisania.
back2dos,
3
@Ingo: Nie zgadzam się. Nie mówiąc już o tym, że w przypadku właściwości przypisanie wywołuje wywołanie, a fakt, że znaczna część kodu jest wykonywana na maszynach wirtualnych lub przez tłumaczy, a nie bezpośrednio na „bieżącej architekturze”, nawet przypisania do zmiennych nie musi powodować takiej operacji ze względu na optymalizację. Z nielicznymi wyjątkami należy używać języka zgodnie ze specyfikacjami, a nie na podstawie pewnych założeń dotyczących jego implementacji. Jedyne, co naprawdę można powiedzieć o przypisaniach do zmiennych, to to, że zmienna o nazwie y jest odbijana do wartości wyrażenia x.
back2dos,
3
@Ingo: Nie, to nie bzdury. Kompilacja x := 1; y := 2; if (x = 1) y := 3tak, jakby to była po prostu y := 3rozsądna optymalizacja (przy założeniu, że x nie będzie później używane). Z 3 zadań 2 są realizowane za pomocą analizy statycznej. Twoja „definicja” zadań jest ogólną instrukcją, która po prostu nie mieści się bez wielu założeń, od których definicja tego terminu nie powinna zależeć.
back2dos