On Jul 12, 2014, at 6:43 PM, Brian Adkins <racketus...@lojic.com> wrote:
> On Jul 12, 2014, at 6:19 PM, Daniel Prager wrote: > >> Hi Brian >> >> r >= 0 && r <= 4 && c >= 0 && c <= r >> >> >> implies >> >> 0 <= c <= r <= 4 >> >> >> Or using prefix and the variable-arity of <=: >> >> (define (is-pos r c) >> (<= 0 c r 4)) >> >> >> which I think works well for clarity, concision, and efficiency. >> >> Dan > > Very nice observation; I like it. I've always felt the variable-arity of lisp > was a cool feature. I switched to a struct for the arg, but the following > works: > > (defpat (is-pos? (pos r c)) > (<= 0 c r 4)) > > I probably won't keep my defpat macro, at least not in its present form (for > one, it only handles a single arg); there's probably a balance between being > concise and being general/flexible. Although define/match is definitely more powerful, if you want it, this would probably be a good version of what you want that would handle multiple arguments: (I’ll reply again if I get one to work with optional and/or keyword-arguments) (define-syntax defpat (syntax-rules () [(defpat (f arg-pat ...) body ...) (defpat f (match-lambda** [(arg-pat ...) body ...]))] [(defpat id expr) (define id expr)])) > > I finished the program, but it's very raw - I haven't tried to match the > Racket style, be idiomatic, etc., just rushed through it to get a rough idea > of how it compares: > > https://gist.github.com/lojic/14aefacc29ab5a88fa98 > > I'll come back to it after I get some more experience and improve it. Despite > the questionable utility of these exercises, I always run into something that > causes me to learn something valuable about Racket. > > > ____________________ > Racket Users list: > http://lists.racket-lang.org/users ____________________ Racket Users list: http://lists.racket-lang.org/users