У псевдокоді що означає: = означає?


25

У розділі « Алгоритмічна реалізація» є такий код:

// 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 є x визначається як 1.
Патрік Х'юз

3
Коли я взяв інформатику про АП в 1990 році, ми використовували Паскаль як нашу мову навчання. Мене завжди вимовляють :=як "стає рівним". Я фактично віддаю перевагу цьому над тим, =і ==оскільки "=" на природній мові є оператором порівняння (або принаймні твердженням правди.)
TecBrat

Відповіді:


59

: = є оператором присвоєння для мов, які використовують тестування рівності знаків одинакових рівностей. Найвідомішою з цих мов є Паскаль. Через вплив С більшість мов перейшли на = для призначення та == для тестування. Деякі старіші тексти та автори, які навчалися в таких стилях, використовують: = для псевдокоду. Ви іноді бачите стрілки <- також для призначення .

Зі статті:

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 , який використовує його для глобального призначення, в той час як використовує єдине рівне (=) для місцевого призначення.

З Концепцій мов програмування Себести та класових записок доктора К.Н. Кінга ми дізнаємось, що стандарти присвоєння йдуть набагато далі, ніж С або Паскаль. Виявляється, у 1958 році, коли проектувався Алгол, його було вирішено використовувати: = для призначення. До складу комітету входили американські та європейські представники. Деякі з німецьких комітетів були знайомі з мовою Планкалкуль (Конрад Зузе), яка була розроблена під час Другої світової війни, але не опублікована до 1972 року та не була реалізована до 2005 року.b+c => aде b + c призначено a. Комітет змінив це на =: на підставі того, що метод введення програм у той час, який називався клавішним ключем, не мав ">" використовувати. Тож вони йшли на компроміс на рівні товстої кишки. Однак американці, які були знайомі з FORTRAN (він не мав нижнього регістру до 1990 року), хотіли, щоб завдання діяло ліворуч, оскільки саме так це зробив FORTRAN.

Таким чином, їм вдалося змінити його на: = замість цього, і завдання було діяти лівіше, ніж праворуч, у стилі FORTRAN (що є відомою реалізованою мовою), а не Plankalkul (практично невідома мова за межами Німеччини та не реалізована) . Algol 60 сильно впливав на всі основні наступні імперативні мови, включаючи Pascal та C.

ALGOL був розроблений так, щоб він був легким для читання і був близьким до математичних позначень. Це було фактично (і в основному де-юре) стандартом для написання алгоритмів у журналах протягом наступних 20+ років. Тому викладачі та комп'ютерні вчені, які навчалися з 1960 по приблизно 1980 роки, були б знайомі з цим стилем позначення.

Випуск IBM 029 Keypunch в 1964 році дозволив ввести символи> і <, тим самим спонукаючи їх включення до C серед інших.


1
Окрім відсутньої крапки з комою та типу повернення функцій, цей код все одно схожий на PASCAL, MODULA чи іншу мову Wirth.
Інго

7
більшість псевдокодів використовують :=для призначення. людям з математичним походженням теж буде корисно це.
Ононе

3
Просто додамо, що він все ще дуже сильно використовується практично в PL / SQL.
Jalayn

1
не знаю чому, але ліва стрілка як завдання просто зводить мене з розуму 9
shabunc

2
Паскаль (і решта «мов Вірта») отримав його від ALGOL, який отримав його з математичних позначень.
Мейсон Вілер

18

Просто швидка і педантична нота. Псевдокод досить неформальний, тому ": =" означає лише те, що ви хочете. Як уже говорили інші, такі мови, як Pascal, використовують ": =" для призначення, щоб уникнути плутанини з "=" для рівності, тоді як інші мови використовують комбінації "=" і "==" для тієї ж мети.

Що стосується фактичного псевдокоду , ви можете використовувати "=", "==", "дорівнює", "призначається", ": =", "має", "отримує", або все, що пливе ваш човен, просто до тих пір, поки ви послідовні, і використання та контекст знаходяться в межах вашого псевдокоду.


6

Я здогадуюсь, що це призначення (я думаю, що це оператор присвоєння в Delphi), тому в y [0]: = x [0] ви присвоюєте значення x [0] y [0].

Але AFAIK не існує такого поняття, як стандартний псевдокод , тому теоретично це може бути що завгодно: =).


8
@loudsight: Тому що = вже має зовсім інше значення: рівність. Використання оператора, який уже має добре зрозуміле значення для чогось іншого, було б надзвичайно дурним.
Йорг W Міттаг

1
@ Jörg W 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
в математиці :=зазвичай означає "визначається як" або "дорівнює за визначенням".
eenone

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.