Thank you David,

I have just downloaded the last Generator issue and will look at this later today. I much appreciate your direction and guidance on this matter. It looks like I'll have something to read while confined to my sick bed for today.

regards

Bruce Rennie

On 22/12/11 01:47, David Gamey wrote:
Bruce,

The call in *every c(simpleMap(tree)) *is the activation of co-expression c using the new(er) procedural syntax.

This may help http://rosettacode.org/wiki/Icon%2BUnicon/Intro#Co-expression_Flow

If you haven't already read it Steve's article in The Generator v2n2 Fun with Co-expressions, part 2 explains this. There's links from RC's Unicon page and the intro above.

Sorry, I don't have time for a longer explanation today.


Other RC tasks that use may provide examples

  * http://rosettacode.org/wiki/Accumulator_factory
  * http://rosettacode.org/wiki/Anonymous_recursion
  * http://rosettacode.org/wiki/Closures/Variable_capture
  * http://rosettacode.org/wiki/Function_composition
  * and as I mentioned there is a Y-combinator page but it hasn't been
    solved for Unicon



David



    ------------------------------------------------------------------------
    *From:* Bruce & Breeanna Rennie <[email protected]>
    *To:* [email protected]
    *Sent:* Wednesday, December 21, 2011 6:24:47 AM
    *Subject:* Re: [Unicon-group] What is the idiomatic way to
    represent Lambda function in Icon/Unicon

    Thanks to both Steve and David for your respective pieces of
    information. I have been able to get a bit further into solving my
    problem which is translating the scheme interpreter for KERNEL
    (SINK) into Unicon/Icon. The reason for the translation is that
    SINK runs real slow.

    The next little problem, is finding a way to generate lots of
    anonymous functions. I seem to recall seeing something like that
    quite a few years ago.

    The following scheme code gives the idea of what I am translating.
    The following is an extract from John Shutt's SINK file object.scm

    #;     (define make-foo
    #;       (lambda (bar quux)
    #;         (let ((name  (list #t)))
    #;           (lambda (message)
    #;             (case message
    #;               ((type) 'foo)
    #;               ((name) name)
    #;               ((bar)  bar)
    #;               ((quux) quux))))))
    #;
    #;     (define foo? (make-object-type-predicate 'foo))
    #;
    #; Sufficient accessors should be provided that clients never have
    to know that
    #; encapsulated objects are dispatch procedures; for example, if
    clients should
    #; have the ability to access the 'bar and 'quux attributes of a foo,
    #;
    #;     (define get-foo-bar  (lambda (x) (x 'bar)))
    #;     (define get-foo-quux (lambda (x) (x 'quux)))
    #;

    #;
    #; Determines whether all its arguments are objects.
    #;
    #(define object? procedure?)

    #;
    #; Given some number of symbol arguments, constructs a predicate
    that takes
    #; an argument and determines whether it is an object whose type
    is amongst
    #; the given symbols.
    #;
    #(define make-object-type-predicate
    #  (lambda types
    #    (lambda (object)
    #      (and (object? object)
    #           (pair? (member (object 'type) types))))))

    The make-object-type-predicate is used to generate anonymous
    functions.

    I have just another look at what you have written Steve as below.

    procedure applyTests(tree, env, context)
          c := create repeat {
                    operand := (result@&source)[1]  # allows function-style 
calls
                    result := operand(env, context) # in case result is needed
                    }
          @c    # advances evaluation CE to 'synchronization point', so next
              #   value passed in gets assigned to operand.
          every c(simpleMap(tree))   # here, result is ignored
    end


    Would you mind explaining what is happening here. I think I have
    maybe completely missed what is going on here. See if I have this
    right.

    *result* is a local variable with the initial value of &null
    *result@&source* simply returns control back to applyTests at the
    line @c

    What I stuck at is (and I thought I understood but sure now I
    don't) the line

    *every c(simpleMap(tree))*

    What is actually happening here and how does this relate to the
    code in the co-expression

    *operand := (result@&source)[1]
    result := operand(env, context)*

    I should be using Unicon much more but most of the work I do these
    days is based on Microsoft Office products as these are the tools
    that my clients run and so it is VBA mostly.

    I think I need to get more stuff done in other languages.

    Anyway back to the problem at hand. Would you mind explaining in
    detail what is happening here, please.

    Clinton, would a extra section in your book be able to be written
    on these kinds of subjects?

    regards

    Bruce Rennie
    getting slower as I age.





    
------------------------------------------------------------------------------
    Write once. Port to many.
    Get the SDK and tools to simplify cross-platform app development.
    Create
    new or port existing apps to sell to consumers worldwide. Explore the
    Intel AppUpSM program developer opportunity.
    appdeveloper.intel.com/join
    http://p.sf.net/sfu/intel-appdev
    _______________________________________________
    Unicon-group mailing list
    [email protected]
    <mailto:[email protected]>
    https://lists.sourceforge.net/lists/listinfo/unicon-group




------------------------------------------------------------------------------
Write once. Port to many.
Get the SDK and tools to simplify cross-platform app development. Create
new or port existing apps to sell to consumers worldwide. Explore the
Intel AppUpSM program developer opportunity. appdeveloper.intel.com/join
http://p.sf.net/sfu/intel-appdev


_______________________________________________
Unicon-group mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/unicon-group







------------------------------------------------------------------------------
Write once. Port to many.
Get the SDK and tools to simplify cross-platform app development. Create 
new or port existing apps to sell to consumers worldwide. Explore the 
Intel AppUpSM program developer opportunity. appdeveloper.intel.com/join
http://p.sf.net/sfu/intel-appdev
_______________________________________________
Unicon-group mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/unicon-group

Reply via email to