On 10 March 2014 16:40, "Jörg F. Wittenberger" < joerg.wittenber...@softeyes.net> wrote:
> A first alternative would be string-ref. That would be O(1). As long > as your Scheme does not use something like UTF-8 as string representation. > So maybe it would be the best to resort to something like: > > (define replacements (apply vector (string->list rotated))) > (define (caesar char) > (let ((index (string-index alphabet char))) > (if index > (vector-ref replacements index) > char))) ; Not found => Copy verbatim. > > > Notice: I replaced the second occurrence of "(string-index alphabet char)" > with "index" - the variable the result was of the first call was already > bound to. I'm leaving it here as an exercise to you to figure out why. ;-) > Ugh. Yeah, thanks. I see it. > Your second version brings up a completely different consideration. The > task "implement a caesar chipher" is slightly underspecified. That is, > actually it's OK, since it would imply that you are supposed to produce a > general solution. And your first version does. > > You second version depends on the mapping from characters to integers. It > will "only" work on such mappings, which are "accidentally" compatible to > ASCII for upper case letters. I'm using quotes here, because the days are > long gone, when you had a reasonable chance to get your hands on a system > using incompatible encodings like > http://en.wikipedia.org/wiki/DEC_Radix-50 > Otherwise I'd prefer the second version for using less memory. > I didn't think of that. I hadn't even heard of DEC Radix-50. > Note however: if you wanted the your cipher to be easily adapted to more > general mappings (e.g. be applicable to other character sets than upper > case ASCII compatible - which would easily be parts of unicode or say HTML > entities like ü) then the argument is reversed and your first version > would be the better fit. > That makes sense. Cheers, Daniel.
_______________________________________________ Chicken-users mailing list Chicken-users@nongnu.org https://lists.nongnu.org/mailman/listinfo/chicken-users