A critic of Guido's blog on Python's lambda
M Jared Finder
jared at hpalace.com
Thu May 11 01:57:48 EDT 2006
Chris Uppal wrote:
> E.g. can you add three-way comparisons (less-than, same-as, greater-than to,
> say, Python with corresponding three-way conditional control structures to
> supplement "if" etc ? Are they on a semantic and syntactic par with the
> existing ones ? In Smalltalk that is trivial (too trivial to be particularly
> interesting, even), and I presume the same must be true of Lisp (though I
> suspect you might be forced to use macros).
As an illustration, here's the definition and usage of such a numeric-if
in Lisp.
Using raw lambdas, it's ugly, but doable:
(defun fnumeric-if (value lt-body eq-body gt-body)
(cond ((< value 0) (funcall lt-body))
((= value 0) (funcall eq-body))
((> value 0) (funcall gt-body))))
(fnumeric-if (- a b)
(lambda () (print "a < b"))
(lambda () (print "a = b"))
(lambda () (print "a > b")))
A macro helps clean that up and make it look prettier:
(defmacro numeric-if (value lt-body eq-body gt-body)
`(fnumeric-if ,value
(lambda () ,lt-body)
(lambda () ,eq-body)
(lambda () ,gt-body)))
(numeric-if (- a b)
(print "a < b")
(print "a = b")
(print "a > b"))
-- MJF
More information about the Python-list
mailing list