擬似コードで:=はどういう意味ですか?


25

Algorithmic Implementationというタイトルのセクションには、次のコードがあります。

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

:=はどういう意味ですか?


2
私はそれはとして定義哲学と論理表記、からのものであったことを学んだ「であると定義さ=」ので、X = 1×1であると定義される
パトリック・ヒューズ

3
1990年にAPコンピューターサイエンスを学んだとき、私たちはPascalを学習言語として使用しました。私はいつも:=「に等しくなる」と発音しました。私は実際に上これを好む=し、==以来、「=」自然言語では、比較演算子である(または真実の少なくとも声明。)
TecBrat

回答:


59

:=は、単一の等号等号テストを使用する言語の割り当て演算子です。これらの言語の中で最もよく知られているのはパスカルです。Cの影響により、ほとんどの言語は割り当てのために=に、テストのために==に切り替えられました。そのようなスタイルで訓練された一部の古いテキストと著者は、擬似コードに:=を使用します。割り当て用に矢印<-も表示されることがあります。

記事から:

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)

一部の現代言語では、割り当てに矢印を使用しています。最も顕著なのはRで、これはグローバル割り当てに使用し、ローカル割り当てには単一の等号(=)を使用します。

Sebestaの「プログラミング言語の概念」とKN King博士のクラスノートから、割り当て基準がCやPascalよりもはるかに遡ることがわかります。1958年にAlgolが設計されたときに、割り当てに:=を使用することが決定されたようです。委員会はアメリカとヨーロッパの代表者で構成されました。委員会のドイツ人の中には、コンラッド・ズーゼのPlankalkul言語(第二次世界大戦中に起草されたが、1972年まで公開されず、2005年まで実装されなかった)に精通しており、その言語の提案された割り当て方法に従う割り当てを望んだb+c => aここで、b + cはaに割り当てられます。委員会はこれを=:に変更しました。これは、当時のプログラムへの入力方法がキーパンチと呼ばれていたため、使用する「>」がなかったためです。そこで、彼らは等しいコロンで妥協しました。しかし、FORTRANに精通しているアメリカ人(1990年まで小文字がなかった)は、FORTRANがそれを行った方法であるため、割り当てが左に作用することを望んでいました。

そのため、彼らはそれを代わりに変更することができました:=代わりに、割り当てをPlankalkul(ドイツ以外の実質的に未知の言語であり、実装されていない)ではなくFORTRAN(既知の実装言語である)のスタイルで右ではなく左に向かって動作させました。Algol 60は、PascalおよびCを含むすべての主要な後続の命令型言語に強く影響しました。したがって、PascalはALGOLの割り当ての構文を保持し、どちらも割り当ての左利きを保持しました。

ALGOLは読みやすく、数学表記に近いように設計されました。これは、今後20年以上にわたってジャーナルにアルゴリズムを書くための事実上の(そして基本的には法律上の)標準でした。したがって、1960年から1980年頃まで教育を受けたインストラクターとコンピューター科学者は、この表記法に精通していました。

1964年のIBM 029キーパンチのリリースでは、>文字と<文字が許可されていたため、Cに他の文字が含まれるようになりました。


1
セミコロンと関数の戻り値の型が欠落していることを除けば、このコードはPASCAL、MODULA、またはその他のWirth言語のように見えます。
インゴ

7
ほとんどの擬似コード:=は割り当てに使用します。数学的な背景を持つ人々もこれを好むでしょう。
オエノン

3
追加するだけで、PL / SQLで実際に使用されています。
ジャレイン

1
理由はわからないが、割り当てとしての左矢印は私を狂わせる9
shabunc

2
パスカル(およびその他の「ワース言語」)は、ALGOLから取得しました。ALGOLは数学表記から取得しました。
メイソンウィーラー

18

ただ迅速かつ退屈なメモ。 擬似コードは非常に非公式であるため、「:=」は必要な意味のみを意味します。他の人が言ったように、Pascalなどの特定の言語では、割り当てに「:=」を使用して「=」との混同を避けていますが、他の言語では「=」と「==」の組み合わせを同じ目的に使用しています。

実際のPseudocodeに関する限り、「=」、「==」、「equals」、「isassigned」、「:=」、「has」、「receives」、またはボートに浮かぶものを使用できます。一貫性があり、使用法とコンテキストが擬似コード内にある限り、明確です。


6

私はそれが割り当てだと推測しています(Delphiの割り当て演算子だと思います)ので、y [0]:= x [0]ではx [0]の値をy [0]に割り当てています。

しかし、私の知る限り、標準の擬似コードのようなものはないので、理論的には何でもかまいません:=)。


8
@loudsight:= すでに非常に異なる意味を持っているため:平等。別の何かに対してすでに十分に理解されている意味を持つ演算子を使用することは、非常に愚かです。
ヨルグWミットタグ

1
@JörgW Mittagさて、それは対象となる聴衆が誰であるかによると思います。ほとんどの開発者(Java、C / C ++など)の場合、=は割り当てを意味します。

5
@loudsight:最初の擬似コードが書かれたとき、ほとんどの開発者は生まれていませんでした。当時、それは主に作るのアルゴリズムを書き留めた強力な数学的背景、からの人でした:=数学的表記であるため、自然な選択をx := v手段「聞かせxすることvとは対照的に、」x = v「どの手段x等しいv」と希望したがって、混乱が発生します。
back2dos

8
標準の疑似コードがあれば、多くの疑似疑似コードが表示されます。

2
@ back2dosなど今日でも=割り当てに使用するのはわかりにくいです。ずっと前にプログラミングを初めて学んだとき、それがどれほど混乱していたかを覚えていますx = x + 1。基本的な高等学校の数学を勉強したら、x = x + 1不可能な矛盾した冗談のように見えます。次に、割り当てに使用した一般読者向けのコンピューターサイエンスに関する優れた本(これはこれだと思う)を読みました<-x <- x + 1理解しやすいです。
-MarkJ

-1

それは通常、数学で意味するのと同じことを意味します:割り当て。


6
私の知る限り、数学では「割り当て」というものはありません。
インゴ

7
数学で:=は、通常「定義される」または「定義により等しい」を意味します。
オエノン

3
@Ingo:「式xの値のビットパターンをyという名前のメモリ位置に書き込む」は、プログラミング言語の割り当てとはまったく異なります。説明するのは、割り当てステートメントの実行の可能な実装です。
back2dos

3
@Ingo:私は同意しません。プロパティの場合、割り当てによって呼び出しが行われるという事実はもちろん、コードの大部分が「現在のアーキテクチャ」上で直接ではなく、仮想マシンまたはインタープリターによって実行されるという事実、さらには変数への割り当て最適化のため、そのような操作を行う必要はありません。例外はほとんどありませんが、言語はその実装に関するいくつかの仮定に基づいてではなく、仕様に従って使用する必要があります。変数への代入について本当に言えるのは、yという名前の変数が式xの値にリバウンドすることだけです。
back2dos

3
@Ingo:いいえ、それはナンセンスではありません。x := 1; y := 2; if (x = 1) y := 3まるでそれがあったかのようにコンパイルすることy := 3は合理的な最適化です(xは後で使用されないと仮定します)。3つの割り当てのうち、2つは静的分析によって実装されます。割り当ての「定義」は包括的なステートメントであり、この用語の定義が依存する必要のない多数の仮定がなければ成立しません。
back2dos
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.