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