Kesalahan kode ini pada * ini * dan * itu *, apakah benar-benar tertulis di dalamnya?


25

Terinspirasi oleh saya bukan bahasa yang Anda cari!

Tantangan

Pilih dua bahasa pemrograman yang berbeda, dan tulis sebuah program yang mencetak baris berikut ke stdout (atau setara):

This program errors out in <the current language> :P

dan kemudian menghasilkan berbagai jenis kesalahan di masing-masing dua bahasa.

Aturan

Beberapa aturan diambil dari tantangan aslinya.

  • Dalam output, nama bahasa harus mengikuti:
    • Nama yang terdaftar di TIO , secara opsional mengecualikan nomor versi dan / atau nama implementasi (mis. Jika Anda menggunakan JavaScript (Node.js)sebagai salah satu bahasa Anda, Anda dapat menggunakan JavaScriptnama bahasa Anda, tetapi tidak JSatau Javascript.)
    • Nama lengkap di situs web resmi (atau GitHub repo) jika bahasa pilihan Anda tidak tersedia di TIO.
  • Tidak ada program yang harus mengambil input dari pengguna.
  • Anda dapat menggunakan komentar dalam bahasa apa pun.
  • Dua versi berbeda dari bahasa yang sama dihitung sebagai bahasa yang berbeda.
    • Jika ini dilakukan, program harus menampilkan nomor versi utama, dan jika berjalan pada dua versi minor yang berbeda, harus melaporkan versi minornya juga.
    • Anda tidak boleh menggunakan fungsi versi prebuilt (ini termasuk variabel yang telah dievaluasi saat runtime).
  • Dua flag baris perintah yang berbeda dalam bahasa yang sama juga dihitung sebagai bahasa yang berbeda sesuai konsensus meta ini , selama flag tersebut tidak menyertakan fragmen kode (seperti -Dblahblah...dalam C).
    • Jika ini dilakukan, program juga harus menampilkan flag yang digunakan.
  • Dua kesalahan dianggap berbeda kecuali kedua kesalahan dihasilkan oleh semantik yang sama (seperti "pembagian dengan nol", "kesalahan segmentasi", atau "indeks di luar jangkauan").
    • Jika runtime suatu bahasa tidak keluar setelah kesalahan, tetapi melaporkan kesalahan dalam beberapa cara kepada pengguna, itu adalah kesalahan yang valid.
    • Jika suatu bahasa tidak membedakan pesan kesalahan tetapi memiliki daftar alasan yang diketahui menyebabkan kesalahan, Anda harus menentukan alasannya, bukan pesan kesalahan tersebut.
      Contohnya adalah ><>, yang hanya memiliki satu pesan kesalahan something smells fishy..., tetapi halaman wiki esolangs memiliki daftar alasan kesalahan.
  • Kesalahan sintaksis tidak diizinkan kecuali dihasilkan oleh panggilan eval()atau sejenisnya.
  • Melempar sesuatu secara manual (via throw(JS), raise(Python), die(Perl) atau yang serupa) diperbolehkan, tetapi semuanya dianggap sebagai satu jenis kesalahan.
  • Kesalahan dengan perintah yang tidak valid dalam 2D ​​atau pijakan golf juga diizinkan (dan diperlakukan sebagai salah satu jenis kesalahan).

Contohnya

Python dan Ruby

  • Python: This program errors out in Python :P ke stdout, lalu pengidentifikasi yang tidak terdefinisi
  • Ruby: This program errors out in Ruby :Pke stdout, lalu indeks di luar batas

C89 dan C99

  • C89: This program errors out in C 89 :Pke stdout, lalu pembagian dengan nol
  • C99: This program errors out in C 99 :Pke stdout, lalu segmentasi kesalahan

Perhatikan bahwa nomor versi harus selalu dipisahkan dari nama bahasa dengan spasi.

Python 2.7.9 dan Python 2.7.10

  • Python 2.7.9: This program errors out in Python 2.7.9 :Pke stdout, lalu sintaks kesalahan pada eval
  • Python 2.7.10: This program errors out in Python 2.7.10 :Pke stdout, lalu kunci kesalahan pada dict

Perl dan Perl -n

  • Perl: This program errors out in Perl :Pke stdout, lalu format waktu tidak valid
  • Perl -n: This program errors out in Perl -n :Pke stdout, lalu coba buka file yang tidak ada

Kondisi menang

Ini adalah , jadi kode terpendek dalam byte menang. Tetapi Anda selalu didorong untuk mengirim jawaban yang menyenangkan atau menarik meskipun itu tidak terlalu pendek.



Apakah kesalahan perlu menghentikan program?
Jo King

Saya awalnya berpikir begitu. Namun, jika ada beberapa bahasa yang dapat berlanjut (mungkin dengan perilaku tidak terdefinisi) setelah sesuatu seperti "pembagian dengan nol", dengan beberapa mekanisme untuk mengakui bahwa program mengalami kesalahan itu, maka saya akan dengan senang hati mengizinkannya.
Bubbler

Saya pikir saya sudah tahu jawabannya, tetapi untuk berjaga-jaga: dapatkah kalimat This program errors out in ...mengandung tab / spasi campuran, bukan spasi saja?
Kevin Cruijssen

Terkait (mencetak dua teks berbeda dalam dua bahasa berbeda).
Kevin Cruijssen

Jawaban:


33

Python 2 / Python 3 , 60 byte

print("This program errors out in Python %d :P"%(3/2*2))*1;a
  • Python 2 didapat NameError: name 'a' is not defined
  • Python 3 didapat unsupported operand type(s) for *: 'NoneType' and 'int'

Python 2:

  • /adalah divisi integer, 3/2 mendapat 1; int (3/2 * 2) adalah 2.
  • cetak adalah pernyataan, jadi pernyataan pertama dibaca sebagai print((...)*1), di sini *1berarti mengulangi string sekali.
  • pernyataan kedua mereferensikan variabel yang tidak ada, yang menyebabkan kesalahan.
  • Cobalah online!

Python 3:

  • '/' adalah pembagian angka mengambang, 3/2 mendapat 1,5; int (3/2 * 2) adalah 3.
  • cetak adalah fungsi, sehingga pernyataan pertama dibaca sebagai (print(...))*1 .
  • printpengembalian fungsi None; Perkalian tidak berfungsi None x int, jadi ini melaporkan "operan yang tidak didukung".
  • Cobalah online!

15

C dan C ++, 114 101 byte

-13 byte berkat l4m2 !

#include<stdio.h>
main(){auto d=.5;printf("This program errors out in C%s :P",d?"++":"");2[&d]+=1/d;}

Kesalahan segmentasi dalam C ++, pengecualian floating point dalam C.

autoadalah gagal untuk intdi C sehingga (int).5menjadi0 , jadi mencoba untuk membagi dengan itu pada dasarnya adalah pembagian dengan nol.

Di C ++ 1/dadalah 2, menambahkannya ke alamatd dan mencoba mengubah nilai alamat itu melemparkan segfault.

Cobalah di C ++!
Coba di C!


1
Tidak yakin apakah itu membantu, tetapi jika Anda dapat memetakan C / C ++ untuk 2 dan 0, Anda bisa menggunakan "++"+n, di mana nadalah 0untuk C ++ dan 2C
Conor O'Brien

2
d?"++":""9 char, "++"+4*d8 char. Tapi dapatkan C / C ++ mundur. Mendesah.
Yakk

1
int main(){auto d=.5;printf("This program errors out in C%s :P",d?"++":"");2[&d]+=1/d;}(105) meskipun saya tidak tahu mengapa
l4m2

1
Juga intdapat dihilangkan
l4m2

Sarankan L"⬫"+!dalih-alihd?"++":""
ceilingcat

14

JavaScript + HTML / HTML + JavaScript, 160 byte

<!--
document.write`This program errors out in JavaScript + HTML :P`()
--><script>document.write`This program errors out in HTML + JavaScript :P`+X</script>

<!--
document.write`This program errors out in JavaScript + HTML :P`()
--><script>document.write`This program errors out in HTML + JavaScript :P`+X</script>

Tidak yakin apakah ini menghitung dua bahasa, tetapi itu lucu.


Jadi, yang pertama adalah pengidentifikasi yang tidak terdefinisi, yang terakhir adalah pemanggilan fungsi pada tipe yang tidak berfungsi. Secara teknis saya akan mempertimbangkan HTML yang dulu dan yang terakhir JavaScript, tapi ide yang sangat bagus.
Bubbler

Penggunaan yang baik <!-- ... -->sebagai penanda komentar satu baris (saya tahu bahwa ini ada dalam spesifikasi untuk alasan kompatibilitas mundur)
Shieru Asakoto

12

Java 8 & C99, 172 byte

//\
interface a{static void main(String[]a){System.out.print("This program errors out in Java 8 :P");a[1]=""/*
main(n){{n=puts("This program errors out in C99 :P")/0/**/;}}

Berdasarkan jawaban saya untuk 'abc' dan 'cba' tantangan .

Cobalah di Java 8 - menghasilkan ArrayIndexOutOfBoundsException: 1 .
Cobalah di C - menghasilkan pengecualian Floating point: pembagian dengan nol tidak ditentukan .

Penjelasan:

//\
interface a{static void main(String[]a){System.out.print("This program errors out in Java 8 :P");a[1]=""/*
main(n){{n=puts("This program errors out in C99 :P")/0/**/;}}

Seperti yang Anda lihat dalam kode Java-highlighted di atas, baris pertama adalah komentar karena //, dan kode-C adalah komentar karena /* ... */, menghasilkan:

interface a{static void main(String[]a){System.out.print("This program errors out in Java 8 :P");a[1]="";}}

Jadi ia mencetak ke STDOUT, dan kemudian mencoba mengakses argumen program-kedua (ketika tidak ada yang diberikan), sehingga menghasilkan ArrayIndexOutOfBoundsException .


//\
interface a{static void main(String[]a){System.out.print("This program errors out in Java 8 :P");a[1]=""/*
main(n){{n=puts("This program errors out in C99 :P")/0/**/;}}

Tidak yakin bagaimana mengaktifkan dengan benar penyorotan C, karena lang-cmenghasilkan penyorotan yang sama dengan Java .. Tetapi //\akan mengomentari baris berikutnya, yang merupakan kode Java, menghasilkan:

main(n){{n=puts("This program errors out in C99 :P")/0;}}

Jadi, prins untuk STDOUT, dan kemudian memberikan pembagian dengan kesalahan nol.


Saya pikir ini akan bekerja dengan C89 dan C99. Jangan pegang aku untuk itu.
SIGSTACKFAULT

Itu //ditambahkan ke C dengan C99.
betseg

Terima kasih untuk kalian berdua, saya telah mengubahnya menjadi C99.
Kevin Cruijssen

Kenapa a[1]bukannya a[0]?
xehpuk

@xehpuk Tidak ada alasan khusus. Tidak masalah digit mana yang saya gunakan dan saya sudah mengisi 1dari awal. Bisa menggunakan 0, 9, dll juga. Jika saya memiliki sesuatu untuk diedit tentang posting ini, saya akan mengubahnya 0juga pada saat yang sama.
Kevin Cruijssen

11

Java 8 & Whitespace , 439 431 428 408 byte

                         






























 interface a{static void    main(String[]a){System.out.print("This program errors out"+
" in Java 8 :P");a[0]="";}}













Cobalah di Java 8 - menghasilkan ArrayIndexOutOfBoundsException: 0 .
Cobalah di Whitespace - menghasilkan kesalahan pengguna (Tidak dapat melakukan Infix Plus) .

Penjelasan:

Java 8:

interface a{static void main(String[]a){System.out.print("This program errors out"+
" in Java 8 :P");a[0]="";}}

Jadi ia mencetak ke STDOUT, dan kemudian mencoba mengakses argumen program-pertama (ketika tidak ada yang diberikan), sehingga menghasilkan ArrayIndexOutOfBoundsException .


Ruang putih:

[S S T  T   T   T   T   T   N
_Push_-31_P][S S T  T   T   S T S T N
_Push_-53_:][S S T  T   S S T   T   T   T   N
_Push_-79_space][S S T  T   S T S N
_Push_-10_e][S S T  T   T   S S N
_Push_-12_c][S S T  T   T   T   S N
_Push_-14_a][S S S T    N
_Push_1_p][S S S T  S S N
_Push_4_s][S S T    T   S T S N
_Push_-10_e][S S S T    S T N
_Push_5_t][S S T    T   T   S N
_Push_-6_i][S S T   T   T   T   N
_Push_-7_h][S S T   T   T   S S S N
_Push_-24_W][S T    S S T   S T S N
_Copy_0-based_10th_(-79_space)][S S T   T   N
_Push_-1_n][S S T   T   T   S N
_Push_-6_i][S T S S T   S N
_Copy_0-based_2nd_(-79_space)][S S S T  S T N
_Push_5_t][S S S T  T   S N
_Push_6_u][S S S N
_Push_0_o][S T  S S T   T   N
_Copy_0-based_3rd_(-79_space)][S S S T  S S N
_Push_4_s][S S S T  T   N
_Push_3_r][S S S N
_Push_0_o][S S S T  T   N
_Push_3_r][S N
S _Duplicate_top_(3_r)][S S T   T   S T S N
_Push_-10_e][S T    S S T   T   S N
_Copy_0-based_6th_(-79_space)][S S T    T   S N
_Push_-2_m][S S T   T   T   T   S N
_Push_-14_a][S S S T    T   N
_Push_3_r][S S T    T   S S S N
_Push_-8_g][S S S S (_Note_the_additional_S_here)N
_Push_0_o][S S S T  T   N
_Push_3_r][S S S T  N
_Push_1_p][S T  S S T   T   T   N
_Copy_0-based_7th_(-79_space)][S S S T  S S N
_Push_4_s][S S T    T   T   S N
_Push_-6_i][S S T   T   T   T   N
_Push_-7_h][S S T   T   T   S T T   N
_Push_-27_T][N
S S N
_Create_Label_LOOP][S S S T T   S T T   T   T   N
_Push_111][T    S S S _Add][T   N
S S _Print_as_character][N
S N
N
_Jump_to_Label_LOOP]

Huruf S(spasi), T(tab), dan N(baris baru) ditambahkan hanya sebagai penyorotan.
[..._some_action]ditambahkan sebagai penjelasan saja.

Coba versi yang disorot ini.

Whitespace adalah bahasa berbasis tumpukan yang mengabaikan segalanya kecuali spasi, tab, dan baris baru. Berikut adalah program yang sama dalam pseudo-code:

Push all unicode values of "P: ecapsetihW tuo srorre margorp sihT", minus 111
Start LOOP
  Push 111
  Add the top two stack values together
  Print as character
  Go to the next iteration of the LOOP

Ini akan kesalahan segera setelah selesai mencetak semua nilai dan tumpukan kosong ketika mencoba untuk melakukan Add (TSSS ), yang membutuhkan dua item pada stack.

Saya telah menghasilkan konstanta 111dengan program Java ini , yang juga saya gunakan untuk tantangan terkait ASCII sebelumnya yang saya buat di Whitespace. Selain itu, saya telah menggunakan beberapa salinan untuk spasi untuk menyimpan byte.

Satu hal penting yang perlu diperhatikan adalah trik yang saya gunakan untuk menempatkan program Java dalam jawaban Whitespace. Mari saya mulai dengan menjelaskan bagaimana angka didorong di Whitespace:

Sdi awal: Mengaktifkan Manipulasi Stack;
S: Dorong yang berikut sebagai Angka;
Satau T: Positif atau Negatif masing-masing;
Beberapa Sdan / atau T, diikuti oleh N: Nomor sebagai biner, di mana T=1danS=0 .

Berikut beberapa contoh:

  • Mendorong nilai 1 akan menjadi SSSTN;
  • Mendorong nilai -1 akan menjadi SSTTN;
  • Mendorong nilai 111 akan menjadi SSSTTSTTTTN.
  • Mendorong nilai 0 dapat SSSSN, SSTSN, SSSN, SSTN, SSSSSSSSSSSSN, dll (Bila Anda menggunakan SSSN(atau SSTN), kita tidak harus menentukan bagian biner, karena itu secara implisit 0 setelah kita menyatakan tandanya.)

Jadi SSSNsudah cukup untuk mendorong nilai 0(digunakan untuk huruf odalam kasus ini). Tetapi, untuk menempatkan program Java dalam program Whitespace golf ini, saya membutuhkan ruang tambahan, jadi dua yang pertama odidorong SSSN, tetapi yang ketiga didorong SSSSN, sehingga kami memiliki cukup ruang untuk kalimat dari program Java.


10

CBM BASIC dan kode mesin 6502 (C64), 142 144 byte

Harus menambahkan 2 byte setelah menyadari kesalahan sintaks tidak diizinkan ....


Hexdump .prgfile:

01 08 50 08 00 00 8F 5A 49 52 49 41 A9 17 8D 18 D0 A2 30 BD 30 08 20 D2 FF E8
E0 4B D0 F5 A2 30 BD 05 08 20 D2 FF E8 E0 44 D0 F5 A9 0D 20 D2 FF A2 1A 4C 37
A4 22 36 35 30 32 20 4D 41 43 48 49 4E 45 20 43 4F 44 45 20 3A D0 22 20 20 20
20 20 00 8D 08 01 00 97 35 33 32 37 32 2C 32 33 3A 99 22 D4 48 49 53 20 50 52
4F 47 52 41 4D 20 45 52 52 4F 52 53 20 4F 55 54 20 49 4E 20 C3 C2 CD 2D C2 C1
D3 C9 C3 20 3A D0 22 2C 58 AD 50 00 00 00

Tampilan CBM BASIC , sebagaimana tercantum dalam editor C64:

0 remziriastepgosubinput#new0exp0 dim.clrsavekinput#stepnew0exp<white> dim.clrsavedinput#stepstep
 dim.newl7to"6502 machine code :P"
1 poke53272,23:print"This program errors out in CBM-BASIC :P",x/p

daftar asli

Perhatian : Tidak mungkin untuk memasukkan program ini dengan benar di editor BASIC. Bahkan jangan mencoba mengedit program ini di editor BASIC, itu akan macet. Namun, ini adalah program BASIC yang dapat dijalankan;)


Tampilan kode mesin 6502 :

         01 08                          ; load address

.C:0801  50 08       BVC $080B          ; jump to real start of mc

         ; line number (00 00), REM (8F) and "ziria"
.C:0803  00 00 8F 5A 49 52 49 41

.C:080b  A9 17       LDA #$17
.C:080d  8D 18 D0    STA $D018          ; set upper/lower font
.C:0810  A2 30       LDX #$30
.C:0812  BD 30 08    LDA $0830,X
.C:0815  20 D2 FF    JSR $FFD2          ; print "This program errors ..."
.C:0818  E8          INX
.C:0819  E0 4B       CPX #$4B
.C:081b  D0 F5       BNE $0812
.C:081d  A2 30       LDX #$30
.C:081f  BD 05 08    LDA $0805,X
.C:0822  20 D2 FF    JSR $FFD2          ; print "6502 machine code :P"
.C:0825  E8          INX
.C:0826  E0 44       CPX #$44
.C:0828  D0 F5       BNE $081F
.C:082a  A9 0D       LDA #$0D
.C:082c  20 D2 FF    JSR $FFD2          ; print a newline
.C:082f  A2 1A       LDX #$1A           ; error code for "can't continue"
.C:0831  4C 37 A4    JMP $A437          ; jump to error handling routine

.C:0834  22 ; '"'

         ; "6502 machine code :P"
.C:0835  36 35 30 32 20 4D 41 43 48 49 4E 45 20 43 4F 44 45 20 3A D0

         ; '"', some spaces, and next BASIC line
.C:0849  22 20 20 20 20 20 00 8D 08 01 00 97 35 33 32 37 32 2C 32 33 3A 99 22

         ; "This program errors out in CBM-BASIC :P"
.C:0860  D4 48 49 53 20 50 52 4F 47 52 41 4D 20 45 52 52 4F 52 53 20 4F 55 54
.C:0877  20 49 4E 20 C3 C2 CD 2D C2 C1 D3 C9 C3 20 3A D0

.C:0887  22 2C 58 AD 50 00 00 00

Demo online , ketikrundijalankan sebagai BASIC,sys 2049untuk dijalankan sebagai kode mesin,listuntuk menunjukkannya diartikan sebagai kode BASIC.

Berjalan sebagai BASIC menghasilkan division by zero error in 1, berjalan sebagai kode mesin acan't continue error

tangkapan layar


Penjelasan:

Dua byte pertama dari .prgfile adalah alamat muat di little endian, ini $0801(desimal 2049) di sini, yang merupakan alamat awal untuk program-program BASIC pada C64. runmemulai program ini dalam juru bahasa BASIC, sementara itu sys 2049adalah perintah untuk menjalankan program kode mesin di alamat 2049.

Seperti yang Anda lihat, baris pertama dalam tampilan BASIC adalah komentar ( rem) yang berisi "sampah" dan bagian dari string keluaran yang diperlukan. Ini adalah program kode mesin dan beberapa byte pengisi. Anda melihat beberapa perintah BASIC "acak" di sana karena program CBM-BASIC berisi perintah "tokenized" sebagai nilai byte tunggal, dan beberapa dari nilai ini sama dengan opcode yang digunakan dalam kode mesin. Kode mesin menggunakan kembali string yang ada di baris kode kedua untuk hasilnya.

Dua byte pertama dari baris program dasar adalah pointer ke baris berikutnya, di sini $0850. Ini dipilih dengan hati-hati karena 50 08juga merupakan instruksi cabang 6502 melompati 8 byte berikutnya ketika bendera meluap tidak diatur - ini digunakan untuk melompat di suatu tempat di tengah-tengah "komentar" baris ini ketika dieksekusi sebagai kode mesin. Ini 50adalah opcode yang digunakan di sini, jadi baris kedua harus dimulai pada 0850agar triknya berfungsi. Itu sebabnya Anda melihat urutan 5 20byte (karakter spasi) untuk diisi. Kode mesin secara aktif melompat ke rutinitas penanganan kesalahan ROM untuk memberikan kesalahan "tidak dapat melanjutkan".

Kode BASIC cukup mudah; sebagai argumen kedua untuk "mencetak", dua variabel tidak diinisialisasi (memiliki nilai 0dalam CBM BASIC) dibagi, memicu kesalahan "pembagian dengan nol".


2
Anda, Tuan, adalah Programmer Sungguhan. Bagaimana Anda membuat ini? Pemrograman atari?
Orion

@Orion terima kasih :) Pada dasarnya, saya mulai dengan baris kedua yang dimasukkan sebagai BASIC normal, memindahkannya menggunakan monitor kode mesin yang dibangun menjadi wakil (emulator), merakit kode mesin secara langsung ke ram dan secara manual memperbaiki garis petunjuk dari program dasar ...
Felix Palmen

9

> <> dan Foo , 42 byte

#o<"This code errors in "p"Foo"'><>'" :P"/

Coba di> <>!

Cobalah di Foo!

Foo mencetak semuanya ", seperti yang didokumentasikan dengan baik, dan mencoba untuk membaginya dengan nol pada akhirnya. Itu mengabaikan '><>'.

><>mendorong "Foo" ke tumpukan, tetapi segera muncul menggunakan p. Setelah itu mencetak semuanya ke stack dengan #o<itu keluar ketika stack kosong dengan satu-satunya pesan kesalahan yang diketahuinya,something smells fishy...


Alasan kesalahan itu penting, bukan pesan kesalahan itu. Halaman esolang pada ><>memiliki daftar alasan kesalahan, jadi saya percaya Anda harus menentukan salah satunya, bukan something smells fishy....
Bubbler

2
@ Rubbler Kesalahan ini disebabkan oleh muncul dari tumpukan kosong.
Buah Esolanging

3
Menggunakan ppop Foosangat pintar!
Buah Esolanging

6

C dan Python, 126 116 byte

-10 byte terima kasih kepada @Bubbler!

#1/*
-print("This program errors out in Python :P")
'''*/
main(c){c=puts("This program errors out in C :P")/0;}//'''

Dalam cetak Python () adalah Tidak ada, jadi mencoba untuk mendapatkan negatif tidak masuk akal, jadi Python melempar kesalahan.

Dalam C printf () mengembalikan sebuah int, jadi membaginya dengan nol memberikan pengecualian floating point.

Coba di C!
Cobalah dengan Python!


1
Anda dapat menggunakan -print(...)untuk menaikkan TypeErrordalam Python, dan kemudian Anda bebas untuk membuat Floating Point Error (pembagian dengan nol) di C. Dikombinasikan dengan beberapa baris baru yang berlebihan, di sini adalah 116 byte ( Python , C ).
Bubbler

5

Atase + Bahasa Wolfram (Mathematica) , 82 byte

s:="Attache"
s=" Mathematica "
Throw[Print["This program errors out in",s,":P"]-0]

Coba atur online! Coba Mathematica online!

Ini berporos pada makna operator =dalam dua bahasa. Di Attache, ia membandingkan untuk kesetaraan, tetapi di Mathematica, ia melakukan tugas variabel. :=melakukan penugasan variabel dalam kedua bahasa.

Sekarang, di Attache, Printmengembalikan array string yang dicetak, dan pengurangan tidak dimungkinkan dengan string dan integer (yaitu, 0). Jadi, kesalahan jenis dilemparkan. Dalam Mathematica, Printreturn Null, dan Mathematica bisa mengurangi 0itu. Tapi, kami secara manual melempar null itu denganThrow , memberikan nocatchkesalahan.


Catatan: ini tidak berfungsi untuk versi atase saat ini karena bug. Saya akan mencoba untuk memperbaikinya sesegera mungkin
Conor O'Brien

5

Python (2) dan QB64 , 82 byte

1#DEFSTR S
s="QB64"
'';s="Python"
print"This program errors out in "+s+" :P"
CLS-1

Untuk menguji versi Python, Anda bisa mencobanya secara online! Untuk menguji versi QB64, Anda harus mengunduh QB64.

Apa yang Python lihat

1#DEFSTR S
s="QB64"
'';s="Python"
print"This program errors out in "+s+" :P"
CLS-1

Baris pertama hanyalah ekspresi telanjang 1(no-op) diikuti oleh komentar.

Baris kedua diatur ske string"QB64" , tetapi baris ketiga segera mengubahnya menjadi "Python". Baris keempat mencetak pesan yang sesuai.

Baris kelima adalah ekspresi telanjang lainnya, tetapi memunculkan a NameError karena nama yang tidak ditentukanCLS .

Apa yang dilihat QB64

1#DEFSTR S
s="QB64"
'';s="Python"
print"This program errors out in "+s+" :P"
CLS-1

Baris pertama, bernomor 1#, mendefinisikan setiap variabel yang namanya dimulai dengan S(case-insensitive) sebagai variabel string. Ini artinya kita tidak harus menggunakans$ , yang akan menjadi kesalahan sintaksis dalam Python.

Baris kedua diatur ske string "QB64".'memulai komentar di QB64, jadi baris ketiga tidak melakukan apa-apa. Baris keempat mencetak pesan yang sesuai.

Baris kelima mencoba CLS(menghapus layar) dengan argumen -1. Tapi karena CLShanya menerima argumen dari 0, 1atau 2, ini menghasilkan kesalahan Illegal function call. Kesalahan membuat kotak dialog yang menanyakan pengguna apakah mereka ingin melanjutkan eksekusi atau membatalkan. Secara teknis, ini berarti kesalahannya tidak fatal (dalam hal ini, Anda dapat memilih "lanjutkan eksekusi" dan program berakhir tanpa masalah lebih lanjut); tetapi OP telah secara eksplisit mengizinkan bahasa yang dapat dilanjutkan setelah kesalahan, sehingga perilaku QB64 harus baik-baik saja.


3

Perl 5 dan JavaScript (Node.js) , 96 byte

eval("printf=console.log");printf("This program errors out in %s :P",("Perl","JavaScript"));$//0

Ini memanfaatkan fakta bahwa (...)ini adalah daftar di Perl yang printfakan menggunakan elemen paling kiri dan fakta bahwa itu adalah operator koma dalam JavaScript, yang akan mengembalikan argumen paling kanan.

Menyebabkan pembagian dengan kesalahan nol dalam Perl dan ReferenceError karena $tidak didefinisikan dalam JavaScript.

Coba Perl secara online!

Coba JavaScript online!


3

Oktaf dan MATLAB, 67 byte

v=ver;disp(['This program errors out in ' v(1).Name ' :P']);v(--pi)

Cobalah online!

Catatan: Kode ini mengasumsikan MATLAB diinstal tanpa kotak alat (atau bahwa nama kotak alat apa pun yang dipasang tidak dimulai dengan huruf A hingga M).

Bagaimana itu bekerja:

Kode mendapatkan data versi untuk penerjemah dan kotak peralatan menggunakan ver. Running v(1).Namemengekstrak nama produk pertama, ini akan mengembalikan salah satu OctaveatauMATLAB menganggap catatan di atas benar.

Program kemudian akan menampilkan string yang diperlukan, lengkap dengan OctaveatauMATLAB sesuai kebutuhan.

Akhirnya kita lakukan v(--pi) .

Di Octave, --adalah operator pra-pengurangan. Karena itu ia mencoba melakukan pra-pengurangan yang gagal karena variabel pitidak ada ( pisebenarnya berfungsi, bukan variabel).

This program errors out in Octave :P
error: in x-- or --x, x must be defined first

Di MATLAB, operator pra-pengurangan tidak ada. Dengan demikian pernyataan tersebut diartikan v(-(-pi))sama dengan keadilan v(pi). Namun pibukan bilangan bulat, jadi tidak dapat digunakan untuk mengindeks ke dalam varray, memberikan kesalahan.

This program errors out in MATLAB :P
Subscript indices must either be real positive integers or logicals.

3

C ++ 14 (gcc) / C ++ 17 (gcc) , 107 105 byte

#include<cstdio>
int*p,c=*"??/0"/20;int
main(){*p=printf("This program errors out in C++ 1%d :P",4+c)/c;}

Cobalah online! (C ++ 14)

Cobalah online! (C ++ 17)


Mengasumsikan bahwa <cstdio>menyatakan printfdi namespace global (selainstd ) dan bahwa set karakter eksekusi dasar menggunakan nilai-nilai ASCII, yang keduanya benar menggunakan g ++ di Linux.

Tangkapan dasar di sini adalah bahwa C ++ 17 menghilangkan trigraph dari bahasa.

Dalam C ++ 14, "??/0"berisi trigraph dan setara dengan "\0". Begitu *"??/0"juga nol, dan cdiatur ke nol. Angka 4 diteruskan sebagai argumen untuk printf, kemudian pembagian oleh cmenyebabkan perilaku yang tidak ditentukan. Di Linux, ini terjadi sebelum *pmuncul di gambar, dan program mendapatkan SIGFPE.

Dalam C ++ 17, "??/0"persis panjang 4 string tampaknya. Begitu *"??/0"juga '?'atau 63, dan cdiatur ke 3. Angka 7 diteruskan sebagai argumen printf, dan kali ini pembagian oleh cvalid. Karena padalah anggota namespace, ia mendapat inisialisasi nol pada awal program dan memiliki nilai pointer nol, sehingga *pperilaku tidak terdefinisi. Di Linux, karena program mencoba mengubah memori pada alamat nol, program tersebut mendapat a SIGSEGV.


mainJenis kembali dapat dihilangkan, jadi -3 byte.
Max Yekhlakov

2

Perl 5 dan Perl 6 , 55 byte

say('This program errors out in Perl ',5-~-1,' :P').a/0

Coba Perl 5 secara online! (Pembagian ilegal dengan nol)

Coba Perl 6 secara online! (Tidak ada metode seperti itu)

Awalan ~adalah pengetatan dalam Perl 6 dan pada dasarnya no-op dalam program di atas. Di Perl 5, bitwise tidak, mengubah -1 ke 0.

. adalah sintaks pemanggilan metode dalam Perl 6 dan konatenasi dalam Perl 5.


2

C (gcc) / Stax , 109 byte

AA=~1;
	char* s;main(){*(int*)(printf("%s C :P",s))=0;}char* s=
"This program errors out in";;;/*dp`UGYC\`Q*/

Cobalah online! (C (gcc))

Cobalah online! (Stax) atau Jalankan dan debug! (Stax)

Segfault dalam C. Operasi tidak valid di Stax. Saya suka bagaimana segala sesuatu yang bukan komentar sebenarnya digunakan di Stax.

C

Ini adalah bagaimana C melihatnya. Baris pertama adalah no-op. Baris kedua mencetak pesan dengan printfdan kemudian segfault karena =0.

AA=~1;
	char* s;main(){*(int*)(printf("%s C :P\n",s))=0;}char* s=
"This program errors out in";;;/*dp`UGYC\`Q*/

Stax

Program Stax berakhir setiap kali ia mencoba untuk pop atau mengintip dari tumpukan kosong. Ini membuatnya sedikit rumit dan kami harus menyiapkan tumpukan yang tidak kosong. AA=~1;melakukan ini sambil tetap memberikan pernyataan yang valid dalam C.

AA=~1;
AA=       10=10, returns a 1
   ~      Put it on the input stack
    1     Pushes a 1 to main stack (*)
     ;    Peek from the input stack (**)

Apa yang benar-benar berguna adalah ~, ia menyiapkan tumpukan input non-kosong sehingga ;dapat dieksekusi tanpa keluar dari program. Namun keduanya1 s di tumpukan utama juga digunakan nanti.

Baris kedua dimulai dengan tab dan memulai komentar baris di Stax.

"...";;;/*dp`UGYC\`Q*/
"..."                     "This program errors out in"
     ;;;                  Peek the stack three times so that we have enough operands for the next two operations
        /                 Divide, this consumes one element of the main stack
         *                Multiply, this consumes another element
          d               Discard the result, now the TOS is the string
           p              Pop and print without newline
            `UGYC\`       Compressed string literal for " Stax :P"
                   Q      Print and keep the string as TOS
                    *     Duplicate string specific times
                          Since the element under the top of stack is `1` that was prepared in (**), this does nothing
                     /    Invalid operation error

Operasi yang tidak valid sedang mencoba melakukan /operasi untuk string sebagai TOS (operan ke-2) dan nomor 1dari (*) sebagai operan ke-1, yang tidak valid.

Jika dua operan ditukar, itu akan menjadi operasi yang valid di Stax.


2

Jelly dan M , 39 byte

İ=`ị“¢³ƥ“Ȥ¹»;“ :P”“¢ḅñ⁵ẹḞŀẊịñṙȧṄɱ»;ȮṠṛƓ

Cobalah di Jelly!

Coba di M!

Kedua bahasa berlaku terbalik İuntuk 0yang hasil dalam infuntuk Jelly dan zoountuk M. Saya tidak tahu mengapazoo mewakili infinity di M. Tanyakan Dennis.

Perbedaan penting adalah bahwa infinity Jelly sama dengan dirinya sendiri sedangkan infinity M tidak sama. Dengan demikian monad "sama dengan dirinya sendiri" =`menghasilkan 1Jelly dan 0M. Dari sini:

İ=`ị“¢³ƥ“Ȥ¹»;“ :P”“¢ḅñ⁵ẹḞŀẊịñṙȧṄɱ»;ȮṠṛƓ
İ=`                                      0 in M, 1 in Jelly
    “¢³ƥ“Ȥ¹»                             Pair of compressed strings: [' M',' Jelly']
   ị                                     Index into this list with 0 or 1
            ;“ :P”                       Concatenate with the string ' :P'
                  “¢ḅñ⁵ẹḞŀẊịñṙȧṄɱ»       Compressed string: 'This program errors in'
                                  ;      Prepend this to ' Jelly/M :P'
                                   Ȯ     Print the string and return it
                                    Ṡ    Sign. M errors with a string as input and terminates
                                         Jelly returns a list of Nones
                                     ṛ   Right argument. This prevents the list of Nones from being printed
                                      Ɠ  Read a single line from input. Since input is not allowed, this produces an EOFError

Kesalahan Jelly adalah EOFError: EOF when reading a line.

Kesalahan M adalah TypeError: '>' not supported between instances of 'str' and 'int'.


1
Bagaimana Anda bahkan mulai melakukan ini dalam dua esolang?
Magic Gurita Guci

2

Foo / CJam , 51 50 byte

"This program errors out in ""Foo"/'C'J'a'm" :P"Li

Ini keluar dengan kesalahan divide-by-zero di Foo, dan NumberFormatExceptiondi CJam.

Untuk CJam:

  • String literal (antara tanda kutip) mendorong dirinya ke tumpukan. Item dari tumpukan secara otomatis dicetak tanpa pemisah saat program berakhir.
  • /mencoba untuk membagi string This program errors out in pada substring Foo. Karena string tidak mengandung substring, ini menghasilkan array tunggal yang berisi string asli, yang ditampilkan dengan cara yang persis sama.
  • 'xadalah karakter literal untuk x, yang dicetak dengan cara yang sama seperti string satu karakter. Dengan cara ini, kita bisa mendorong data untuk CJam yang diabaikan oleh Foo (saya belum menemukan cara membuat loop yang tidak dieksekusi di Foo).
  • Limencoba melemparkan string kosong ke integer, yang gagal. Semuanya dari tumpukan dicetak.

Ke Foo:

  • String literal (antara tanda kutip) mencetak dirinya sendiri.
  • /mencoba untuk membagi sel saat ini dengan elemen tumpukan atas (yang merupakan implisit 0). Untuk beberapa alasan, kesalahan bagi-oleh-0 tidak fatal di Foo, jadi ini hanya mencetak pesan
    Only Chuck Norris can divide by zero.
    ke STDERR dan terus berjalan.
  • Karakter yang tidak dikenal ( 'C'J'a'mdan Li) diabaikan.

2
Bukankah 50 byte terakhir?
Bubbler

@ Lubbler Lupa untuk mengeditnya, maaf.
Buah Esolanging

7
Saya pikir ada bug di juru bahasa Foo. Seharusnya kesalahan dengan Only Jon Skeet can divide by zero. meta.stackexchange.com/a/9138

2

Python dan Lua , 111 110 102 98 95 85 bytes

x="This program errors out in ",#[[
print(x[0]+"Python :P")
a#]]z=#print(x.."Lua :P")

Kesalahan: Python 3:

Traceback (most recent call last):
  File ".code.tio", line 3, in <module>
    a#]]z=#print(x.."Lua :P")
NameError: name 'a' is not defined

Lua:

lua: .code.tio:3: attempt to get length of a nil value
stack traceback:
    .code.tio:3: in main chunk
    [C]: in ?

Jelas berbeda.

Menyalahgunakan banyak perbedaan:

  • <var>=<a>,<b>,... menciptakan tuple dengan Python, tetapi dalam Lua ia membuat daftar argumen, yang hanya diambil anggota pertama.
  • #memulai komentar dengan Python, tetapi operator panjang di Lua. Alat peraga tambahan ke Python untuk memungkinkan tupel berakhir dengan koma.
  • [[...]]adalah sintaksis string multiline Lua, yang berarti ia bahkan tidak melihat fungsi cetak Python; ini diperlukan karena Lua menggunakan ..untuk penggabungan string dan tidak+ .
  • Kesalahan python setelah melihat a , variabel yang tidak terdefinisi; Lua setelah itu z=#print(x.."Lua :P"). Menggunakan hanya #print(x.."Lua :P")untuk Lua tidak berfungsi, karena hal itu menimbulkan kesalahan sebelum kode dieksekusi.

Suntingan:

  • Tidak perlu digunakan "".joindalam Python, -1 byte
  • Membuat x string dalam kedua bahasa dan tempatkan Pythondalam string literal dalam fungsi cetak, -8 byte
  • Menggunakan #[[]] lebih pendek dari #""dan --[[]], -4 byte
  • Tidak perlu digunakan #1 sebagai kunci tabel, -3 byte
  • Jo King melakukan ini , -9 byte
  • Mengambil panjang nilai pengembalian print(x.."Lua :P")karya, tampaknya; -1 byte


2

Java dan C # 242 235

/**\u002f/*/using System;/**/class G{public static void/**\u002fmain/*/Main/**/(String[]a){String s="This program errors out in ";/**\u002fSystem.out.print(s+"Java :P");/*/Console.Write(s+"C# :P")/**/;s=/**\u002f(1/0)+""/*/a[-1]/**/;}}

Menyalahgunakan penanganan escape yang berbeda antara java dan C # (unicode escapes diuraikan sebelum parsing kode di java dan bukan di c #) sebagai semacam preprocessor, itulah tugas dari \u0027 sulap, sisanya adalah beberapa "toggle-comments"

Sunting: Memotong 8 byte berkat penunjuk @KevinCruijssen

Sunting: Aturan derp diperbaiki


Anda dapat golf 6 byte dengan mengubah baik Stringdi var(Java 10 mendukung ini). (Atau 5 dengan mengubah String s="...";ke String s="...",x;dan menghapus Stringdi depan x=di Jawa 9 atau sebelum).
Kevin Cruijssen

1
menggunakan kembali S-string bekerja, juga untuk java99 dan sebelumnya. @KevinCruijssen
masterX244

2

AutoHotKey / C #, 155 133 128 122 byte

Penyorotan sintaks menjelaskan lebih baik daripada yang saya bisa:

C # RuntimeBinderException: 'Tidak dapat meminta tipe yang bukan delegasi'

;dynamic
i="This program errors out in " ;Console.Write(i+"c# :P");i();/*
i:=SubStr(i,2,27)
send %i%AutoHotkey :P
Throw */

Kesalahan AutoHotkey : Pengecualian dilemparkan.

;dynamic
i="This program errors out in " ;Console.Write(i+"c# :P");i();/*
i:=SubStr(i,2,27)
send %i%AutoHotkey :P
Throw */

Suntingan:

  1. menghapus var
  2. -5 byte berkat susu

2
Berikut adalah pengecualian sedikit lebih pendek untuk melemparkan di C #: i+=i[-1]. System.IndexOutOfRangeException: 'Indeks berada di luar batas array.'
susu

2
Sedikit lebih pendek untuk digunakan dynamicdaripada menggunakan vardan melempar Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 'Tidak dapat memanggil tipe non-delegasi' dengan i().
susu

2

PHP 7+ / JavaScript, 90 89 byte

Ini menggunakan 2 bahasa dengan sintaks yang sangat mirip, memungkinkan untuk menulis kode ini pada kedua bahasa.

Pemisahan bahasa dilakukan oleh properti yang tidak ada dalam JavaScript: PHP menganggap [](array kosong) sebagai nilai palsu sementara itu benar dalam JavaScript (karena itu adalah objek dan objek selalu benar , bahkan new Boolean(false)).

$X='This program errors out in %s :P';([]?console.log($X,'JavaScript'):printf($X,PHP))();


Eksekusi:

Akan fokus pada potongan kode berikut: ([]?console.log($X,'JavaScript'):printf($X,PHP))();.

Atribusi string berfungsi sama di kedua bahasa.

Kode ini menggunakan "operator ternary" ( Javascript , PHP ), yang sebagian besar berfungsi dengan cara yang sama dalam kedua bahasa.

Javascript

Javascript akan menjalankan console.log($X,'JavaScript')bagian yang mengembalikan undefined.

Kemudian, ketika Anda mencoba mengeksekusi (...)(), Anda mendapatkan Uncaught TypeError: (intermediate value)(intermediate value)(intermediate value) is not a function(di Google Chrome).

PHP

PHP akan mengeksekusi printf($X,PHP)karya itu.

Dalam PHP, printffungsi mengembalikan panjang output .

PHP memiliki fungsionalitas yang menarik: ia dapat menjalankan fungsi yang namanya disimpan dalam variabel (atau, sejak PHP7, sebagai hasil dari ekspresi), yang mencegah kesalahan sintaksis.

PHP kemudian akan mencoba menjalankan fungsi yang namanya adalah hasil dari ekspresi []? ... :printf($X,PHP)(yang merupakan angka 33).
Tetapi fungsi yang menarik itu memiliki peringatan: hanya menerima string (ya!).

Ini menyebabkan a Fatal error: Function name must be a string, karena 33a int.


Terima kasih kepada Shieru Asakoto karena telah menyelamatkan saya 1 byte!


1
[]lebih pendek daripada '0'dan juga dievaluasi secara berbeda dalam JS dan PHP, jadi mungkin -1 byte di sini?
Shieru Asakoto

Aku punya banyak pertanyaan dengan masalah itu, di mana []kebutuhan untuk digunakan sebagai pengganti '0', '\0', '\0'=="0", dan digunakan bahwa []sebelum juga. Tetapi terima kasih telah menemukan pertanyaan ini.
Ismael Miguel

1

Perl 5 dan C, 95 byte

//;$_='
main(){puts(puts("This program errors out in C :P"));}//';/T.*n /;print$&,"perl :P";die

//; pada dasarnya adalah NOP dalam perl, dan merupakan komentar dalam C.

Jadi program C efektif:

main(){puts(puts("This program errors out in C :P"));}

Yang mencetak string yang diperlukan, lalu mencoba menjalankan puts(32). Ini adalah perilaku yang secara teknis tidak terdefinisi dalam C, tetapi menyebabkan kesalahan segmentasi pada TIO dan setiap sistem yang saya akses.

Program perl memperlakukan seluruh program C sebagai string, menggunakan regex /T.*n /untuk mencocokkan This program errors out indan kemudian mencetaknya dan perl :P. diemenyebabkan program macet dengan kesalahan Died at script_name line 2.

Jika Anda tidak suka itu sebagai kesalahan, 1/0panjangnya sama dan macet dengan Illegal division by zerokesalahan. Saya hanya suka dielebih banyak;)

Cobalah online! (C)

Cobalah online! (Perl)


1

VBScript, JScript, 72 byte

x="VB"
'';x='J'
WScript.echo("This program errors out in "+x+"Script")
y

VBScript akan mencetak "kesalahan runtime Microsoft VBScript: Ketik ketidakcocokan: 'y'"
JScript akan mencetak "kesalahan runtime Microsoft JScript: 'y' tidak terdefinisi"


1

JavaScript & Python 3, 105 91 byte

Kesalahan oleh NameError: name 'console' is not defineddalam Python 3

a="This program errors out in %s :P"
1//2;print(a%"Python 3")
console.log(a,"JavaScript")()

Cobalah online!

... dan oleh TypeError: console.log(...) is not a functiondalam JavaScript.

a="This program errors out in %s :P"
1//2;print(a%"Python 3")
console.log(a,"JavaScript")()

Cobalah online!


1

Java (JDK) / JavaScript (Node.js), 154 byte

class P{P(){var s="This program errors out in ";try{System.out.printf("%sJava :P",s);}finally{if(1!='1'){var a=0/0;}throw new Error(s+"JavaScript :P");}}}

Cobalah online! (Jawa)

Cobalah online! (JavaScript)

Output di Jawa:

This program errors out in Java :P
Exception in thread "main" java.lang.ArithmeticException: / by zero
    at P.(Main.java:1)

Output dalam JavaScript (ke stderr):

Error: This program errors out in JavaScript :P
    at P (/home/runner/.code.tio:1:185)

Ini mengambil keuntungan dari pengetikan JavaScript yang lemah ( 1=='1') untuk mendeteksi bahasa, dan kata kunci yang sama di Java dan JavaScript ( var, class), dan konstruktor kesalahan yang serupa ( new Error()) untuk membuat polyglot.


1

PowerShell v6 dan PowerShell v2, 73 byte

"This errors out in PowerShell v$($PSVersionTable.PSVersion) :P"
1-shl1/0

Cobalah online!

Ini akan melempar kesalahan penguraian pada v2 karena -shldiperkenalkan di v3. v3 + kemudian akan dapat dengan benar menggeser nilainya sebelum mencoba membaginya dengan 0, dengan mudah melempar kesalahan pembagian-demi-nol. Kedua versi memiliki hashmap $ PSVersionTable yang berisi PSVersionbidang


0

C (gcc) di Linux / C (gcc) di Mac (160)

#include <sys/utsname.h>
main(){struct utsname n;float g;uname(&n);printf("This program errors out in C(gcc) on %s :P\n",n.sysname);g=1/(int)gamma(1);abort();}

Belum diuji pada Mac; pada dasarnya, John Cook menunjukkan (di blognya ) bahwa POSIX tidak mendefinisikan gamma; Linux menggunakan log fungsi gamma (log (gamma (1)) akan mengembalikan 0 yang akan memicu pengecualian floating point); OSX menggunakan fungsi gamma "benar", (yang secara resmi disebut tgamma per POSIX); ini mengembalikan 1 yang kemudian akan mencapai pernyataan batalkan; Saya mencoba membuatnya melemparkan kesalahan floating point yang berbeda (misalnya sqrt (-1) tapi saya lupa bagaimana membuat kesalahan melempar kesalahan vs hanya mengembalikan nol)


0

Perl, Bash (78 byte)

printf "This program errors out in ";eval 'echo Bash :P'||print"Perl :P
";
a()

Output dalam Perl:

This program errors out in Perl :P
Undefined subroutine &main::a called at /tmp/perlbash line 3.

Output dalam Bash:

This program errors out in Bash :P
/tmp/perlbash: line 4: syntax error: unexpected end of file

(Perhatikan bahwa Bash memang menampilkan line 4kesalahan, terlepas dari kenyataan bahwa baris 3 tidak berakhir dengan umpan baris ...)


0

C dan ECPP, 112 byte

#ifdef ECPP
#replace "C" "ECPP"
#endif
main(){puts("This program errors out in " "C" " :P");raise(strlen("C"));}

0

C (gcc) dan Haskell , 135 byte

char/*x=0-- */*
s="This program errors out in ";
int main(){--s;*s=printf("%sC :P",s+1);}//-}=0;main=mapM print[s++"Haskell :P",tail""]

Cobalah online (С)! Cobalah online (Haskell)!

Hasilnya dicapai dengan menjalin komentar, versi C pada dasarnya adalah ini:

char * s = "This program errors out in ";
int main ()
{
   --s;
   *s = printf ("%sC :P", s + 1);
}

(Kegagalan dicapai dengan menulis sebelum awal string).

Versi Haskell, di sisi lain, mengurangi sebagai berikut:

char /* x = 0 -- a useless operator (/*) taking two arguments
s = "This program errors out in ";
int main () = 0 -- a useless function int taking two arguments
main = mapM print [s ++ "Haskell :P", tail ""]

(Kegagalan dicapai dengan mengambil ekor dari daftar kosong)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.