This blog posts shows program source codes that work in multiple languages (including Haskell, Prolog, Perl, Perl and Python).
Here is a program which works in Haskell, Prolog and Perl:
$ cat >m1.prg <<'END' foo( {-1/*_} ) if!'*/%'; print "Hello, Perl!\n" if<<'-- */' }). :- write('Hello, Prolog!'), nl, halt. /* -} x) = x main = putStrLn "Hello, Haskell!" -- */ END $ perl m1.prg Hello, Perl! $ swipl -f m1.prg Hello, Prolog! $ cp m1.prg m1.hs $ ghc m1.hs -o m1 $ ./m1 Hello, Haskell!
Here is a program which works in Haskell, Prolog and Python:
$ cat >m2.prg <<'END' len( {-1%2:3} ); print "Hello, Python!"; """ }). :- write('Hello, Prolog!'), nl, halt. /* -} x) = x main = putStrLn "Hello, Haskell!" -- """ # */ END $ python m2.prg Hello, Python! $ swipl -f m2.prg Hello, Prolog! $ cp m2.prg m2.hs $ ghc m2.hs -o m2 $ ./m2 Hello, Haskell!
It's possible to have polyglots of 8, 10 and even 22 programming languages, see them here.
Since you rely on a language's comments to switch language contexts, the next step is to generalise the solution to accept the grammar of delimiters of a language's comments and automatically figure out how to embed a set of 'hello world' statements within that set of comments.
ReplyDelete