[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: self reproducing code
A non-trivial expression must be a list of at least 2 elements, so
let's guess that our solution looks like:
( ____________ ___________ )
The first blank must be a lambda expression if we are to avoid the
necessity of defining a function outside of our solution. (Which
would violate the self-reproducing aspect to some extent.)
( (lambda (x) ________ ) ____________ )
The choice of the name ``x'' was arbitrary. The choice of one
argument followed from the assumption of a two element list. The body
of the lambda expression must return a two element list, if we are to
re-produce the original input. There are different choices possible;
I'll choose
( (lambda (x) (list _____ _____ )) ___________ )
The argument might as well be quoted, otherwise we need to delve
deeper into the expression. This then determines some of the second
argument to ``list''.
( (lambda (x) (list _1_ (list (quote quote) _2_ ))) (quote _3_ ) )
Now comes the ``magic'' part. Notice that whatever is written in _3_,
we can make the second element of our result match by replacing _2_ by x.
( (lambda (x) (list _1_ (list (quote quote) x ))) (quote _3_ ) )
yields ( value_of_1_ (quote _3_ ) )
We can now use ``x'' for _1_, which let's us determine the value_of_1_
by our choice of _3_. The solution follows immediately.
( (lambda (x) (list x (list (quote quote) x )))
(quote (lambda (x) (list x (list (quote quote) x ))) ) )
The logic of the derivation makes this easy to remember/reconstruct.
--
-----
Gary Levin/Dept of Math & CS/Clarkson Univ/Potsdam, NY 13676/(315) 268-2384
BitNet: gary@clutx Internet: gary@clutx.clarkson.edu