[racket] Looking for better designs to learn principles.

From: Jos Koot (jos.koot at gmail.com)
Date: Thu Mar 12 15:17:26 EDT 2015

#lang racket
 
(define (print-two f) (print (car f)) (print (cadr f)))
(print-two '(1 2)); prints 12
 
(define (print-all f) (for-each print f))
(print-all '(1 2)); prints 12
(print-all '(1 2 3 4)); prints 1234
 
Best wishes, Jos Koot
  _____  

From: users [mailto:users-bounces at racket-lang.org] On Behalf Of Don Green
Sent: jueves, 12 de marzo de 2015 19:25
To: users at racket-lang.org
Subject: [racket] Looking for better designs to learn principles.


;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!


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20150312/9b8ab88c/attachment.html>

Posted on the users mailing list.