Hi all, An earlier post today got me thinking about "quines" (programs that output themselves) in Python. I tried to find some on the web but didn't find many ([1]). In particular I didn't find any that corresponded to my instinctive (LISP-induced, probably) criterion:
def self_evaluating(s): "Return True if string s evaluates to itself" return s == eval(s) Here is the result of my efforts so far: 1. Starting from the classic idea (lambda x:x%x)('lambda x:x%x') I got the following v=(lambda x:x%('"''""'+x+'"''""'))("""(lambda x:x%%('"''""'+x+'"''""')) (%s)""") 2. (Given that if s is a nonempty string, s*2 is a longer string). Starting from the idea "%s %s" % (("%s %s",)*2) I got the following u="\"%s\" %% ((r\"%s\",)*2)" % ((r"\"%s\" %% ((r\"%s\",)*2)",)*2) Most of my problems in creating these 2 was with finding a suitable way of quoting strings that propagates well. Both u and v are one- liners. I'm hoping for no funky line wrapping here. Note: I'm not quoting the string as it makes no difference since they evaluate to themselves:) I'd like to know if anyone on the list has indulged in this time- bending/mind-wasting activity before. If so, it would be nice to create a list of such expressions. Quining's-better-than-ironing'ly yours -- Arnaud [1] http://www.nyx.net/~gthompso/self_pyth.txt -- http://mail.python.org/mailman/listinfo/python-list