[racket] Looking for better designs to learn principles.
If "thread-through macro" refers to "
http://www.greghendershott.com/2013/05/the-threading-macro.html" then I
recommend a functional alternative called "compose":
(define print/cdr
(match-lambda
[(cons x xs) (print x) xs]))
(define print-two
(compose print/cdr print/cdr))
The result is chained through naturally since the input and output type of
the lower level function are equal.
For any number of printings
(define (print-n n)
(for/fold ([print-n identity])
([i n])
(compose print/cdr print-n)))
(define print-two (print-n 2))
And for any number of anythings
(define (iterate f n)
(for/fold ([chain identity])
([i n])
(compose f chain)))
(define print-two (iterate print/cdr 2))
On Thu, Mar 12, 2015 at 2:25 PM, Don Green <infodeveloperdon at gmail.com>
wrote:
> ;Design A:
> ;Rating: 1 out of 10
> ;Poor because it uses set!
> (define print-two
> (lambda (f)
> (print (first f))
> (set! f (rest f))
> (print (first f))
> (set! f (rest f))
> f))
>
> (void (print-two '(1 2))) ;=> 12
> ;-------------------------
> ;Design B:
> ;Rating: 2 out of 10
> ;Better because it nests expressions to avoid using set!
> ;Poor because it less readable.
> (define print-two
> (lambda (f)
> (print (first f))
> (print (first (rest f)))
> f))
>
> (void (print-two '(1 2))) ;=> 12
> When called in situations that allow one expression only, enclose call
> within a 'begin' expression.
> ;-------------------------
> ;Design C:
> ;Rating: 3 out of 10
> ;Is this an even better design because it is more readable than nesting
> expressions as in Design B above?
> (define (print-two f)
> (let* ([_ (print (first f))]
> [f (rest f)]
> [_ (print (first f))]
> [f (rest f)])
> f))
> (void (print-two '(1 2))) ;=> 12
> ;-------------------------
> My questions are:
> "Can you recommend a better method?"
> "Can you recommend a better method using 'define with lambda'?"
> "Does your better method use a macro?"
> "Does your better method use a thread-through macro?" If so, could you
> please provide the definition of the thread-through macro.
> THANKS!
>
>
> ____________________
> 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/20150314/b3c37be7/attachment-0001.html>