fortran66のブログ

fortran について書きます。

自己記述プログラム

規格違反のもの。80文字に収まっていますが必殺のホレリス使用w

CHARACTER*43 f/43H(18HCHARACTER*43 f/43Ha,15H/;PRINT f,f;END)/;PRINT f,f;END

やや分かりやすくしたもの。

CHARACTER*46 f/46H(18HCHARACTER*46 f/46Ha,1H//9HPRINT f,f/3HEND)/
PRINT f,f
END

Fortran90の規格を満たしているもの。

CHARACTER(59)::a='''("CHARACTER(59)::a=",2a1,a,a1/"PRINT a(2:),a,a,a,a"/"END")'
PRINT a(2:),a,a,a,a
END

やや分かりやすくしたもの。

CHARACTER(72)::a='''CHARACTER(72)::a="PRINT "(a17,2a1,a,a1/a/a)",a(2:),a,a,a,a,a(20:),"END"'
PRINT "(a17,2a1,a,a1/a/a)",a(2:),a,a,a,a,a(20:),"END"
END

追記:H22-3-7
Fortran90の規格を満たしているもの。あまり進歩なし。

CHARACTER*56::a(4)='''("CHARACTER*56::a(4)=",2a1,a,a1/"PRINT a(1)(2:),a;END")'
PRINT a(1)(2:),a;END


Fortran2003のDELIM='...'を使えば新たなパターンが出来そうかとも思いましたが、イマイチ。