Re: Should we MAY a "curly-write" and "neoteric-write"? Or even "sweet-write"? David A. Wheeler 10 Apr 2013 00:14 UTC
Mark H Weaver: > Such procedures would have to include very complicated heuristics to > decide when to use traditional s-expressions, when to use curly-infix, > when to use neoteric, etc. The heuristics would have to make > assumptions based on the symbol names. Personally, I think it would be > very hard to produce good output. A fair concern. For sweet-expressions it *is* complicated, because it's basically a pretty-printer. Which is why I think we should NOT have a "sweet-write" in this SRFI, as that is probably best handled separately. (Pretty-printers are *already* handled separately today, for all the same reasons.) But I think curly-write and neoteric-write aren't too bad. They do not need to be "perfect" in the sense that a human would do the same thing, they just need to be pleasant to use and provide a quick way to write info. If someone wants a different display, he can write his own procedure. I don't think we need to specify exactly what these writers do, just that they have to produce a representation of the object according to the notation. All of these statements are *already* true for "write", e.g., nobody mandates the characters that "(write (quote x))" produces. Of course we *do* need to provide a sample implementation, and they should be useful. However, I already have simple heuristics that I think work pretty well for neoteric expressions. Try this in order: 1. Represent a list as (...elements...) if there are 16+ elements, none of which are a pair. (These are "boring lists" because they're unlikely to represent procedure calls.) 2. Represent a list x as {...} infix if it: * Begins with a symbol that is ONLY punctuation or one of '(and or xor) * AND it's a proper list of length 3..6 or less 3. Otherwise, represent a list x as f{...} if: * Begins with a symbol, its cdr is a (proper) list of length 1 (1 param) * cadr(x) is a list * The cadr(x) meets the infix requirements above, but length is 2..6. 4. Otherwise, represent a list as f(...) if: * Begins with a symbol 5. Otherwise represent a list as (...elements...) 6. Represent the rest normally. Curly-infix can start with the infix rule, and once inside switch to the neoteric rule. --- David A. Wheeler