[racket] Strings as lists
See Ian's reply:
> (for/fold ((sum 0)) ((c "hello world"))
(+ sum (char->integer c)))
1116
Assuming you have a different goal in mind, here is how to convert the example from the Guide into an example that gives you a tiny bit of what you have in mind.
;; string-reader-example.rkt:
#reader "string-reader.rkt" #lang racket
(first "hello")
;; string-reader.rkt:
#lang racket
(provide (rename-out [$-read read]
[$-read-syntax read-syntax]))
(define ($-read in)
(parameterize ([current-readtable (string-readtable)])
(read in)))
(define ($-read-syntax src in)
(parameterize ([current-readtable (string-readtable)])
(read-syntax src in)))
(define read-a-string
(case-lambda
[(ch in) `(string->list ,(read in))]
[(ch in src line col pos)
;; an awful way of reading a symbol-like string -- do better here
(define x (read-syntax src in)) (read-char in)
;; convert the string into a literat list of chars (via quote)
`(quote ,(string->list (symbol->string (syntax-e x))))]))
(define (string-readtable)
(make-readtable (current-readtable) #\" 'terminating-macro read-a-string))
On Mar 3, 2012, at 4:13 AM, Timothy Farland wrote:
> Hi racket folk, lisp neophyte here (just finished HTDP),
>
> I would like to use Haskell-style strings in my racket, where a string is defined as either '() or (cons character string), and is read from and displayed by values enclosed by double quotes.
>
> i.e: "string" is understood as '(#\s #\t #\r #\i #\n #\g) and '(#\s #\t #\r #\i #\n #\g) is displayed as "string".
>
> .. so one could do, for example (car "string") => #\s, or (cdr "string") => "tring" etc.
>
> I've made altered versions of the basic list processing functions that act differently when given strings or lists, so they achieve this, but at the cost of a lot of runtime checks.
>
> For a better approach I suspect one would need to deal with the 'reader,' but looking at the documentation, it seems a bit beyond my current understanding.
>
> Has anyone else seen or built a language extension that achieves this, or could anyone point me to some next-step resources that will bring me up to the level where I can understand the reader documentation? Or is my enterprise here misguided?
>
> Many thanks
>
> --
> Tim Farland
> e:twfarland at gmail.com
> ____________________
> Racket Users list:
> http://lists.racket-lang.org/users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20120303/3300bad6/attachment.html>