This one is a cheat because read does a lot of the work. I can tolerate treating STDIN/OUT as black boxes because they often are. The Scheme interpreter's functionality is what's custom. The read function is crucial to it. So, it's implementation should be included. That puts this way over 7 lines.<p>The good news is that I now know where the name Y Combinator comes from. I imagine it will take me a lot longer to wrap my head around that concept, though. Truly weird haha.
Implementing a programming language in a few lines has always been done.<p>Here is an example in prolog of such a meta interpreter.<p><pre><code> interpret(true):- !.
interpret(GoalA, GoalB):- !,interpret(GoalA),interpret(GoalB).
interpret(Goal):- clause(Goal, Body), interpret(Body).</code></pre>