[plt-scheme] How to execute code in an environment other than it ,isdefined?
Hi Jos,
Yeah, that's one of my shortcomings, I'm horribly literal and direct, which
has on to many occasions, left other people with the impression that I
was being aggressive. As I am 50 now, I don't think I can hope to change
that to any great extent. I completely understand how you would have read
that differently than I meant it. I've grown accustom to apologizing at the
slightest hint that I've offended someone.
Thanks again for showing me your version. I enjoy sharing code, and getting
feedback. Being in the Lower Florida Keys, with no university closer
than a three
hour drive, its my only real chance to get peer review.
Take care,
--kyle
Jos Koot wrote:
> No need to say sorry. Playing with Scheme seems a very good "sort of a
> past time" to me. It was your first sentence "I believe you can
> construct the syntax such that no extraneous variable need to be
> added" that made me wonder, read your post and respond.
> Best wishes, Jos
>
> ----- Original Message ----- From: "Kyle Smith" <airfoil at bellsouth.net>
> To: "Jos Koot" <jos.koot at telefonica.net>; <plt-scheme at list.cs.brown.edu>
> Sent: Sunday, July 15, 2007 11:29 PM
> Subject: Re: [plt-scheme] How to execute code in an environment other
> than it ,isdefined?
>
>
>> Hi Jos,
>>
>> I like your case-lambda solution even better. I didn't mean to
>> implicate
>> that you hadn't solve Grant's problem, I was just messing around with
>> the code; sort of a past time of mine. Sorry if it came across that
>> way.
>>
>> Best wishes,
>>
>> --kyle
>>
>> Jos Koot wrote:
>>> ----- Original Message ----- From: "Kyle Smith" <airfoil at bellsouth.net>
>>> To: <plt-scheme at list.cs.brown.edu>; <grettke at acm.org>;
>>> <jos.koot at telefonica.net>
>>> Sent: Sunday, July 15, 2007 10:23 PM
>>> Subject: Re: [plt-scheme] How to execute code in an environment
>>> other than it ,isdefined?
>>>
>>>
>>>> Hi Grant and Jos,
>>>>
>>>> I believe you can construct the syntax such that no extraneous
>>>> variable need to be added.
>>>
>>> What your mascro does can as well and simpler be done by a procedure.
>>>
>>> (define pick-from
>>> (case-lambda
>>> ((proc to) (pick-from proc 1 to))
>>> ((proc from to) (iter proc from to)))
>>>
>>> A contract can be added to make sure that proc, from and to have the
>>> right types.
>>>
>>>> Check out my take on your syntax
>>>> below. I've also corrected for the annoying attribute of range
>>>> that acts like a C `for' statement, in that if you specify a range
>>>> of from 1 to 100, you actually get 1 to 99. Finally, I added
>>>> fenders and syntax/loc to provide for more specific error
>>>> reporting. You could also match on the lambda glyph, but
>>>> they don't show up on the newsgroup well, so I left it out.
>>>>
>>>> (module pick-from mzscheme
>>>> (require (lib "42.ss" "srfi"))
>>>> (provide pick-from)
>>>> (define (iter f from to)
>>>> (list-ec (:range x from (add1 to))
>>>> (if (f x))
>>>> x))
>>>> (define-syntax pick-from
>>>> (lambda (stx)
>>>> (syntax-case stx ()
>>>> [(_ (lambda (var) expr) from to)
>>>> (identifier? #'var)
>>>> (syntax/loc stx
>>>> (iter (lambda (y) ((lambda (var) expr) y)) from to))]
>>>
>>> "(lambda (y) ((lambda (var) expr) y))" can as well be written as
>>> "(lambda (var) expr)"which can as well be written as:
>>> "proc" as in the last two cases (and omitting the fender)
>>>
>>> As I understoor the question of Grant, he wanted to simplify
>>> (pick-from (lambda (x) expr) from to)
>>> such as to releave the user from typing "(lambda (" and ")" and
>>> another ")"
>>>
>>> Best wishes, Jos Koot
>>>
>>>> [(_ (lambda (var) expr) to)
>>>> (identifier? #'var)
>>>> (syntax/loc stx
>>>> (iter (lambda (y) ((lambda (var) expr) y)) 1 to))]
>>>> [(_ proc (from to))
>>>> (identifier? #'proc)
>>>> (syntax/loc stx
>>>> (iter proc from to))]
>>>> [(_ proc to)
>>>> (identifier? #'proc)
>>>> (syntax/loc stx
>>>> (iter proc 1 to))]))))
>>>>
>>>> (require pick-from)
>>>> (pick-from (lambda (a) (zero? (modulo a 3))) 50 100)
>>>> (pick-from even? 100)
>>>> (pick-from odd? 100)
>>>> (define triple? (lambda (a) (zero? (modulo a 3))))
>>>> (pick-from triple? 100)
>>>>
>>>> Enjoy!
>>>>
>>>> --kyle
>>>> airfoil at bellsouth dot net
>>>> schemekeys.blogspot.com
>>>> www.schemekeys.net
>>>>
>>>
>>
>
>