Thank you, what I miss from clojure is its uniform or homoiconic(?) style of 
sequence accessing; so one does not have to check current sequence is whether 
list or vector or others. I'd like to create macro or something for this. :-)

Sent from my iPhone

> On Nov 7, 2014, at 5:16 PM, Martin DeMello <[email protected]> wrote:
> 
> check out the clojurian egg too: http://wiki.call-cc.org/eggref/4/clojurian
> 
> martin
> 
>> On Thu, Nov 6, 2014 at 6:21 PM, Sungjin Chun <[email protected]> wrote:
>> Thank you. Though I'm not sure on my code is in good style, I managed to 
>> convert my
>> code to chicken scheme like this;
>> 
>> (set-read-syntax!
>>  #\[
>>  (lambda (port)
>>    (let loop ((c (peek-char port)) (exps '()))
>>      (cond ((eof-object? c)
>>             (error "EOF encountered while parsing [ ... ] clause"))
>>            ((char=? c #\])
>>             (read-char port) ; discard                                       
>>                                                                              
>>                                                                            
>>             `(vector ,@(reverse exps)))
>>            ((char-whitespace? c)
>>             (read-char port) ; discard whitespaces                           
>>                                                                              
>>                                                                            
>>             (loop (peek-char port) exps))
>>            (else
>>             (let ((exp (read port)))
>>               (loop (peek-char port)
>>                     (cons exp exps))))))))
>> 
>> (print (with-input-from-string "[1 2 3 4 5]" read))
>> 
>> (set-read-syntax!
>>  #\{
>>  (lambda (port)
>>    (let loop ((c (peek-char port)) (exps '()))
>>      (cond ((eof-object? c)
>>             (error "EOF encountered while parsing [ ... ] clause"))
>>            ((char=? c #\})
>>             (read-char port) ; discard                                       
>>                                                                              
>>                                                                            
>>             `(alist->hash-table (chop (list ,@(reverse exps)) 2)))
>>            ((char-whitespace? c)
>>             (read-char port) ; discard whitespaces                           
>>                                                                              
>>                                                                            
>>             (loop (peek-char port) exps))
>>            ((char=? c #\,)
>>             (read-char port) ; discard whitespaces                           
>>                                                                              
>>                                                                            
>>             (loop (peek-char port) exps))
>>            (else
>>             (let ((exp (read port)))
>>               (loop (peek-char port)
>>                     (cons exp exps))))))))
>> 
>> (print (with-input-from-string "{'a 10, 'b 20, 'c 30}" read))
>> (print (with-input-from-string "{'a 10 'b 20 'c 30}" read))
>> 
>> I post these code for people with similar needs like myself :-).
>> 
>> 
>>> On Fri, Nov 7, 2014 at 10:33 AM, Evan Hanson <[email protected]> wrote:
>>> Hi Sungjin,
>>> 
>>> These are typically referred to as "reader extensions" in the Scheme
>>> world: http://api.call-cc.org/doc/library#sec:Reader_extensions
>>> 
>>> You'll probabably want `set-read-syntax!` in particular:
>>> http://api.call-cc.org/doc/library/set-read-syntax!
>>> 
>>> Cheers,
>>> 
>>> Evan
>> 
>> 
>> _______________________________________________
>> Chicken-users mailing list
>> [email protected]
>> https://lists.nongnu.org/mailman/listinfo/chicken-users
> 
_______________________________________________
Chicken-users mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/chicken-users

Reply via email to