[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Goo Nitpicks



Resending this e-mail because majordomo had problems:

Most important is #1:
1. Many programmers prefer mod:name over (use)ing everything into the
namespace.  The problem with mod:name as it is is that directories can
pile up:
(foo/bar/baz/math:sin foo/bar/baz/math:$pi)

Even a simple goo/math:$pi is a pain to type.

My proposal is this:
If the programmer types: (use goo/math)  , it imports everything as it
  does now.
If the programmer types: (use goo/math math)  , the second argument
  becomes the shortened version and then the programmer can type
  math:$pi

This would replace the current mod:name system (because of possible name
clashing).

2. Why not replace swapf with Common Lisp's rotatef, which is generally
more useful?

3. Chris Armstrong's nitpick: Why is string formatting tied to ports?
It'd be nice if there was a function ('format' maybe?) that returned a
formatted string the way (msg) prints them.

(msg) could still exist as a shortened version of (write port (format))

4. We need a slicing function for sequences (I couldn't find one...).
'slice' is a good name IMHO... we could possibly use _ to indicate
either the end or beginning of the array.  For instance:
(slice array 1 _) to slice from 1 -> end.  (Or use Python's -1?)

Also, an optional third argument for step size would be nice.

5. Two things are incorrect on the web:
Example for DS should use 'unless' and not 'when'
(empty) has an incorrect signature

6. Why is DS like: (ds (macro ,blah ,@asdf)) and not like:
(ds macro (,blah ,@asdf))?

It seems inconsistent with DF and DM.

7. *-setter seems too long.  *! or *-set or *-set! may be better names.

8. Some destructive functions don't have a !, such as set.

9. Bugs: dv always returns #f.  push is broken for lists.

10. Will we be able to import from the directory in which goo is run in
the future?

11. According to wiki, default values will look like:
(dm function (a:0|<int> b:1|<int>))

It may be just me, but I think default values should be consistent with
rep's and let's variable assignments.

So, maybe make default values look like:
(dm function ((a 0)|<int> (b 0)|<int>))

Or change let/rep to look like:
(let (x:0 y:3))

12. Functions like (trunc/) should IMO return one value.  If the
programmer wanted a remainder, they would use (mod)

It could still return one value, but be able to assign two much like
Common Lisp's multiple-value-bind.

That's about it.. so far :)

-- 
Jonathan Hseu <vomjom@vomjom.org, vomjom@debian.org, jh4@cec.wustl.edu>
GPG ID:          5228D713
GPG fingerprint: 220B A4EF 70FE B884 CB38  F93F EA8A 1024 5228 D713