On 7/21/2011 9:25 AM, Matthias Felleisen wrote:

On Jul 21, 2011, at 6:44 AM, Stephen Bloch wrote:

Right.  Nested conditionals and loops in Racket are no more syntactically 
painful than nested conditionals and loops in Java/C/C++, if you put braces 
around the bodies.
( if (>  x y ) (+ x 3 ) ( * 4 y ) )
if ( x>  y ) { x = 3 ; } else { y = 4 ; }


You don't have to go non-idiomatic in Racket to approximate
the non-nesting, step-by-step style of C, Java, and such languages.

Now that define is legal in many places, just give names to
intermediate results. More generally, here is a conjecture
about the psychology of programming:

  people take to programming in C more easily than
  to algebra because they can 'store' intermediate
  results in 'registers' and take a break to contemplate
  what to do next.

Warning: this is an untested conjecture by a guy who has 0
background in psychology or how to conduct an experiment.
All of this is based on observations.

For what it's worth, my code is formatted this way.

For instance, my code for Cohen's Kappa ( http://en.wikipedia.org/wiki/Cohen%27s_kappa#Calculation ) looks like this:


(define coding-numbers/c (listof (listof number?)))
(define/contract (kappa data)
  (coding-numbers/c . -> . number?)

  (define choices (remove-duplicates (flatten data)))
  (define expected-v
    (for/list ([c choices])
      (for/list ([person (transpose data)])
        (prob-of-v c person))))
  (define expected-agreement/choice
    (for/list ([c expected-v])
      (apply * c)))
  (define expected-agreement (apply + expected-agreement/choice))
  (if (= 1 expected-agreement)
      #f
      (/ (- (prob-of-agreement data) expected-agreement)
         (- 1 expected-agreement))))


Yes, I always used this style when coding functionally. I'm somewhat puzzled it's not more popular.

_________________________________________________
 For list-related administrative tasks:
 http://lists.racket-lang.org/listinfo/users

Reply via email to