[racket-dev] actionable items, was: comments on "comments on learning Racket"

From: Matthias Felleisen (matthias at ccs.neu.edu)
Date: Mon Apr 28 09:47:42 EDT 2014

So far we have had two threads of reactions to my 'comments on 
comments.' They have produced requests that I consider actionable
items though I have counter-proposal to some of them. The list 
below does not include other actionable items I had on my list 
that did not get comments. 



With credit: 

* SAM suggests to always start in #lang racket. Tell students to
switch to #lang htdp/bsl or use Choose Language. I think this is
plain unfriendly to our largest audience. Here is my
counter-proposal:  

 when drracket starts w/o a preference file, we pop up a radio menu: 
 
 o Are you a student learning to program? 
 o Are you an experienced programmer learning to use Racket?
 
 Depending on which bullet the person checks, drracket starts in 
 BSL [#lang htdp/bsl, one day soon] or #lang racket.

* LAURENT asks for:

~~ faster re-indentation of last files. Will pre-computations 
   help or is the display on the screen the bottleneck? 

~~ the language selection menu should also be available from
   the general preference dialog 

~~ the following MV functions: 

   ~~ what names should they receive? 
   ~~ where should they and their tests go? 

    ;; (X ... -> Y ...) X *-> [List-of Y]
    ;; gather the return MVs from (apply f s) in a list

    (module+ test
      (check-equal? 
       (gather-return-values (lambda () (values 1 2))) 
       (list 1 2))

      (check-equal? 
       (gather-return-values (lambda (x) (values 1 x)) 2)
       (list 1 2))

      (check-equal? 
       (gather-return-values (lambda (x y) (values y x)) 2 1)
       (list 1 2)))

    (define (gather-return-values f . s)
      (call-with-values (lambda () (apply f s)) list))

    ;; Nat (X ... -> Y ...) X *-> Y
    ;; pick the i-th return value from a bunch of MVs 

    (module+ test
      (check-equal? 
       (nth-return-value 0 (lambda () (values 1 2))) 
       1)

      (check-equal? 
       (nth-return-value 0 (lambda (x) (values 1 x)) 2)
       1)

      (check-equal? 
       (nth-return-value 0 (lambda (x y) (values y x)) 2 1)
       1))

    (define (nth-return-value i f . s)
      (call-with-values 
       (lambda () (apply f s)) 
       (lambda l (list-ref l i))))

~~ macros should come with 'meta information' such as
   indentation; sub-modules may enable this; probably a 
   research topic (well, I no longer have a macrologist 
   in the group) 


Posted on the dev mailing list.