On Thu, 2010-12-02 at 12:26 -0500, Greg Hendershott wrote: > Although I've grown accustomed to it, early on I disliked the > redundancy of define/contract and (my own macro) > define/contract/provide. > > (define/contract (foo x #:y y) > (int? #:y boolean?) > ( ... body ... ))
It's interesting to see what other people do. This is what I have played with. I was interested in adding documentation to everything, and make it proper quality. Instead of using comments I want the documentation to have a defined format that can be exploited, and be part of the language I use with good support. I don't want to write separate manuals at this point yet. My style includes function signature, contract, documentation (first string is brief text, rest strings are separate paragraphs) and a set of unit tests which also form the set of examples given with the "help". I haven't included Typed Racket in this but ideally it would be included too, not just contracts like I have now. -Markku --- (define/contract/help (mul lon) ((listof number?) . -> . number?) ("Multiplies a list of numbers" "The function mul multiplies together the given list of numbers. The mul of an empty list is 1.") (((mul '()) -> 1) ((mul '(1)) -> 1) ((mul '(1 2 3 4)) -> 24)) (if (null? lon) 1 (* (first lon) (mul (rest lon))))) (define/contract/help (string-shorten s max-length #:replacement (replacement "...")) ((string? number?) (#:replacement string?). ->* . string?) ("Shortens a string from the right" "The function string-shorten trims the given string from the right and replaces extra characters with the given replacement which is ... by default") (((string-shorten "word" 4) -> "word") ((string-shorten "word" 2) -> "wo") ((string-shorten "word" 2 #:replacement "x") -> "wx") ((string-shorten "word" 3 #:replacement "x") -> "wox") ((string-shorten "aaabbbcccdddeeefff" 5) -> "aa...")) (let ((sl (string-length s))) (if (<= sl max-length) s (let* ((rl (string-length replacement)) (leave (- (min sl max-length) rl))) (if (< leave 0) (substring s 0 max-length) (string-append (substring s 0 leave) replacement)))))) _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users