> On Apr 15, 2017, at 7:16 AM, Angus <anguscom...@gmail.com> wrote:
> 
> I am doing it using cond like this:
> 
> (define (lines t)
>  (cond [(and (false? (node-l t)) (false? (node-r t))) <<do no children 
> thing>>]  ;; if no children
>        [(and (false? (node-l t)) (not (node-r t)))  <<left child only>>]  ;; 
> if left child only
>        [(and (node-l t) (false? (node-r t))) <<right child only>> ]  ;; if 
> right child only
>        [else <<both children>> ]))  ;; if both children

`cond` expressions can be simplified by remembering that later conditions are 
only evaluated if the preceding conditions were false. Personally I find that 
the `false?` predicate makes things harder to read:

(define (f pr)
  (cond
    [(car pr)
     (if (cdr pr)
         'both
         'left)]
    [(cdr pr) 'right]
    [else 'neither]))

(f (cons #t #t)) ; 'both
(f (cons #t #f)) ; 'left
(f (cons #f #t)) ; 'right
(f (cons #f #f)) ; 'neither

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to