Dalam kode semu apa artinya: = artinya?

25

Bagian yang berjudul Implementasi Algoritma memiliki kode berikut:

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

apa artinya: = artinya?


sumber
2
Saya belajar bahwa itu dari notasi filosofi dan logika, yang mendefinisikannya sebagai ": = didefinisikan sebagai" jadi x: = 1 adalah x didefinisikan sebagai 1.
Patrick Hughes
3
Ketika saya mengambil ilmu komputer AP pada tahun 1990, kami menggunakan Pascal sebagai bahasa pembelajaran kami. Saya selalu diucapkan :=sebagai "sama dengan". Saya sebenarnya lebih suka ini daripada =dan ==karena "=" dalam bahasa alami adalah operator perbandingan (atau setidaknya pernyataan kebenaran.)
TecBrat

Jawaban:

59

: = adalah operator penugasan untuk bahasa yang menggunakan pengujian kesetaraan tanda sama dengan tunggal. Bahasa-bahasa yang paling terkenal adalah Pascal. Karena pengaruh C, sebagian besar bahasa beralih ke = untuk tugas dan == untuk pengujian. Beberapa teks dan penulis lama yang dilatih dengan gaya seperti itu menggunakan: = untuk pseudocode. Anda terkadang melihat panah <- juga untuk penugasan .

Dari 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)

Beberapa bahasa modern menggunakan panah untuk penugasan; terutama R , yang menggunakannya untuk penugasan global sementara menggunakan tunggal sama dengan (=) untuk penugasan lokal.

Dari Konsep Bahasa Pemrograman Sebesta dan catatan kelas dari Dr. KN King kita belajar bahwa standar penugasan kembali jauh lebih jauh daripada C atau Pascal. Tampaknya pada tahun 1958 ketika Algol dirancang, diputuskan untuk menggunakan: = untuk penugasan. Komite tersebut terdiri dari perwakilan Amerika dan Eropa. Beberapa orang Jerman dalam panitia akrab dengan bahasa Plankalkul Konrad Zuse (yang dirancang selama Perang Dunia II tetapi tidak diterbitkan sampai tahun 1972 dan tidak dilaksanakan sampai tahun 2005) dan ingin penugasan mengikuti metode penugasan yang diusulkan bahasa yangb+c => adi mana b + c ditugaskan untuk a. Komite mengubah ini menjadi =: dengan alasan bahwa metode memasukkan program pada saat itu disebut keypunch, tidak memiliki ">" untuk digunakan. Jadi mereka berkompromi pada titik yang sama. Namun, orang Amerika yang terbiasa dengan FORTRAN (tidak memiliki huruf kecil sampai 1990) ingin penugasan untuk beroperasi ke kiri karena itulah cara FORTRAN melakukannya.

Jadi mereka berhasil mengubahnya menjadi: = alih-alih dan membuat penugasan beroperasi ke kiri daripada ke kanan dalam gaya FORTRAN (menjadi bahasa yang diimplementasikan yang diketahui) daripada Plankalkul (bahasa yang hampir tidak dikenal di luar Jerman dan tidak diimplementasikan) . Algol 60 sangat memengaruhi semua bahasa imperatif utama berikutnya termasuk Pascal dan C. Dengan demikian Pascal menyimpan sintaks ALGOL untuk tugas dan keduanya menjaga posisi kiri penugasan.

ALGOL dirancang agar mudah dibaca dan dekat dengan notasi matematika. Itu adalah standar de facto (dan pada dasarnya de jure) untuk menulis algoritma dalam jurnal selama 20 tahun ke depan. Oleh karena itu, instruktur dan ilmuwan komputer yang dididik dari tahun 1960 hingga sekitar tahun 1980 akan terbiasa dengan gaya notasi itu.

Rilis IBM 029 Keypunch pada tahun 1964 memungkinkan untuk> dan <karakter, sehingga mendorong dimasukkannya mereka dalam C di antara yang lainnya.

Insinyur Dunia
sumber
1
Selain dari titik koma yang hilang dan fungsi kembali ketik kode ini tetap terlihat seperti PASCAL, MODULA atau bahasa Wirth lainnya.
Ingo
7
kebanyakan kode pseudo digunakan :=untuk penugasan. orang dengan latar belakang matematika juga akan menyukai ini.
oenone
3
Hanya untuk menambahkan bahwa itu masih sangat banyak digunakan secara praktis di PL / SQL.
Jalayn
1
tidak tahu mengapa, tetapi panah kiri sebagai tugas hanya membuatku gila 9
shabunc
2
Pascal (dan sisanya dari "bahasa Wirth") mendapatkannya dari ALGOL, yang mendapatkannya dari notasi matematika.
Mason Wheeler
18

Hanya catatan cepat dan bertele-tele. Pseudocode cukup informal, jadi ": =" hanya berarti apa yang Anda inginkan. Seperti yang dikatakan orang lain, bahasa tertentu seperti Pascal menggunakan ": =" untuk penugasan untuk menghindari kebingungan dengan "=" untuk kesetaraan, sedangkan bahasa lain menggunakan kombinasi "=" dan "==" untuk tujuan yang sama.

Sejauh menyangkut Pseudocode yang sebenarnya , Anda dapat menggunakan "=", "==", "equals", "ditugaskan ke", ": =", "has", "accept", atau apa pun yang mengapungkan perahu Anda, cukup selama Anda konsisten, dan penggunaan serta konteksnya dalam kodesemu Anda jelas.

S.Robins
sumber
6

Saya menduga tugas itu (saya pikir itu adalah operator penugasan dalam Delphi), jadi dalam y [0]: = x [0] Anda menetapkan nilai x [0] ke y [0].

Tapi AFAIK tidak ada yang namanya kode pseudo standar , jadi secara teori bisa apa saja: =).

Christophe Vanfleteren
sumber
8
@loudsight: Karena = sudah memiliki arti yang sangat berbeda : kesetaraan. Menggunakan operator yang sudah memiliki makna yang dipahami dengan baik untuk sesuatu yang berbeda akan sangat bodoh.
Jörg W Mittag
1
@ Jörg W Mittag Ya saya kira itu tergantung pada siapa audiens yang dituju. Saya akan membayangkan untuk sebagian besar pengembang (Java, C / C ++, dll.) = Berarti tugas.
5
@loudsight: Sebagian besar pengembang bahkan tidak dilahirkan, ketika pseudo-code pertama ditulis. Saat itu, sebagian besar orang dari latar belakang matematika yang kuat, yang menuliskan algoritma, yang membuat :=pilihan alami, karena dalam notasi matematika x := vberarti "biarkan xmenjadi v" sebagai lawan x = v, yang berarti " xsama dengan v" dan karena itu akan menyebabkan kebingungan.
back2dos
8
Jika ada kode pseudo standar, kita akan melihat banyak kode semu semu.
2
@ back2do dll. Bahkan hari ini menggunakan =untuk tugas membingungkan. Saya masih ingat, dulu ketika saya pertama kali belajar memprogram, betapa membingungkannya melihatnya x = x + 1. Setelah Anda mempelajari matematika dasar sekolah menengah, x = x + 1sepertinya omong kosong yang tidak mungkin bertentangan. Selanjutnya saya membaca buku yang bagus tentang ilmu komputer untuk pembaca umum ( saya pikir inilah ini ) yang digunakan <-untuk tugas. x <- x + 1jauh lebih mudah dimengerti.
MarkJ
-1

Biasanya berarti hal yang sama artinya dalam matematika: tugas.

Jörg W Mittag
sumber
6
Tidak ada yang namanya "tugas" dalam matematika setahu saya.
Ingo
7
dalam matematika, :=biasanya berarti "didefinisikan sebagai" atau "sama dengan definisi".
oenone
3
@Ingo: "tulis pola bit untuk nilai ekspresi x ke lokasi memori yang bernama y" benar-benar berbeda dari tugas dalam bahasa pemrograman. Apa yang Anda gambarkan adalah implementasi yang mungkin dari menjalankan pernyataan tugas.
back2dos
3
@Ingo: Saya tidak setuju. Apalagi fakta, bahwa dalam kasus properti, tugas menghasilkan panggilan, dan fakta bahwa sebagian besar kode dieksekusi di mesin virtual atau oleh penerjemah, daripada langsung pada "arsitektur saat ini", bahkan penugasan ke variabel tidak perlu menghasilkan operasi seperti itu, karena optimasi. Dengan beberapa pengecualian, bahasa harus digunakan sesuai dengan spesifikasinya dan tidak didasarkan pada beberapa asumsi tentang implementasinya. Yang dapat Anda benar-benar katakan tentang penugasan ke variabel adalah bahwa variabel bernama y akan kembali ke nilai ekspresi x.
back2dos
3
@Ingo: Tidak, ini bukan omong kosong. Kompilasi x := 1; y := 2; if (x = 1) y := 3seolah-olah itu baru saja y := 3merupakan optimasi yang masuk akal (dengan anggapan x tidak digunakan nanti). Dari 3 penugasan, 2 diimplementasikan dengan menggunakan analisis statis. "Definisi" penugasan Anda adalah pernyataan menyeluruh, yang tidak dapat diterima tanpa banyak asumsi, yang tidak harus bergantung pada definisi istilah ini.
back2dos