Apakah ada operator yang setara atau tidak ? Misalnya, warna favorit saya bukan hijau atau biru.
Dan kodenya akan setara dengan:
// example one
if (color!="green" && color!="blue") {
}
// example two
if (x nor y) {
// x is false and y is false
}
or
dan!
, dan karena negatif ganda jarang digunakan - kebanyakan orang merasa sangat sulit untuk dibaca.color not in ['green', 'blue']
Jawaban:
Meskipun bahasa umum tidak memiliki operator khusus NOR dan NAND, beberapa bahasa yang kurang dikenal (misalnya, beberapa bahasa "bermain golf") melakukannya. Misalnya, APL masing-masing memiliki
⍱
dan⍲
untuk NOR dan NAND.Kelas contoh lain dapat ditemukan dalam bahasa desain perangkat keras seperti VHDL , Verilog , dll. Gerbang NAND dan NOR cukup berguna dalam desain perangkat keras karena biasanya lebih murah (membutuhkan lebih sedikit transistor) daripada rangkaian setara yang dibuat dari DAN / ATAU / TIDAK. gerbang, yang merupakan salah satu alasan mengapa bahasa desain perangkat keras cenderung memasukkannya; alasan lain adalah bahwa mereka dapat berguna untuk trik-trik bit-fiddling tertentu.
sumber
Tidak, tidak ada
nor
operator dalam bahasa pemrograman arus utama tingkat tinggi.Mengapa
Terutama karena sulit dibaca:
not
pada operan pertama, tetapi pembaca hanya memahami ini setelahnya(x nor y)
dengan(x and not y)
alih - alih((not x) and (not y))
or
semantik semu yang tidak berlakuTapi itu sangat umum di perangkat keras ...
nor
adalah gerbang perangkat keras dasar yang dapat digunakan untuk membuat semua gerbang logis lainnya. Jadi orang dapat berargumen bahwa semua operator logika lainnya adalah kombinasi dannor
merupakan operator logis elementer yang paling sederhana.Namun, apa yang benar untuk perangkat keras belum tentu benar bagi manusia. Dan meskipun popularitasnya di tingkat perangkat keras, beberapa CPU arus utama bahkan tidak menawarkan
NOR
dalam set instruksi assembler mereka (misalnya x86 ).Alternatif
Masalah keterbacaan. Dan terkadang itu bisa diperbaiki dengan cara lain.
Penggunaan operator yang ada
Sebagai contoh:
Pemesanan kondisi
dari pada
Gunakan sampai loop
Beberapa bahasa juga menawarkan instruksi loop yang memungkinkan untuk mengekspresikan kondisi dengan
while
atau denganuntil
, memungkinkan Anda memilih cara yang lebih "positif". Instruksi-instruksi ini misalnyauntil c do ...
di ruby ,do until c ...
di vb , ataurepeat ... until c
di pascal dan keturunannya.Sebagai contoh:
setara dengan:
Buat suatu fungsi
Sekarang jika Anda masih lebih menyukai
nor
sintaks, Anda bisa mendefinisikan suatu fungsi, tetapi hanya jika Anda tidak mengharapkan jalan pintas terjadi:Ada keuntungan keterbacaan fungsi atas operator, karena pembaca segera memahami bahwa negasi berlaku untuk semua argumen. Dalam beberapa bahasa Anda dapat mendefinisikan suatu fungsi dengan sejumlah variabel argumen.
sumber
while (not (x == 1 or x == 2))
saya menemukanx != 1 and x != 2
versi yang sulit dibaca, dan menemukan "x bukan 1, atau 2" jauh lebih mudah untuk diproses daripada "x bukan 1, dan x bukan 2".Repeat
...Until
selalu menjalankan loop body setidaknya sekali. Jika x adalah 1, badan loop masih dieksekusi, tetapi tidak diulang. TheWhile
Loop tidak akan mengeksekusi tubuh dalam kasus ini.nor(x,y)
selalu dievaluasi tergantung pada bahasa dan bagaimananor()
penerapannya. Ada bahasa (D, Io, ...) di mana fungsi yang dipanggil dapat memutuskan apakah dan kapan untuk mengevaluasi argumen.Komentar @ KilianFoth pada pertanyaan tepat.
Anda dapat mensintesis
nor
darinot
danor
:persis sama dengan
Memperkenalkan
nor
sebagai operator terpisah akan memperkenalkan redudansi pada bahasa, yang tidak diperlukan, atau diinginkan (atau - yang tidak diperlukan dan tidak diinginkan).Demikian pula, saya tidak mengetahui ada bahasa yang memiliki
nand
operator - mungkin karena dapat disintesis darinot
danand
operator.Secara teori, Anda dapat membuat bahasa hanya dengan
nand
atau hanyanor
operator. Semuaand
,or
dannot
kemudian dengan bisa synthesied dari mereka. Satu-satunya masalah adalah bahwa ini akan menjadi sangat sulit. Sebagai contoh, lihat logika NOR dan logika NAND di Wikipedia.sumber
nor
tidak dimasukkan. Kalau tidak, mengapa bahasa memilikiand
danor
? Mereka berlebihan, terima kasih kepada De Morgan. Bahkan, Anda bisa mengganti semua tiga operator logika konvensional (and
,or
,not
) dengan menyediakan hanyanor
, seperti yang Anda benar diamati.and
,or
dannot
- karena itulah yang digunakan oleh kebanyakan bahasa manusia. Setelah Anda mencocokkan model mental dan / atau / tidak, maka tidak akan menjadi berlebihan. Redundansi mereka bahkan dikodekan dalam nama mereka: "n (ot) dan" dan "n (ot) atau". Jika kami memiliki istilah bahasa Inggris yang berbeda, yang sudah ada sebelumnya untuk mereka, dan bukan hanya yang disintesis, maka Anda mungkin akan lebih sering melihatnya.not
,and
,or
. Misalnya beberapa dialek BASIC (GW-BASIC, QuickBASIC, ...) memiliki IMP eksklusif atau XOR, IMP (→ TIDAK (x XOR y)), dan EQV ekivalen (→ TIDAK (x) ATAU y) sebagai operator tambahan.Ya, APL dan beberapa dialeknya juga tidak (dan nand ). Dalam APL, atau dilambangkan
⍱
(karena∨
adalah atau dan~
adalah tidak ):Cobalah online!
sumber
Jawaban ini berasal dari bahasa assembler untuk komputer yang dibuat pada pertengahan 1960-an. Itu cukup tidak jelas, tetapi dalam beberapa hal ini menjawab pertanyaan Anda.
DEC (Digital Equipment Corporation) meluncurkan komputer PDP-6 pada pertengahan 1960-an. Mesin ini memiliki total 64 instruksi yang merupakan operasi boolean pada dua operan (termasuk beberapa kasus degenerasi). 64 instruksi ini benar-benar 16 operator dengan 4 varian di setiap operator.
Dua operator, ANDCB dan ORCB masing-masing mengimplementasikan NOR dan NAND (kecuali saya tercampur pada logika negatif ganda). Anda dapat melihat tabel opcode . Tabel opcode sebenarnya untuk komputer PDP-10, penerus PDP-6.
Jika Anda melihat instruksi numerik dalam biner, itu menjadi lebih menarik. Ternyata untuk semua opcode dalam kisaran 400-477 (oktal), empat bit dalam instruksi itu sendiri menyediakan tabel kebenaran empat bit untuk 16 kemungkinan operator boolean. Beberapa operator mengabaikan satu atau kedua input. Misalnya SETZ dan SETO mengabaikan kedua input.
Para perancang PDP-6 mengeksploitasi fakta ini untuk mengimplementasikan semua instruksi ini dengan lebih sedikit logika daripada yang diperlukan untuk mengimplementasikan hanya beberapa dari mereka. Beberapa petunjuk ini jarang muncul, jika pernah, dalam kode bahasa assembly. Tetapi mereka semua ada di sana.
Jadi ANDCB adalah setara dengan NOR. (Sekali lagi, kecuali saya mendapatkan logika saya mundur, dalam hal ini ORCB adalah setara).
sumber
Perl memiliki
unless
kata kunci yang memungkinkan Anda membalikkan persyaratan:Meskipun bukan operator NOR, Anda dapat mengekspresikan niat Anda dengan cara yang sama.
sumber
The
nor
Operator seperti yang Anda gambarkan itu tidak akan diulang, yang pasti akan menyebabkan banyak sulit untuk menemukan bug."Contoh 2" Anda pada dasarnya adalah ini:
Tetapi coba lagi dengan tiga variabel dan lihat apa yang terjadi:
sumber