I just came back to say this...
http://picolisp.com/wiki/?articlequote
looks very helpful
but see your very comprehensive reply.
I'll have a good look through both of them.
Thank you very much Joe.

On 22 November 2016 at 12:51, Joe Bogner <[email protected]> wrote:

> On Tue, Nov 22, 2016 at 5:29 AM, dean <[email protected]> wrote:
> >
> > Joe
> > My question came from that very documentation so I'm well aware of it.
> >
> > I've never used a lambda but your Javascipt example helps a lot and
> suggests
> > that 'quote' in
> >
> >
> > ((quote (X) (* X X)) 9)
> >
> >
> > transforms the statement into something like
> >
> > (
> >   (de anon (X)
> >     (* X X)
> >   )
> >   anon 9
> > )
> >
> > If that's right..great but the transformation isn't intuitive to me at
> > all i.e. I thought quote just stopped the evaluation of a symbol.
> > It looks like it's doing a lot more than that here.
>
> It's not a literal transformation. The phrasing is used to help the
> reader understand the execution of the statement. The statement is not
> transformed and can still be inspected
>
> : (setq f1 (quote (X) (* X X)))
> -> ((X) (* X X))
> : (f1 9)
> -> 81
>
> : (car f1)
> -> (X)
> : (cdr f1)
> -> ((* X X))
>
>
> This is the same as
>
> : (setq f2 '((X) (* X X)))
> -> ((X) (* X X))
> : (f2 9)
> -> 81
>
> or
>
> : ('((X) (* X X)) 9)
> -> 81
>
>
> The statements are equivalent
>
> : (= f1 f2)
> -> T
>
>
>
>
> >
> > Also I read that ' is a macro for quote but I couldn't produce a '
> > equivalent of ((quote (X) (* X X)) 9) i.e.
> >
>
> See above
>
> I suggest reading through the 'Evaluation' section of
> http://software-lab.de/doc/ref.html. I've read it several times over
> the years. I probably read the reference 3 times before it really
> stuck. Often it needs to be re-read as new concepts that have been
> learned make it more clear.
>
> I'll paste some relevant sections that I think help explain the concept..
>
> In the example above, f1 is a list, whose CAR is a is a list of symbols
>
> : (car f1)
> -> (X)
>
>
>
> -- start paste
>
> Otherwise, if the CAR is a symbol or a list, PicoLisp tries to obtain
> an executable function from that, by either using the symbol's value,
> or by evaluating the list.
>
> What is an executable function? Or, said in another way, what can be
> applied to a list of arguments, to result in a function call? A legal
> function in PicoLisp is
>
> ..
>
> or
> a lambda expression. A lambda expression is a list, whose CAR is
> either a symbol or a list of symbols, and whose CDR is a list of
> expressions. Note: In contrast to other Lisp implementations, the
> symbol LAMBDA itself does not exist in PicoLisp but is implied from
> context.
>
>
> .
>
> -- end paste
>
> Based on the above, we can also write the expression as
>
> ('(X (* 9 9)) 9)
>
> : (setq f3 '(X (* 9 9)))
> -> (X (* 9 9))
> : (f3 9)
> -> 81
>
> The statements aren't the same
>
> : (= f3 f2)
> -> NIL
>
> But the interpreter will execute them the same since the CAR of the
> list is a symbol (not a list of symbols as-is f2). A list of symbols
> is more common to see
>
> : (car f3)
> -> X
>
> Hope this helps. The key here is realizing that quote/' doesn't
> literally transform to a de, it just evaluates as if it did
>
> Joe
>
> On Tue, Nov 22, 2016 at 5:29 AM, dean <[email protected]> wrote:
> >
> > Joe
> > My question came from that very documentation so I'm well aware of it.
> >
> > I've never used a lambda but your Javascipt example helps a lot and
> suggests
> > that 'quote' in
> >
> >
> > ((quote (X) (* X X)) 9)
> >
> >
> > transforms the statement into something like
> >
> > (
> >   (de anon (X)
> >     (* X X)
> >   )
> >   anon 9
> > )
> >
> > If that's right..great but the transformation isn't intuitive to me at
> > all i.e. I thought quote just stopped the evaluation of a symbol.
> > It looks like it's doing a lot more than that here.
> >
> > Also I read that ' is a macro for quote but I couldn't produce a '
> > equivalent of ((quote (X) (* X X)) 9) i.e.
> >
> > : ((quote (X) (* X X)) 9)
> > -> 81
> > : (('(X) (* X X)) 9)
> > !? (('(X) (* X X)) 9)
> > NIL -- Undefined
> > ?
> > : (('X (* X X)) 9)
> > !? ('X (* X X))
> > X -- Undefined
> >
> >
> > Best Regards
> > Dean
> >
> > On 22 November 2016 at 04:16, Joe Bogner <[email protected]> wrote:
> >>
> >> Hi dean,
> >>
> >> It's not clear what you're asking. Does this help explain it?
> >>
> >> http://software-lab.de/doc/tut.html
> >>
> >> --- from the page ---
> >>
> >> Anonymous functions without the lambda keyword
> >>
> >> There's no distinction between code and data in PicoLisp, quote will
> >> do what you want (see also this FAQ entry).
> >>
> >> : ((quote (X) (* X X)) 9)
> >> -> 81
> >>
> >> : (setq f '((X) (* X X)))  # This is equivalent to (de f (X) (* X X))
> >> -> ((X) (* X X))
> >> : f
> >> -> ((X) (* X X))
> >> : (f 3)
> >> -> 9
> >>
> >> --- end from the page ---
> >>
> >> And http://software-lab.de/doc/ref.html
> >>
> >> "The most prominent read-macro in Lisp is the single quote character
> >> "'", which expands to a call of the quote function. Note that the
> >> single quote character is also printed instead of the full function
> >> name."
> >>
> >> ---
> >>
> >> In other words, quote is allowing you to define an anonymous function
> >> equivalent to (function(x) { return x*x })(9) (in javascript for
> >> example)
> >>
> >> On Mon, Nov 21, 2016 at 3:37 PM, dean <[email protected]> wrote:
> >> > I could do with some help understanding step by step what's happening
> >> > here...
> >> >
> >> > Intuitively I can see that 9 squared is 81 but I can't really see,
> >> > precisely, what this was doing
> >> >
> >> > ((quote (X) (* X X)) 9)
> >> > -> 81
> >> >
> >> > so I put it in a function in a file to trace it
> >> >
> >> > (de go ()
> >> > ((quote (X) (* X X)) 9)
> >> > )
> >> >
> >> > but it's not giving me the step by step explanation I was hoping for
> >> >
> >> > : (trace go)
> >> > !? (method "X" C)
> >> > (('((X) (* X X)) 9)) -- Symbol expected
> >> > ?
> >> >
> >> > Any help to understand what's happening at each stage would be very
> much
> >> > appreciated.
> >> >
> >> > Thank you in anticipation.
> >> --
> >> UNSUBSCRIBE: mailto:[email protected]?subject=Unsubscribe
> >
> >
> --
> UNSUBSCRIBE: mailto:[email protected]?subject=Unsubscribe
>

Reply via email to