Для памяти
Jul. 26th, 2025 10:28 pmТеперь мы умеем писать интроспективные программы (quine) на БЭСМ-6 на всех Фортранах
(для Форекса, не требующего PROGRAM, можно чуть короче),
на Паскале-Мониторе
(на Паскале-Автокоде тоже можно, в принципе)
и на АЛГОЛе-ГДР
На АЛГОЛЕ-БЭСМ им. Курочкина, по-видимому, это невозможно: неизвестен способ напечатать закрывающую кавычку.
На ассемблерах, очевидно, тоже можно, но ломает.
РRОGRАМQ
RЕАLХ(14)
DАТА Х /84Н(6Х8НРRОGRАМQ/6Х9НRЕАLХ(14)/6Х12НDАТА Х /84Н9А6/5Х1НС
С5А6,1Н//6Х9НРRINТ Х,Х/6Х3HЕND)/
РRINТ Х,Х
ЕND
(для Форекса, не требующего PROGRAM, можно чуть короче),
на Паскале-Мониторе
PROGRAM MAIN(OUTPUT);TYPE STRING=PACKED ARRAY[1..60]OF CHAR; VAR L:ARRAY[1..6]OF STRING; I,J:INTEGER; Q,S:CHAR; BEGIN L[1]:=’PROGRAM MAIN(OUTPUT);TYPE STRING=PACKED ARRAY[1..60]OF CHAR;’; L[2]:=’VAR L:ARRAY[1..6]OF STRING; I,J:INTEGER; Q,S:CHAR; BEGIN ’; L[3]:=’Q:=ZZZZ; FOR I:=1 TO 2 DO WRITELN(L[I]); FOR I := 1 TO 6 DO ’; L[4]:=’WRITELN(ZL[Z,I:1,Z]:=Z,Q,L[I],Q,Z;Z); FOR I:=3 TO 6 DO BEGIN’; L[5]:=’FOR J:=1 TO 60 DO BEGIN S:=L[I][J]; IF S=ZZZ THEN IF J<>43 ’; L[6]:=’THEN S:=Q; WRITE(S) END; WRITELN END END. ’; Q:=’’’’; FOR I:=1 TO 2 DO WRITELN(L[I]); FOR I := 1 TO 6 DO WRITELN(’L[’,I:1,’]:=’,Q,L[I],Q,’;’); FOR I:=3 TO 6 DO BEGIN FOR J:=1 TO 60 DO BEGIN S:=L[I][J]; IF S=’Z’ THEN IF J<>43 THEN S:=Q; WRITE(S) END; WRITELN END END.
(на Паскале-Автокоде тоже можно, в принципе)
и на АЛГОЛе-ГДР
’BEGIN’’STRING’’ARRAY’L[1:7];’INTEGER’I,J;’STRING’Q,R,S; ’PROCEDURE’P(S);’STRING’S;’BEGIN’’FOR’J:=1’STEP’1’UNTIL’ LENGTH(S)’DO’PRINT(’IF’J’NE’45’AND’S[J] = ’’/’’ ’THEN’ Q ’ELSE’ S[J]); PRINT(NEWLINE) ’END’; R := ’’1234567’’; L[1]:=’’/BEGIN//STRING//ARRAY/L[1:7];/INTEGER/I,J;/STRING/Q,R,S;’’; L[2]:=’’/PROCEDURE/P(S);/STRING/S;/BEGIN//FOR/J:=1/STEP/1/UNTIL/’’; L[3]:=’’LENGTH(S)/DO/PRINT(/IF/J/NE/45/AND/S[J] = ///// /THEN/ Q’’; L[4]:=’’/ELSE/ S[J]); PRINT(NEWLINE) /END/; R := //1234567//;’’; L[5]:=’’Q:=///47///;/FOR/ I:=1,2,3,4/DO/P(L[I]); /FOR/I:=1,2,3,4,’’; L[6]:=’’5,6,7/DO/PRINT(//L[//,R[I],//]:=//,Q,Q,L[I],Q,Q,//;//,’’; L[7]:=’’NEWLINE);/FOR/ I:=5,6,7 /DO/ P(L[I]); /END//EOP/’’; Q:=’’’47’’’;’FOR’ I:=1,2,3,4’DO’P(L[I]); ’FOR’I:=1,2,3,4, 5,6,7’DO’PRINT(’’L[’’,R[I],’’]:=’’,Q,Q,L[I],Q,Q,’’;’’, NEWLINE);’FOR’ I:=5,6,7 ’DO’ P(L[I]); ’END’’EOP’
На АЛГОЛЕ-БЭСМ им. Курочкина, по-видимому, это невозможно: неизвестен способ напечатать закрывающую кавычку.
На ассемблерах, очевидно, тоже можно, но ломает.
no subject
Date: 2025-07-27 07:02 am (UTC)https://github.com/besm6/dubna/blob/main/examples/quine/forex.dub
Говорит:
F O R E X ИПM AH CCCP 4.13 OT 11.09.85 BPEMЯ: 04.12 1 PROGRAMQ 2 REALX(14) 3 DATA X /84H(6X8HPROGRAMQ/6X9HREALX(14)/6X 12HDATA X /84H9A6/5X1HC ERR 04405 ПK 3 ↑ OШИБKA B CПИCKE KOHCTno subject
Date: 2025-07-27 04:17 pm (UTC)Упрощая,
Придется думать крепче.
no subject
Date: 2025-07-27 09:02 pm (UTC)REALQ,X(13)◇DATAQ/-2E-14/,X/′(7X28HREALQ,X(13)◇DATAQ/-2E-14/,X/A1 C,6A6/5X1HC7A6A1,19H/◇PRINT X,Q,X,Q◇END) ′/◇PRINT X,Q,X,Q◇ENDno subject
Date: 2025-07-28 02:33 am (UTC)no subject
Date: 2025-07-28 05:04 am (UTC)