#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-boun...@racket-lang.org] On Behalf Of Don Green Sent: jueves, 12 de marzo de 2015 19:25 To: users@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!
____________________ Racket Users list: http://lists.racket-lang.org/users