Subject: Re: what is false From: Erik Naggum <erik@naggum.no> Date: 10 Dec 2002 23:08:44 +0000 Newsgroups: comp.lang.lisp Message-ID: <3248550524214230@naggum.no> * Kent M Pitman | There as a public review comment when standardizing that came from | Boyer (of Boyer/Moore) and John McCarthy, if I recall correctly. | The committee replied that they should do exactly as you suggest. But `eq´ is not guaranteed to return a boolean. It may seem rather silly for it to return anything else, but the specification is very clear that it does not, in fact, return `t´ when it means true. So (defun same-truth-value (v1 v2) (not (not (eq (not v1) (not v2))))) will return `t´ when the two are the same truth value. Now, the much more important question is why anyone would care what the specific "true" value is. Nobody tests for anything but `nil´, anyway, and writing code that tests for any /particular/ true value is broken. Incidentally, the above function will effectively, since machine operations do not return `nil´ and `t´ but some CPU flag, be at least one conditional, so a version of `same-truth-value´ that returned a generalized boolean could also be written as (defun same-truth-value (v1 v2) (if v1 v2 (not v2))) and if a true boolean is necessary, use (and v2 t) instead of v2. In natively compiled Common Lisp implementations, this is much more efficient, too, but when expressed this way, there is seldom a need for a function for it. Also note that the standard name for this boolean operator is `eqv´, cf `logeqv´ and `boole-eqv´. -- Erik Naggum, Oslo, Norway Act from reason, and failure makes you rethink and study harder. Act from faith, and failure makes you blame someone and push harder.