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

Reply via email to