Dave Herman: > One minor note on your recent blog entry about it. You claim that && and > || can be aliased to AND and OR, respectively, by writing: > > (define && and) > (define || or) > > This isn't quite true, at least in Scheme. Since AND and OR are not > functions but rather special forms, you need macros for this...
My thanks to Dave Herman for correcting the error of my ways. It _worked_ on one implementation, which misled me into thinking it'd work in general (not true). Unfortunately, this issue appears to be pretty common across Lisp-based languages: "and" and "or" are special. At least in Common Lisp, Emacs Lisp, and Scheme, both "and" and "or" are short-circuit operators. Typically function parameters are completely determined before they are called, but this does NOT happen with "and" and "or". (Justification: http://merd.sourceforge.net/pixel/language-study/syntax-across-languages/Blns.html, part of the interesting cross-language comparison here: http://merd.sourceforge.net/pixel/language-study/syntax-across-languages/ ). Since "and" and "or" are almost universally special cases in Lisp-like languages anyway, I think sweet-expressions ought to allow them as infix operators as well (probably in uppercase and lowercase forms). Thus, this would be legal: if {{x > 2} and {y < 3}} 'goodness 'badness I originally didn't permit this in sweet-expressions, because I worried about existing code like this: '(Mary and Martha) But if (...) will only be used to surround "strict s-expressions", and [...] force "no infix" interpretation, then this is no longer a problem. Yeah, I know about exclusive-or, but it's rare and there's less consensus on its name. So adding it also doesn't seem worthwhile. I don't know of any other infix operators that are ALSO special forms (other than "and" and "or"). Anyone? --- David A. Wheeler
