Hi, I was thinking about putting some order in my own fare-utils, and maybe merge with arnesi, cl-utilities, and so many other libraries. Nikodemus told me to look for Alexandria. It would make a good start. But there should really be another layered project to provide all the basic algorithms to CL: fifos, various trees, iterators, comparators, tries, hashes, sorting, pure and impure containers, etc. Although we possibly want to layer that on top of a good macroexpansion and higher-order module system a la MzScheme.
Notes, reading the darcs source: * I think if-let* would be better if it did short-circuit logic and stopped computing and binding at the first NIL * in sequences.lisp, shouldn't suffle be shuffle? * shouldn't emptyp be a gf? * in symbols, what does ensure-symbol do that intern alone doesn't do??? * there should be a shortcut format-keyword for format-symbol :keyword * tests should probably be in a separate directory, one per file, mimicking the main source files.
Things I would really like from arnesi * compose is done better in arnesi. a multiple-value version would be even better (as a replacement or a distinct function). * I *really* would like to see the flow-control parts of arnesi there. Except that I prefer (block NIL ...) to (block while ...), and with* should have a different name. * ensure-list, ensure-cons, remove-keywords * eval-always (called eval-now in fare-utils)
Things that might or not be good, some of which I have in fare-utils or that are in use at ITA: * the "optimizing" strcat (that normalizes to base-string if possible) * nconcf, append1 append1f (i.e add one element at the end). * many variants along the line of clisp's with-collect, arnesi's with-collector, etc. * my DBG macro, for print-based debugging. * with-input, with-output, for wrapping a stream-using function like format does with its internals (i.e NIL means returning the resulting string). * defconstant-equal, defconstant-equalp, defconstant-unequal, defconstant-eqx -- to specify the constantness that matters. * alist->hash-table and hash-table->alist * with-accessors (with optional prefix) as a replacement for with-slots. * accessors-equal to help compare objects slot-by-slot * plist->alist * association * defun-inline * define-values-modify-macro define-values-post-modify-macro post-incf post-decf * multiple-value-quote (only useful if we also provide standard abbreviated names -- which would make sense *a different package*) * symbol-macro-expansion
That's all for today.
[ François-René ÐVB Rideau | Reflection&Cybernethics | http://fare.tunes.org ] A long time ago, someone in the Lisp industry told me it was poor form quote people; it suggests that they lack value. But I don't want to get bound up into that argument, so let's just achieve closure by agreeing that the point is that you can feel free to point people to my earlier pointer, which works as a reference for certain reference works that are particularly on point in their pointers about pointer references. Did you copy all that? -- Kent M Pitman
Take my advice, I for one have always believed in share and share alike. I'm constant on that. If I were to modify my argument, however slightly, those that depend on me (and I get calls all the time, and I return most of them), might accuse me of corruption. I may have no class, but at least my values haven't changed. -- Jrm