From: Sam S. <sd...@gn...> - 2004-07-28 20:17:03
|
> * Bruno Haible <oe...@py...t> [2004-07-28 18:47:19 +0200]: > > Sam wrote: >> May I suggest uniformity here? >> ... >> Why not use the same conventions for all slots? > > It's a valid argument. But do you find the $slotname convention in > condition.lisp pretty? I'm hesitating because of the esthetics. inconsistent cannot be aesthetic. if you find yourself using $slotname in some places, use it everywhere. >> >> also, how is >> >> (eval >> >> `#'(LAMBDA (#:SELF) >> >> (DECLARE (COMPILE)) >> >> ...)) >> >> >> >> better than >> >> >> >> (compile nil `(lambda (...) ...)) >> > >> > 1) It allows me to comment out the (DECLARE (COMPILE)) declaration >> > easily, for debugging. >> >> note that your form is slower than mine > > I'd say that there is no speed difference. EVAL goes through some intermediate places before ending up in COMPILE-LAMBDA. COMPILE is more direct, clear and explicit. >> and far less clear and aesthetic. > > I disagree: The intent is to return a function that has a given body. > Whether it's compiled or interpreted is a minor detail. Therefore the > EVAL ... (DECLARE (COMPILE)) approach is clearer. EVAL in code always raises a suspicion. The fact that there is a COMPILE declaration is hidden. (to say nothing about it being a CLISP extension, thereby its clarity is reduced) >> > 2) I hate "compile nil" because it doesn't allow to give a name to the >> > function. Whereas with eval and (DECLARE (COMPILE)) I can do it as >> > follows: >> > (eval `(FUNCTION ,funname (LAMBDA ...))) >> >> (compile function-name (lambda ...)) > > This is precisely the pitfall that needs to be avoided. We can extend COMPILE so that the second argument can be a cons of (function-name-to-globally-refer-to-this-function . function-name-to-name-this-function) e.g., (compile (nil . foo) (lambda ...)) will result in FOO being the name of the resulting closure but (fdefinition 'foo) returning NIL. this extension is better than the current undocumented extension for FUNCTION. besides, you are using #', not FUNCTION explicitly. -- Sam Steingold (http://www.podval.org/~sds) running w2k <http://www.camera.org> <http://www.iris.org.il> <http://www.memri.org/> <http://www.mideasttruth.com/> <http://www.honestreporting.com> If you want it done right, you have to do it yourself |