이 코드는 * this *와 * that *에서 오류가 발생합니다. 실제로 작성 되었습니까?


25

에서 영감을 당신이 찾고있는 언어 아니에요!

도전

두 가지 다른 프로그래밍 언어를 선택하고 다음 줄을 stdout (또는 이와 동등한 것)으로 인쇄하는 프로그램을 작성하십시오.

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

두 언어 각각에서 다른 종류의 오류를 생성합니다.

규칙

일부 규칙은 원래 도전에서 가져옵니다.

  • 출력에서 언어 이름은 정확히 다음과 같아야합니다.
    • 에 나와있는 이름 TIO 선택적으로 버전 번호 및 / 또는 구현의 이름을 제외하고, (당신이 사용하는 경우 예를 들어, JavaScript (Node.js)당신의 언어의 하나로서, 당신이 사용할 수있는 JavaScript언어 이름,하지만 JSJavascript.)
    • 선택한 언어를 TIO에서 사용할 수없는 경우 공식 웹 사이트 (또는 GitHub 저장소)의 전체 이름입니다.
  • 두 프로그램 모두 사용자의 입력을받지 않아야합니다.
  • 어느 언어로든 주석을 사용할 수 있습니다.
  • 동일한 언어의 두 가지 버전이 다른 언어로 계산됩니다.
    • 이 작업을 수행하면 프로그램은 주 버전 번호를 출력해야하며 두 개의 다른 부 버전에서 실행중인 경우 부 버전도보고해야합니다.
    • 사전 빌드 된 버전 함수를 사용하면 안됩니다 (런타임에 이미 평가 된 변수 포함).
  • 플래그에 코드 프래그먼트 (예 : C)가 포함되어 있지 않는 한, 동일한 언어로 된 두 개의 다른 명령 행 플래그 가이 메타 컨센서스에 따라 다른 언어계산됩니다-Dblahblah... .
    • 이것이 완료되면, 프로그램은 또한 사용 된 플래그를 출력해야합니다.
  • 동일한 의미론 (예 : "0으로 나누기", "세그먼트 결함"또는 "범위를 벗어난 인덱스")에 의해 두 오류가 생성되지 않으면 두 오류가 서로 다른 것으로 간주됩니다.
    • 오류 후 언어 런타임이 종료되지 않지만 사용자에게 오류를보고하면 유효한 오류입니다.
    • 언어가 오류 메시지를 식별하지 않지만 오류를 유발하는 알려진 이유 목록이있는 경우 오류 메시지가 아닌 이유를 지정해야합니다.
      예는 ><>하나의 오류 메시지 something smells fishy...만 있지만 esolangs 위키 페이지 에는 오류 이유 목록이 있습니다.
  • 호출 eval()또는 이와 유사한 방법으로 구문 오류가 생성되지 않으면 구문 오류가 허용되지 않습니다 .
  • throw(JS), raise(Python), die(Perl) 또는 이와 유사한 것을 통해) 수동으로 무언가를 던지는 것은 허용되지만, 모든 것은 한 종류의 오류로 간주됩니다.
  • 2D 또는 golflangs에서 유효하지 않은 명령으로 인한 오류도 허용됩니다 (한 종류의 오류로 처리됨).

파이썬과 루비

  • 파이썬 : This program errors out in Python :P표준 출력 후 정의되지 않은 식별자
  • 루비 : This program errors out in Ruby :Pstdout으로, 범위를 벗어난 인덱스

C89와 C99

  • C89 : This program errors out in C 89 :P표준 출력 후 0으로 나누기
  • C99 : This program errors out in C 99 :Pstdout, 세그먼테이션 오류

버전 번호는 항상 언어 이름과 공백으로 구분 해야 합니다.

파이썬 2.7.9 및 파이썬 2.7.10

  • Python 2.7.9 : This program errors out in Python 2.7.9 :Pstdout으로, eval에서 구문 오류
  • Python 2.7.10 : This program errors out in Python 2.7.10 :Pstdout으로, dict에서 주요 오류

펄과 펄 -n

  • Perl : This program errors out in Perl :Pstdout에 유효하지 않은 시간 형식
  • Perl -n: This program errors out in Perl -n :Pstdout에 존재하지 않는 파일을 열어보십시오

승리 조건

이것은 이므로 바이트 단위의 가장 짧은 코드가 이깁니다. 그러나 매우 짧지 않더라도 재미 있거나 흥미로운 답변을 게시하는 것이 좋습니다.



오류가 프로그램을 중지해야합니까?
Jo King

나는 처음에 그렇게 생각했다. 그러나 "0으로 나누기"와 같은 이후에 (정의되지 않은 동작으로) 계속 될 수있는 언어가 있고 프로그램에서 해당 오류가 발생했음을 인정하는 메커니즘이 있으면 기꺼이 허용 할 것입니다.
Bubbler

나는 이미 답을 알고 있다고 생각하지만 경우에 따라 문장에 This program errors out in ...공백 대신 혼합 탭 / 공백이 포함될 수 있습니까?
Kevin Cruijssen

관련 (두 개의 다른 언어로 두 개의 다른 텍스트를 인쇄).
Kevin Cruijssen

답변:


33

Python 2 / Python 3 , 60 바이트

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

파이썬 2 :

  • /정수 나누기, 3/2는 1을 얻습니다. int (3/2 * 2)는 2입니다.
  • print는 명령문이므로 첫 번째 명령문은로 읽습니다 print((...)*1). 여기서 *1문자열을 한 번 반복한다는 의미입니다.
  • 두 번째 명령문은 존재하지 않는 변수를 참조하여 오류를 일으켰습니다.
  • 온라인으로 사용해보십시오!

파이썬 3 :

  • '/'는 부동 수 나누기이며 3/2는 1.5입니다. int (3/2 * 2)는 3입니다.
  • print는 함수이므로 첫 번째 문장은로 읽습니다 (print(...))*1.
  • 함수 print반환 None; 에서 곱셈이 작동하지 않으므로 None x int"지원되지 않는 피연산자"가보고됩니다.
  • 온라인으로 사용해보십시오!

15

C 및 C ++, 114101 바이트

l4m2 덕분에 -13 바이트 !

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

C ++의 분할 오류, C의 부동 소수점 예외

auto디폴트로 intC에 너무 (int).5된다 0그래서 분할 제로하여 기본적으로 분할하려고.

C ++ 1/d은 2이므로 주소에 추가하고 d해당 주소의 값을 변경하려고하면 segfault가 발생합니다.

C ++로 사용해보십시오!
C로 사용해보십시오!


1
그것은 도움이되지만 당신은 2 0 C / C ++를 매핑 할 수 있습니다, 당신은 사용할 수 있습니다 확실하지 경우 "++"+n어디에 n이다 0C에 대한 ++와 2C에 대한
코너 오브라이언

2
d?"++":""9 자, "++"+4*d8 자 그러나 C / C ++를 거꾸로 가져옵니다. 한숨.
Yakk

1
int main(){auto d=.5;printf("This program errors out in C%s :P",d?"++":"");2[&d]+=1/d;}(105) 왜인지 모르겠지만
l4m2

1
또한 int생략 할 수 있습니다
l4m2

L"⬫"+!d대신 추천d?"++":""
천장 고양이

14

JavaScript + HTML / HTML + JavaScript, 160 바이트

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

이 언어가 두 가지 언어인지는 확실하지 않지만 재미 있습니다.


따라서 전자는 정의되지 않은 식별자이고 후자는 비 함수 유형에 대한 함수 호출입니다. 기술적으로 나는 이전의 HTML과 후자의 JavaScript를 고려할 것이지만 정말 좋은 생각입니다.
Bubbler

<!-- ... -->한 줄 주석 마커로 잘 사용 (이것은 이전 버전과의 호환성을 위해 사양에 있다는 것을 알고 있습니다)
Shieru Asakoto

12

Java 8 및 C99, 172 바이트

//\
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/**/;}}

에 대한 내 대답을 바탕으로 'ABC'와 'CBA' 도전 .

Java 8에서 사용해보십시오 -ArrayIndexOutOfBoundsException이 발생합니다 : 1 .
C에서 시도하여 부동 소수점 예외가 발생합니다. 0으로 나누기가 정의되지 않았습니다 .

설명:

//\
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/**/;}}

위의 Java 강조 표시 된 코드에서 볼 수 있듯이 첫 번째 줄은 주석으로 인한 주석 //이고 C 코드는 주석으로 인한 주석 /* ... */입니다.

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

따라서 STDOUT으로 인쇄 한 다음 두 번째 프로그램 인수 (아무 것도없는 경우)에 액세스하려고 시도하여 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/**/;}}

lang-cJava와 동일한 강조 표시로 인해 C-highlighting을 올바르게 활성화하는 방법을 잘 모르겠습니다 . 그러나 //\Java 코드 인 다음 행을 주석 처리하여 다음을 수행합니다.

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

따라서 STDOUT으로 프린 싱 한 다음 0으로 나누기 오류가 발생합니다.


내가 생각 그것은 C89과 C99 모두 작동합니다. 날 붙잡아 두지 마
SIGSTACKFAULT

//C99와 C에 첨가 하였다.
betseg

둘 다 덕분에로 변경했습니다 C99.
케빈 크루이 센

a[1]대신에 a[0]?
xehpuk

@xehpuk 특별한 이유가 없습니다. 내가 사용하는 숫자는 중요하지 않으며 1처음부터 이미 입력했습니다 . 사용할 수도 0, 9등뿐만 아니라. 이 게시물에 대해 수정해야 할 내용이 있으면 0동시에 변경합니다 .
Kevin Cruijssen

11

자바 8 공백 , 439 431 428 408 바이트

                         






























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














Java 8에서 사용해보십시오 . ArrayIndexOutOfBoundsException이 발생 합니다.
공백으로 시도하여 사용자 오류가 발생합니다 (Infix Plus를 수행 할 수 없음) .

설명:

자바 8 :

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

따라서 STDOUT으로 인쇄 한 다음 첫 번째 프로그램 인수 (아무 것도없는 경우)에 액세스하려고 시도하므로 ArrayIndexOutOfBoundsException 이 생성 됩니다.


공백 :

[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]

문자 S(공백), T(탭) 및 N(줄 바꾸기)가 강조 표시로만 추가되었습니다.
[..._some_action]설명으로 만 추가되었습니다.

강조 표시된 버전을 사용해보십시오.

공백은 스택 기반 언어이며 공백, 탭 및 줄 바꾸기를 제외한 모든 것을 무시합니다. 의사 코드의 동일한 프로그램은 다음과 같습니다.

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

모든 값을 인쇄하는 즉시 오류가 발생하고 스택에 두 항목이 필요한 Add ( TSSS)를 시도하면 스택이 비어 있습니다.

이 Java 프로그램으로 상수 111를 생성 했습니다.이 공백은 공백에서 만든 이전 ASCII 관련 문제에도 사용했습니다. 또한 바이트를 저장하기 위해 공간에 일부 사본을 사용했습니다.

주목해야 할 중요한 것은 Java 프로그램을 공백 응답 내에 배치하는 데 사용한 트릭입니다. 공백에서 숫자가 어떻게 푸시되는지 설명하면서 시작하겠습니다.

S시작시 : 스택 조작 사용;
S: 다음에 오는 숫자를 숫자로 누릅니다.
S또는 T: 각각 양 또는 음;
일부 S및 / 또는 T, 뒤에 N이진수로 표시되는 숫자 : 위치 T=1S=0.

다음은 몇 가지 예입니다.

  • 값 1을 누르면 SSSTN;
  • -1 값을 누르면 SSTTN;
  • 값 111을 누르면됩니다 SSSTTSTTTTN.
  • 값 0을 누르면 것은 할 수있다 SSSSN, SSTSN, SSSN, SSTN, SSSSSSSSSSSSN, 등 (당신이 사용하는 경우 SSSN(또는 SSTN) 우리가 그 기호를 언급 한 후에 암시 적으로 0이기 때문에, 우리가 진 부분을 지정할 필요가 없습니다.)

따라서 SSSN값을 푸시하기에 충분합니다 0( o이 경우 문자 에 사용됨 ). 그러나이 골프 화이트 스페이스 프로그램에 Java 프로그램을 배치하려면 추가 공간이 필요했기 때문에 처음 두 개 o는으로 푸시 SSSN되지만 세 번째 것은으로 푸시 SSSSN되므로 Java 프로그램의 문장에 충분한 공간이 있습니다.


10

CBM BASIC6502 기계 코드 (C64) 142 144 바이트

구문 오류가 허용되지 않음을 인식 한 후 2 바이트를 추가해야했습니다 ....


.prg파일의 덤프 :

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

C64 편집기에 나열된 CBM BASIC보기

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

원본 목록

주의 : 기본 편집기에서이 프로그램을 올바르게 입력 할 수 없습니다. BASIC 편집기에서이 프로그램 편집 하지 않아도 충돌이 발생합니다. 여전히 실행 가능한 BASIC 프로그램입니다.)


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

온라인 데모 ,runBASICsys 2049으로 실행, 기계 코드로 실행,listBASIC 코드로 해석됨을 입력하십시오.

BASIC으로 division by zero error in 1실행하면 기계 코드로can't continue error

스크린 샷


설명:

.prg파일 의 처음 2 바이트는 리틀 엔디안의로드 주소입니다. 여기는 $0801(소수 2049)이며, 이는 C64에서 BASIC 프로그램의 시작 주소입니다. address에서 기계 코드 프로그램을 실행하는 명령 run인 동안 BASIC 인터프리터에서이 프로그램을 시작 sys 2049합니다 2049.

보시다시피, 기본보기의 첫 번째 줄은 rem"쓰레기"와 필수 출력 문자열의 일부를 포함 하는 주석 ( )입니다. 이것은 머신 코드 프로그램이며 일부 필러 바이트입니다. CBM-BASIC 프로그램에는 "토큰 화 된"명령이 단일 바이트 값으로 포함되어 있고이 값 중 일부는 기계 코드에서 사용되는 opcode와 동일하므로 일부 "임의"BASIC 명령이 표시됩니다. 기계어 코드는 출력을 위해 두 번째 코드 행에있는 문자열을 재사용합니다.

기본 프로그램 라인의 처음 2 바이트는 다음 라인에 대한 포인터입니다 (here) $0850. 이는 50 08오버플로 플래그가 설정되지 않은 경우 다음 8 바이트를 뛰어 넘는 6502 분기 명령어 이기 때문에 신중하게 선택 됩니다. 이는 머신 코드로 실행될 때이 "코멘트"행의 중간에서 점프하는 데 사용됩니다. 는 50두 번째 라인에서 시작해야하므로, 여기에 사용되는 연산 코드입니다 0850작업에 트릭합니다. 그래서 5 20바이트 (공백 문자) 의 시퀀스 가 채워지는 것을 볼 수 있습니다. 기계 코드는 ROM 오류 처리 루틴으로 적극적으로 이동하여 "계속할 수 없습니다"오류를 발생시킵니다.

기본 코드는 매우 간단합니다. "print"에 대한 두 번째 인수로, 초기화되지 않은 두 변수 ( 0CBM BASIC에 값이 있음 )가 나누어 져 "0으로 나누기"오류가 발생합니다.


2
귀하는 실제 프로그래머입니다. 이걸 어떻게 생각 해냈어? 아타리 프로그래밍?
오리온

@ Orion thanks :) 기본적으로 두 번째 줄은 일반 기본으로 입력하고 바이스 ​​(에뮬레이터)에 내장 된 기계 코드 모니터를 사용하여 길을 벗어 났으며 기계 코드를 램에 직접 조립하고 수동으로 줄 포인터를 수리했습니다. 기본 프로그램 ...
Felix Palmen

9

> <>Foo , 42 바이트

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

> <>에서 사용해보십시오!

Foo에서 사용해보십시오!

Foo는 "문서화 된대로 모든 것을 인쇄 하고 마지막에 0으로 나누려고합니다. 를 무시합니다 '><>'.

><>"Foo"를 스택으로 푸시하지만 즉시를 사용하여 팝합니다 p. 스택에 모든 내용을 인쇄 한 후 #o<스택에 비어있는 유일한 오류 메시지가 표시되면 종료됩니다.something smells fishy...


오류 메시지가 아니라 오류 이유가 중요합니다. esolang 페이지 ><>의 오류 이유 목록이 있으므로 그중 하나를 지정하지 말아야한다고 생각합니다 something smells fishy....
Bubbler

2
@Bubbler 오류는 빈 스택에서 튀어 나와서 발생합니다.
Esolanging Fruit

3
p팝을 사용 하는 Foo것은 매우 영리합니다!
Esolanging Fruit

6

C 및 Python, 126116 바이트

@Bubbler 덕분에 -10 바이트!

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

Python에서 print ()는 None이므로 음수를 얻는 것은 의미가 없으므로 Python에서 오류가 발생합니다.

C에서 printf ()는 int를 반환하므로 0으로 나누면 부동 소수점 예외가 발생합니다.

C로 사용해보십시오!
파이썬으로 사용해보십시오!


1
파이썬에서을 -print(...)올리는 데 사용할 수 있으며 TypeErrorC에서 부동 소수점 오류 (0으로 나누기)를 자유롭게 할 수 있습니다. 중복 줄 바꿈과 결합하면 여기에 116 바이트 ( Python , C )가 있습니다.
Bubbler

5

Attache + Wolfram Language (Mathematica) , 82 바이트

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

온라인 첨부 파일을보십시오! Mathematica를 온라인으로 사용해보십시오!

이것은 =두 언어로 된 연산자의 의미에 중점을 둡니다 . Attache에서는 평등을 비교하지만 Mathematica에서는 변수 할당을 수행합니다. :=두 언어 모두에서 변수를 할당합니다.

이제 Attache에서 Print인쇄 된 문자열 배열을 반환하고 문자열과 정수 (즉, 0)를 빼는 것이 불가능합니다 . 따라서 유형 오류가 발생합니다. Mathematica에서는을 Print반환 Null하고 Mathematica는 0그로부터 빼기 만하면 됩니다. 그러나, 우리는 수동으로 그 널 던져 Throw주는 nocatch오류가 발생했습니다.


참고 : 이것은 버그로 인해 현재 버전의 첨부 파일에서 작동하지 않습니다. 그 soonish 해결하려고합니다
코너 오브라이언

5

파이썬 (2)QB64 , 82 바이트

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

파이썬 버전을 테스트하려면 온라인에서 사용해보십시오! QB64 버전을 테스트하려면 QB64를 다운로드해야합니다.

파이썬이 보는 것

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

첫 번째 줄은 단순한 표현 1(no-op)과 그 뒤에 주석입니다.

두 번째 줄 s은 문자열로 설정 "QB64"되지만 세 번째 줄은 즉시 문자열로 변경됩니다 "Python". 네 번째 줄은 그에 따라 메시지를 인쇄합니다.

다섯 번째 줄은 또 다른 맨손 표현이지만 NameError정의되지 않은 name 때문에 a 를 발생시킵니다 CLS.

QB64가 보는 것

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

번호가 매겨진 첫 번째 행 1#은 이름이 S(대소 문자 구분)으로 시작하는 모든 변수를 문자열 변수로 정의합니다. 이것은 우리가 s$파이썬을 사용할 때 구문 오류 인 을 사용할 필요가 없음을 의미 합니다.

두 번째 줄 s은 문자열로 설정 됩니다 "QB64". 'QB64에서 주석을 시작하므로 세 번째 줄은 아무것도하지 않습니다. 네 번째 줄은 그에 따라 메시지를 인쇄합니다.

다섯 번째 줄 CLS은 인수 로 (화면 지우기)를 시도합니다 -1. 하지만 이후 CLS에만이의 인수를 받아 0, 1또는 2, 이것은 오류가 발생합니다 Illegal function call. 이 오류는 사용자에게 실행을 계속할지 중단할지 묻는 대화 상자를 만듭니다. 기술적으로 이것은 오류가 치명적이지 않다는 것을 의미합니다 (이 경우 "계속 실행"을 선택할 수 있으며 프로그램은 추가 문제없이 종료됩니다). 그러나 OP는 오류 후에도 계속 사용할 수있는 언어를 명시 적으로 허용하므로 QB64의 동작은 정상입니다.


3

Perl 5JavaScript (Node.js) , 96 바이트

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

이것은 가장 왼쪽에있는 요소를 사용하는 (...)Perl의 목록 인 printf사실과 JavaScript에서 쉼표 연산자라는 사실을 사용하여 가장 오른쪽의 인수를 리턴합니다.

$JavaScript에 정의되어 있지 않으므로 Perl에서 0으로 나누기 오류와 ReferenceError를 발생시킵니다 .

온라인 Perl을 사용해보십시오!

온라인 JavaScript를 사용해보십시오!


3

옥타브 및 MATLAB, 67 바이트

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

온라인으로 사용해보십시오!

참고 :이 코드는 MATLAB이 도구 상자없이 설치되어 있거나 설치된 도구 상자의 이름이 문자 A에서 M으로 시작하지 않는다고 가정합니다.

작동 방식 :

이 코드는을 사용하여 인터프리터 및 도구 상자의 버전 데이터를 가져옵니다 ver. 실행 v(1).Name추출물에게 첫 번째 제품의 이름이 반환 어느 것 Octave이나 MATLAB마찬가지 위에 메모를 가정.

이 프로그램은 완료에 필요한 문자열 표시 Octave또는 MATLAB같은 요구를.

마지막으로 우리는 v(--pi).

Octave에서는 --사전 감소 연산자입니다. 따라서 변수 pi가 존재하지 않아 실패하는 사전 감소를 시도 합니다 ( pi실제로는 변수 가 아니라 함수 임).

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

MATLAB에는 사전 감소 연산자가 없습니다. 따라서이 문장은 v(-(-pi))just 와 같은 것으로 해석됩니다 v(pi). 그러나 pi정수가 아니므로 v배열 에 색인을 작성하는 데 사용할 수 없으므로 오류가 발생합니다.

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

3

C ++ 14 (gcc) / C ++ 17 (gcc) , 107105 바이트

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

온라인으로 사용해보십시오! (C ++ 14)

온라인으로 사용해보십시오! (C ++ 17)


그 가정 <cstdio>선언 printf(뿐만 아니라 글로벌 네임 스페이스에 std) 그 리눅스에 모두 실제 사용 g ++있는 기본 실행 문자 세트 사용의 ASCII 값.

여기서 기본적인 잡는 것은 C ++ 17이 언어에서 3 점을 제거했다는 것입니다.

C ++ 14에서는 "??/0"trigraph를 포함하며와 같습니다 "\0". 따라서 *"??/0"0이며 0 c으로 설정됩니다. 숫자 4는에 인수로 전달 된 printf다음 나누기 c가 정의되지 않은 동작 을 일으 킵니다. 리눅스에서는 이런 일이 일어나기 전에 *p프로그램이 시작 SIGFPE됩니다.

C ++ 17에서는 "??/0"정확히 4 길이의 문자열입니다. 그래서 *"??/0"'?'63 및 c번호 7은 인수로 전달된다 (3)에 설정 printf하고,이 시간에 의해 분할은 c유효하다. p네임 스페이스 멤버 이므로 프로그램 시작시 0으로 초기화되고 포인터 값이 null이므로 *p정의되지 않은 동작입니다. Linux에서는 프로그램이 주소 0에서 메모리를 수정하려고 시도하기 때문에 프로그램이을 얻습니다 SIGSEGV.


main의 반환 유형은 생략 할 수 있으므로 -3 바이트입니다.
Max Yekhlakov

2

Perl 5Perl 6 , 55 바이트

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

Perl 5를 온라인으로 사용해보십시오! (0으로 잘못 나누기)

Perl 6 온라인을 사용해보십시오! (그런 방법은 없습니다)

접두사 ~는 Perl 6에서의 스트링 화이며 본질적으로 위 프로그램에서 no-op입니다. Perl 5에서는 비트 단위가 아니며 -1을 0으로 변환합니다.

. Perl 6의 메소드 호출 구문과 Perl 5의 연결입니다.


2

C (gcc) / Stax , 109 바이트

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

온라인으로 사용해보십시오! (C (gcc))

온라인으로 사용해보십시오! (세금) 또는 실행하고 디버깅하십시오! (세금)

C의 Segfault. Stax에서 잘못된 작업입니다. 나는 주석이 아닌 모든 것이 실제로 Stax에서 어떻게 사용되는지를 좋아합니다.

기음

이것이 C가 보는 방식입니다. 첫 번째 줄은 no-op입니다. 두 번째 줄과 메시지를 출력 printf한 다음에 기인 세그먼테이션 폴트 (segfault) =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 프로그램은 빈 스택에서 팝 또는 엿보기를 시도 할 때마다 종료됩니다. 이것은 약간 까다로워지며 비어 있지 않은 스택을 준비해야합니다. AA=~1;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 (**)

정말 유용한 것은, ~비어 있지 않은 입력 스택을 준비 ;하여 프로그램을 종료하지 않고 실행할 수 있도록하는 것 입니다. 그러나 1메인 스택 의 두 s도 나중에 사용됩니다.

두 번째 줄은 탭으로 시작하고 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

유효하지 않은 조작이 /문자열에 대해 TOS (2 번째 피연산자)로, 숫자 1(*) 의 숫자 를 1 번째 피연산자 로 수행하려고하는데 유효하지 않습니다.

두 피연산자가 스왑되면 Stax에서 유효한 연산이됩니다.


2

젤리M , 39 바이트

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

젤리에서 사용해보십시오!

M으로 해보십시오!

두 언어 모두 Jelly와 M의 결과에 역 İ으로 적용됩니다 . M. Ask Dennis에서 왜 무한대를 나타내는 지 모르겠습니다 .0infzoozoo

중요한 차이점은 젤리의 무한대는 그 자체와 같고 M의 무한대는 그렇지 않다는 것입니다. 따라서 "자체와 같다"모나드 는 젤리와 M에서 =`산출 1된다 0.

İ=`ị“¢³ƥ“Ȥ¹»;“ :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

젤리의 오류는 EOFError: EOF when reading a line입니다.

M의 오류는 TypeError: '>' not supported between instances of 'str' and 'int'입니다.


1
두 개의 esolang에서 어떻게 이것을 시작합니까?
매직 문어 Urn

2

Foo / CJam , 51 50 바이트

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

Foo 및 NumberFormatExceptionCJam 에서 0으로 나누기 오류와 함께 종료됩니다 .

CJam에게 :

  • 문자열 리터럴 (따옴표 사이)은 자체를 스택으로 푸시합니다. 프로그램이 종료되면 스택의 항목은 구분 기호없이 자동으로 인쇄됩니다.
  • /This program errors out in 하위 문자열 에서 문자열을 분할하려고 시도합니다 Foo. 문자열에 하위 문자열이 포함되어 있지 않기 때문에 원래 문자열이 포함 된 싱글 톤 배열이 생성되며 정확히 같은 방식으로 표시됩니다.
  • 'x에 대한 문자 리터럴이며 x한 문자 문자열과 동일한 방식으로 인쇄됩니다. 이렇게하면 Foo에서 무시되는 CJam에 대한 데이터를 푸시 할 수 있습니다 (Foo에서 루프가 실행되지 않도록하는 방법을 알지 못했습니다).
  • Li빈 문자열을 정수로 캐스트하려고 시도하는데 실패합니다. 스택의 모든 것이 인쇄됩니다.

푸에게 :

  • 문자열 리터럴 (따옴표 사이)은 자체적으로 인쇄됩니다.
  • /현재 셀을 상단 스택 요소 (암시 적 0) 로 나누려고합니다 . 어떤 이유로 Foo에서 0으로 나누기 오류는 치명적이지 않으므로 메시지를 인쇄합니다.
    Only Chuck Norris can divide by zero.
    STDERR에 가서 계속 진행합니다.
  • 인식 할 수없는 문자 ( 'C'J'a'mLi)는 무시됩니다.

2
후자가 50 바이트가 아닙니까?
Bubbler

@Bubbler 편집하는 것을 잊었습니다. 죄송합니다.
Esolanging Fruit

7
Foo 인터프리터에 버그가 있다고 생각합니다. 그것은 분명히으로 삭제해야합니다 Only Jon Skeet can divide by zero. meta.stackexchange.com/a/9138

2

파이썬루아 , 111 (110) 102 98 95 85 바이트

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

오류 : 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: .code.tio:3: attempt to get length of a nil value
stack traceback:
    .code.tio:3: in main chunk
    [C]: in ?

분명히 구별됩니다.

여러 차이점을 남용합니다.

  • <var>=<a>,<b>,... Python에서는 튜플을 만들지 만 Lua에서는 첫 번째 멤버 만 가져 오는 인수 목록을 만듭니다.
  • #Python에서 주석을 시작하지만 Lua의 길이 연산자입니다. 튜플이 쉼표로 끝나도록 허용하는 Python에 대한 추가 소품.
  • [[...]]Lua의 여러 줄 문자열 구문으로 파이썬의 인쇄 기능조차 보지 못합니다. 이것은 루아 ..가 문자열 연결에 사용하고 그렇지 않기 때문에 필요 +합니다.
  • a정의되지 않은 변수를 본 후의 파이썬 오류 ; 루아 후 z=#print(x.."Lua :P"). #print(x.."Lua :P")코드가 실행되기 전에 오류가 발생하기 때문에 Lua 에만 사용하면 작동하지 않습니다.

편집 :

  • "".join파이썬, -1 바이트에서 사용할 필요 없음
  • 확인 x두 언어의 문자열과 장소 Python, 인쇄 기능에 문자열 리터럴에서 -8 바이트
  • 및 -4 바이트 #[[]]보다 짧은 사용#""--[[]]
  • #1-3 바이트 테이블 키로 사용할 필요가 없습니다.
  • 조 왕이 , -9 바이트
  • print(x.."Lua :P")분명히 작품 의 반환 가치의 길이를 취하는 것; -1 바이트


2

자바와 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]/**/;}}

일종의 전 처리기로서 자바와 C # 사이에서 다른 이스케이프 처리를 사용하지 않고 (유니 코드 이스케이프는 자바에서 코드 파싱하기 전에 파싱되고 c #에서는 파싱되지 않음) \u0027마술의 역할, 나머지는 "토글-코멘트"

편집 : @KevinCruijssen의 포인터 덕분에 8 바이트가 떨어졌습니다.

편집 : 규칙 derp 수정


당신은 골프 6 두를 변경하여 바이트 수 Stringvar(자바 10 지원이). (또는 5 변경하여 String s="...";String s="...",x;와 제거 String의 앞을 x=하기 전에 자바 9 년).
Kevin Cruijssen

1
S 문자열을 재사용하면 java99 및 이전 버전에서도 작동합니다. @KevinCruijssen
masterX244

2

AutoHotkey에 / C를 # 155 133 128 122 바이트

구문 강조는 내가 할 수있는 것보다 더 잘 설명합니다.

C # RuntimeBinderException : '비 위임 유형을 호출 할 수 없습니다'

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

오토 핫키 오류 : 예외가 발생했습니다.

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

편집 :

  1. var를 제거했습니다
  2. 우유 덕분에 -5 바이트

2
다음은 C #에서 던지는 약간 짧은 예외 i+=i[-1]입니다. System.IndexOutOfRangeException : '인덱스가 배열의 범위를 벗어났습니다.'
우유

2
dynamic대신에 약간 짧게 사용하여 varMicrosoft.CSharp.RuntimeBinder.RuntimeBinderException : 을 사용하여 '비 델리게이트 유형을 호출 할 수 없습니다'가 발생 i()합니다.
우유

2

PHP 7 이상 / JavaScript, 90 89 바이트

구문이 매우 유사한 2 개 언어를 사용하므로 두 언어로이 코드를 작성할 수 있습니다.

언어 분리는 JavaScript에 존재하지 않는 속성에 의해 수행됩니다. PHP는 [](빈 배열)을 잘못된 값으로 간주하지만 JavaScript에서는 (객체이고 객체는 항상 진실이기 때문에 new Boolean(false)) 진실 입니다.

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


실행:

다음 코드에 중점을 둡니다 ([]?console.log($X,'JavaScript'):printf($X,PHP))();..

문자열 속성은 두 언어 모두에서 동일하게 작동합니다.

이 코드는 "삼항 연산자"( Javascript , PHP )를 사용하며 두 언어 모두에서 거의 같은 방식으로 작동합니다.

자바 스크립트

Javascript가 console.log($X,'JavaScript')조각 을 실행하여을 반환합니다 undefined.

나중에을 실행하려고 (...)()하면 Uncaught TypeError: (intermediate value)(intermediate value)(intermediate value) is not a function(Google 크롬)이 표시됩니다.

PHP

PHP가 printf($X,PHP)조각 을 실행합니다 .

PHP에서 printf함수 는 출력 길이를 반환합니다 .

PHP는 흥미로운 기능을 가지고 있습니다. 이름이 변수에 저장되어 있거나 (표현 결과로 PHP7부터) 구문 오류를 방지하는 함수를 실행할 수 있습니다.

그런 다음 PHP는 이름의 결과 인 함수 []? ... :printf($X,PHP)(숫자 33) 를 실행하려고 시도합니다 .
그러나 그 흥미로운 기능에는 경고가 있습니다 : 문자열 만 받아들입니다 (duh!).

Fatal error: Function name must be a string때문에 33가 발생합니다 int.


1 바이트 절약 해 주신 Shieru Asakoto 에게 감사합니다 !


1
[]'0'JS와 PHP 보다 짧고 다르게 평가되므로 -1 바이트입니까?
Shieru Asakoto

내가 그 문제에 관한 질문을 많이 가질 []필요가 대신 사용하기를 '0', '\0', '\0'=="0", 그 사용 []전에뿐만 아니라. 그러나이 질문을 찾아 주셔서 감사합니다.
Ismael Miguel

1

Perl 5 및 C, 95 바이트

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

//; 기본적으로 perl의 NOP이며 C의 주석입니다.

따라서 C 프로그램은 효과적으로 :

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

필요한 문자열을 인쇄 한 다음 실행을 시도합니다 puts(32). 이것은 C에서 기술적으로 정의되지 않은 동작이지만 TIO 및 내가 액세스 할 수있는 모든 시스템에서 세그먼테이션 오류가 발생합니다.

perl 프로그램은 전체 C 프로그램을 문자열로 취급하고 정규식 /T.*n /을 사용하여 일치 시킨 This program errors out in다음 및를 인쇄합니다 perl :P. die프로그램이 오류와 충돌합니다 Died at script_name line 2.

오류로 마음에 들지 않으면 1/0길이가 같고 Illegal division by zero오류 와 충돌 합니다. 나는 die더 좋아 한다;)

온라인으로 사용해보십시오! (기음)

온라인으로 사용해보십시오! (펄)


1

VBScript, JScript, 72 바이트

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

VBScript는 "Microsoft VBScript 런타임 오류 : 유형 불일치 : 'y'"
를 인쇄합니다. JScript는 "Microsoft JScript 런타임 오류 : 'y'가 정의되지 않았습니다"를 인쇄합니다.



1

Java (JDK) / JavaScript (Node.js), 154 바이트

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");}}}

온라인으로 사용해보십시오! (자바)

온라인으로 사용해보십시오! (자바 스크립트)

자바 출력 :

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

JavaScript로 출력 (stderr에) :

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

이것은 자바 스크립트의 약한 입력 (활용 1=='1'언어를 감지), 자바 및 자바 스크립트 (에서 동일한 키워드 var, class),과 유사한 오류 생성자 ( new Error())을 수개 국어를 할 수 있습니다.


1

PowerShell v6 및 PowerShell v2, 73 바이트

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

온라인으로 사용해보십시오!

-shlv3에 도입 되었으므로 v2에서 구문 분석 오류가 발생합니다 . 그러면 v3 +는 0으로 나누기를 시도하기 전에 값을 올바르게 이동하여 0으로 나누기 오류를 편리하게 발생시킬 수 있습니다. 두 버전 모두 PSVersion필드 를 포함하는 $ PSVersionTable 해시 맵이 있습니다.


0

Linux의 C (gcc) / Mac의 C (gcc) (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();}

Mac에서는 테스트되지 않았습니다. 기본적으로 John Cook은 POSIX가 감마를 정의하지 않는다고 블로그 에서 지적했습니다 . Linux는 감마 함수의 로그를 사용합니다 (log (gamma (1))은 0을 반환하여 부동 소수점 예외를 트리거 함). OSX는 "true"감마 기능 (공식적으로 POSIX 당 tgamma라고 함)을 사용합니다. 이것은 1을 반환하고 abort 문을칩니다; 다른 부동 소수점 오류를 발생 시키려고했습니다 (예 : sqrt (-1)하지만 오류를 발생시키는 방법을 잊어 버렸습니다. 단지 0을 반환합니다)


0

펄, 배쉬 (78 바이트)

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

펄 출력 :

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

배쉬 출력 :

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

( line 43 행이 줄 바꿈으로 끝나지 않는다는 사실에도 불구하고 Bash는 실제로 오류를 표시합니다 .)



0

C (gcc)Haskell , 135 바이트

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""]

온라인으로 사용해보십시오 (С)! 온라인으로 사용해보십시오 (Haskell)!

결과는 주석을 짜서 이루어지며 C 버전은 본질적으로 다음과 같습니다.

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

(실패 시작 전에 쓰기로 실패합니다).

반면 Haskell 버전은 다음과 같이 줄어 듭니다.

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 ""]

(빈 목록의 꼬리를 가져 오면 실패 함)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.