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
