Path: utzoo!attcan!uunet!husc6!bloom-beacon!IBM.COM!ALBERGA From: ALBERGA@IBM.COM (Cyril Alberga) Newsgroups: comp.lang.scheme Subject: Self replicating code Message-ID: <101088.090653.alberga@ibm.com> Date: 10 Oct 88 13:06:52 GMT Sender: daemon@bloom-beacon.MIT.EDU Organization: The Internet Lines: 29 Here is a brute-force expression which prints itself. This was in LISP370, circa 1978. (PRINT ( (LAMBDA (X Y) (SEQ (RPLACA (CDAR (CDDADR X)) (COPY Y)) (RPLACA (CDADR (CADADR X)) (COPY Y)) (EXIT X) ) ) (COPY "(PRINT ( (LAMBDA (X Y) (SEQ (RPLACA (CDAR (CDDADR X)) (COPY Y)) (RPLACA (CDADR (CADADR X)) (COPY Y)) (EXIT X) ) ) (COPY "NIL) "NIL ) ) ) "(PRINT ( (LAMBDA (X Y) (SEQ (RPLACA (CDAR (CDDADR X)) (COPY Y)) (RPLACA (CDADR (CADADR X)) (COPY Y)) (EXIT X) ) ) (COPY "NIL) "NIL ) ) ) ) The uses of copy were to keep it from modifying itself. Obviously, shared sub-structure could be used to shorten the representation. Cyril N. Alberga