<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><br></div><div>See Ian's reply:</div><div><br></div><div><div>&gt; (for/fold ((sum 0)) ((c "hello world"))</div><div>&nbsp; &nbsp; (+ sum (char-&gt;integer c)))</div><div>1116</div></div><div><br></div><div>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.&nbsp;</div><div><br></div><div><div>;; string-reader-example.rkt:</div><div><div>#reader "string-reader.rkt" #lang racket&nbsp;</div><div>(first "hello")</div></div><div><br></div><div>;; string-reader.rkt:</div><div>#lang racket&nbsp;</div><div><br></div><div>(provide (rename-out [$-read read]</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[$-read-syntax read-syntax]))</div><div><br></div><div>(define ($-read in)</div><div>&nbsp; (parameterize ([current-readtable (string-readtable)])&nbsp;</div><div>&nbsp; &nbsp; (read in)))</div><div><br></div><div>(define ($-read-syntax src in)</div><div>&nbsp; (parameterize ([current-readtable (string-readtable)])</div><div>&nbsp; &nbsp; (read-syntax src in)))</div><div><br></div><div>(define read-a-string&nbsp;</div><div>&nbsp; (case-lambda&nbsp;</div><div>&nbsp; &nbsp; [(ch in) `(string-&gt;list ,(read in))]</div><div>&nbsp; &nbsp; [(ch in src line col pos)</div><div>&nbsp; &nbsp; &nbsp;;; an awful way of reading a symbol-like string -- do better here</div><div>&nbsp; &nbsp; &nbsp;(define x (read-syntax src in)) (read-char in)</div><div>&nbsp; &nbsp; &nbsp;;; convert the string into a literat list of chars (via quote)</div><div>&nbsp; &nbsp; &nbsp;`(quote ,(string-&gt;list (symbol-&gt;string (syntax-e x))))]))</div><div><br></div><div>(define (string-readtable)</div><div>&nbsp; (make-readtable (current-readtable) #\" 'terminating-macro read-a-string))</div></div><div><br></div><div><br></div><div><br></div><br><div><div>On Mar 3, 2012, at 4:13 AM, Timothy Farland wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>Hi racket folk, lisp neophyte here (just finished HTDP),</div><div><br></div><div>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.</div>
<div><br></div><div>i.e: "string" is understood as '(#\s #\t #\r #\i #\n #\g) and&nbsp;'(#\s #\t #\r #\i #\n #\g) is displayed as "string".</div><div><br></div><div>.. so one could do, for example (car "string") =&gt; #\s, or (cdr "string") =&gt; "tring" etc.</div>
<div><br></div>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.<div><br></div><div>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.&nbsp;</div>
<div><br></div><div>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?<br clear="all">
<div><br></div><div>Many thanks</div><div><br></div>-- <br>Tim Farland<br><a href="mailto:e%3Atwfarland@gmail.com" target="_blank">e:twfarland@gmail.com</a><br>
</div>
____________________<br> &nbsp;Racket Users list:<br> &nbsp;<a href="http://lists.racket-lang.org/users">http://lists.racket-lang.org/users</a><br></blockquote></div><br></body></html>