[plt-scheme] Okay, this is ugly
Your version is ugly because you are thinking in C (or some similar ugly language).
I think that real Scheme code can't be ugly.
Sincerely,
Chongkai Zhu
======= At 2006-02-18, 07:46:24 Chongkai Zhu wrote: =======
>CPS:
>
>(define (env-get-binding s env)
> (if (null? env)
> (void) ;;or, (error ...)
> (hash-table-get (car env)
> s
> (lambda ()
> (env-get-binding s (cdr env))))))
>
>Sincerely,
>Chongkai Zhu
>
>======= At 2006-02-18, 01:13:12 Gregory Woodhouse wrote: =======
>
>>The idea here is that env is a list of hash tables (created, for
>>example, by let), and when looking up a symbol, I want to start with
>>the car of env and return the binding I find there (if there is one).
>>Otherwise, I want to keep looking by repeating the process using the
>>cdr of env, until it's empty.
>>
>>The following code seems to work, but it's ugly because it uses the
>>failure thunk of hash-table-get to return #<void> if no binding is
>>found, and then uses this as a kind of sentinel value to indicate
>>that the code should recur on the list.
>>
>>(define (env-get-binding s env)
>> (call/cc
>> (lambda (k)
>> (if (null? env) k (void))
>> (let ((t (hash-table-get (car env) s (lambda () (void)))))
>> (unless (void? t) (k t)
>> (env-get-binding s (cdr env)))))))
>>
>>Using sentinel values like this seems unidiomatic and rather awkward.
>>Surely, there is a cleaner (clearer?) way to do this.
>>
>>==
>>Gregory Woodhouse
>>gregory.woodhouse at sbcglobal.net
>>
>>"If you give someone Fortran, he has Fortran.
>>If you give someone Lisp, he has any language he pleases."
>>--Guy L. Steele, Jr.
>>
>>
>>
>>
>>_________________________________________________
>> For list-related administrative tasks:
>> http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>
>_________________________________________________
> For list-related administrative tasks:
> http://list.cs.brown.edu/mailman/listinfo/plt-scheme