[racket-dev] Simple loop checking in beginner?
On Nov 10, 2010, at 10:40 AM, namekuseijin wrote:
> On Wed, Nov 10, 2010 at 12:13 AM, John Clements
> <clements at brinckerhoff.org> wrote:
>> ;; NOW I'M A STUDENT:
>>
>> ;; only-long-strings : (listof string) -> (listof string)
>> ;; return a list containing the strings longer than 2 chars
>> (define/noloop (only-long-strings l)
>> (cond [(empty? l) empty]
>> [else (cond [(< 2 (string-length (first l)))
>> (cons (first l)
>> (only-long-strings (rest l)))]
>> [else (only-long-strings l)])]))
>
> gosh, students do suck. I guess you teach them to use cond because
> it's a generalized if. But then they proceed to use it just like if:
> always two conditions per (verbose) cond! :p
>
> then again, may be someone who had previous exposure to lesser languages...
Perhaps you should ask before you critique.
We insist on this style:
-- the outer cond corresponds to the structure of the data definition of the input
-- the inner one signals decision relevant for the output
(I would use an 'if' for the inner one, but over N years of programming
as if a student might see my code one day, I have come to really, truly
like the unconditional use of cond for the layout purpose)