On Tue, Nov 22, 2016 at 5:29 AM, dean <deangwillia...@gmail.com> 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 <deangwillia...@gmail.com> 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 <joebog...@gmail.com> 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 <deangwillia...@gmail.com> 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:picolisp@software-lab.de?subject=Unsubscribe
>
>
-- 
UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe

Reply via email to