Was bedeutet im Pseudocode: =?

25

Der Abschnitt mit dem Titel " Algorithmic Implementation" enthält den folgenden Code:

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

was bedeutet: =?


quelle
2
Ich habe gelernt, dass es aus der Philosophie und der logischen Notation stammt, die es als ": = definiert als" definiert, also ist x: = 1 x definiert als 1.
Patrick Hughes
3
Als ich 1990 AP-Informatik studierte, verwendeten wir Pascal als unsere Lernsprache. Ich habe immer :="wird gleich" ausgesprochen . Eigentlich bevorzuge ich dies =und ==da "=" in natürlicher Sprache ein Vergleichsoperator ist (oder zumindest eine Aussage über die Wahrheit)
TecBrat

Antworten:

59

: = ist der Zuweisungsoperator für Sprachen, die Gleichheitszeichen-Gleichheitstests verwenden. Die bekannteste dieser Sprachen ist Pascal. Aufgrund des Einflusses von C wechselten die meisten Sprachen zu = Zuweisungs- und == Testzwecken. Einige ältere Texte und Autoren, die in solchen Stilen geschult wurden, verwenden: = für Pseudocode. Manchmal sehen Sie Pfeile <- auch für die Zuordnung .

Aus dem Artikel:

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)

Einige moderne Sprachen verwenden Pfeile für die Zuweisung. vor allem R , das es für die globale Zuweisung verwendet, während die einzelnen Gleichungen (=) für die lokale Zuweisung verwendet werden.

Aus Sebestas Konzepten für Programmiersprachen und den Notizen von Dr. KN King erfahren wir, dass die Zuweisungsstandards viel weiter zurückreichen als C oder Pascal. Es scheint, dass im Jahr 1958, als Algol entworfen wurde, beschlossen wurde, = für die Zuweisung zu verwenden. Das Komitee setzte sich aus amerikanischen und europäischen Vertretern zusammen. Einige der Deutschen im Komitee kannten Konrad Zuses Plankalkul-Sprache (die während des Zweiten Weltkriegs verfasst, aber erst 1972 veröffentlicht und erst 2005 umgesetzt wurde) und wollten, dass die Zuordnung der vorgeschlagenen Zuordnungsmethode dieser Sprache folgtb+c => awobei b + c a zugeordnet ist. Das Komitee änderte dies zu =: mit der Begründung, dass die Methode zur Eingabe von Programmen, die zu der Zeit als Keypunch bezeichnet wurde, kein ">" zu verwenden hatte. Also machten sie einen Kompromiss mit dem Doppelpunkt. Die Amerikaner, die mit FORTRAN vertraut waren (es gab bis 1990 keine Kleinbuchstaben), wollten jedoch, dass der Auftrag auf der linken Seite ausgeführt wird, da FORTRAN dies tat.

Sie haben es also geschafft, es in: = zu ändern und die Zuweisung nach links anstatt nach rechts im Stil von FORTRAN (eine bekannte implementierte Sprache) anstelle von Plankalkul (eine außerhalb Deutschlands praktisch unbekannte und nicht implementierte Sprache) ausführen zu lassen. . Algol 60 beeinflusste stark alle wichtigen nachfolgenden imperativen Sprachen, einschließlich Pascal und C. Somit behielt Pascal die ALGOL-Syntax für die Zuweisung bei und beide behielten die Linkshändigkeit der Zuweisung bei.

ALGOL wurde so entworfen, dass es leicht zu lesen ist und der mathematischen Notation nahe kommt. Es war de facto (und im Grunde genommen de jure) der Standard für das Schreiben von Algorithmen in Journalen für die nächsten über 20 Jahre. Aus diesem Grund wären Ausbilder und Informatiker, die zwischen 1960 und 1980 ausgebildet wurden, mit dieser Schreibweise vertraut gewesen.

Die Veröffentlichung des IBM 029 Keypunch im Jahr 1964 erlaubte> und <Zeichen und veranlasste somit unter anderem deren Aufnahme in C.

Weltingenieur
quelle
1
Abgesehen von fehlenden Semikolons und dem Rückgabetyp sieht dieser Code sowieso aus wie PASCAL, MODULA oder eine andere Wirth-Sprache.
Ingo
7
Die meisten Pseudocodes werden :=für die Zuweisung verwendet. Auch Menschen mit mathematischem Hintergrund werden dies befürworten.
Oenone
3
Nur um hinzuzufügen, dass es in PL / SQL immer noch sehr häufig verwendet wird.
Jalayn
1
Ich weiß nicht warum, aber der linke Pfeil als Aufgabe macht mich einfach verrückt 9
Shabunc
2
Pascal (und der Rest der "Wirth-Sprachen") bezog es von ALGOL, das es aus der mathematischen Notation bezog.
Mason Wheeler
18

Nur eine kurze und umständliche Notiz. Pseudocode ist recht informell, also bedeutet ": =" nur, was Sie wollen, dass es bedeutet. Wie andere gesagt haben, verwenden bestimmte Sprachen wie Pascal ": =" für die Zuweisung, um Verwechslungen mit "=" für die Gleichheit zu vermeiden, während andere Sprachen die Kombination von "=" und "==" für den gleichen Zweck verwenden.

Was den tatsächlichen Pseudocode angeht, können Sie "=", "==", "gleich", "zugewiesen", ": =", "hat", "empfängt" oder was auch immer Ihr Boot schwimmt, verwenden Solange Sie konsistent sind und die Verwendung und der Kontext in Ihrem Pseudocode enthalten sind, ist dies klar.

S.Robins
quelle
6

Ich vermute, es ist eine Zuweisung (ich denke, es ist der Zuweisungsoperator in Delphi), also weisen Sie in y [0]: = x [0] den Wert von x [0] y [0] zu.

Aber AFAIK gibt es nicht als Standard-Pseudocode , also könnte es theoretisch alles sein: =).

Christophe Vanfleteren
quelle
8
@loudsight: Da hat = schon eine ganz andere Bedeutung: Gleichheit. Es wäre extrem dumm, einen Operator zu verwenden, der bereits eine gut verstandene Bedeutung für etwas anderes hat.
Jörg W Mittag
1
@ Jörg W Mittag Naja, es kommt wohl darauf an, wer das Zielpublikum ist. Ich würde mir für die meisten Entwickler (Java, C / C ++, etc ..) = Zuordnung vorstellen.
5
@loudsight: Die meisten Entwickler waren noch nicht einmal geboren, als der erste Pseudocode geschrieben wurde. Damals war es vor allem Menschen aus einem starken mathematischen Hintergrund, die Algorithmen aufschrieb, was macht :=die natürliche Wahl, denn in mathematischer Notation x := vbedeutet „lassen xsein v“ im Gegensatz zu x = v, was bedeutet „ xgleich v“ und würde daher Ursache Verwirrung.
back2dos
8
Wenn es einen Standard-Pseudo-Code gäbe, würden wir viele Pseudo-Pseudo-Codes sehen.
2
@ back2dos etc Auch heute noch ist die Verwendung =für die Zuordnung verwirrend. Ich kann mich noch gut erinnern, wie verwirrend es war, zu sehen, als ich das Programmieren lernte x = x + 1. Wenn Sie erst einmal die Grundschule für Mathematik besucht haben, x = x + 1sieht es nach unmöglichem, widersprüchlichem Kauderwelsch aus. Als nächstes las ich ein hervorragendes Buch über Informatik für den allgemeinen Leser ( ich glaube, das war es ), das <-für die Aufgabe verwendet wurde. x <- x + 1ist viel einfacher zu verstehen.
MarkJ
-1

Es bedeutet normalerweise dasselbe, was es in der Mathematik bedeutet: Zuweisung.

Jörg W. Mittag
quelle
6
Meines Wissens gibt es in Mathe keine "Aufgabe".
Ingo
7
In der Mathematik :=bedeutet dies normalerweise "ist definiert als" oder "ist per Definition gleich".
Oenone
3
@Ingo: "Schreiben Sie das Bitmuster für den Wert des Ausdrucks x in einen Speicherort mit dem Namen y" unterscheidet sich vollständig von einer Zuweisung in Programmiersprachen. Was Sie beschreiben, ist eine mögliche Implementierung der Ausführung von Zuweisungsanweisungen.
back2dos
3
@Ingo: Ich bin anderer Meinung. Ganz zu schweigen von der Tatsache, dass im Fall von Eigenschaften eine Zuweisung einen Aufruf ergibt und dass ein großer Teil des Codes in virtuellen Maschinen oder von Interpreten ausgeführt wird, und nicht direkt auf der "aktuellen Architektur", selbst Zuweisungen zu Variablen muss aufgrund der Optimierung nicht zu einer solchen Operation führen. Mit wenigen Ausnahmen sollte eine Sprache gemäß ihren Spezifikationen verwendet werden und nicht auf bestimmten Annahmen über ihre Implementierung beruhen. Alles, was Sie über Zuweisungen zu Variablen wirklich sagen können, ist, dass die Variable mit dem Namen y an den Wert des Ausdrucks x gebunden wird.
back2dos
3
@Ingo: Nein, das ist kein Unsinn. Kompilieren x := 1; y := 2; if (x = 1) y := 3als wäre es y := 3eine sinnvolle Optimierung (vorausgesetzt, x wird später nicht verwendet). Von 3 Aufträgen werden 2 mittels statischer Analyse durchgeführt. Ihre "Definition" von Aufgaben ist eine pauschale Aussage, die ohne zahlreiche Annahmen einfach nicht gilt, von der eine Definition dieses Begriffs nicht abhängen sollte.
back2dos