Carl Banks wrote:
On Jul 31, 11:44 pm, Carl Banks <[EMAIL PROTECTED]> wrote:
[snip excellent explanation of why it's hard to for "if x" to be
extensively polymorphic]


By the way, one thing I forgot to mention is Matt Fitzgibbons' filter
example.

As I said, it's hard to write code that works for both numeric and
container types because they share so few methods.  However, sometimes
you don't know ahead of time what methods are used!  When you're doing
functional programming you might pass in a method that calls the
appropriate method, like so:

def apply_if_true(func,x):
    if x:
        func(x)

I find myself doing things like this surprisingly often. All you've done is move the decision as to what function is applied to x elsewhere. Like a factory, for example. I could see using something like this where func prepares object x to be inserted into a database, and you want to make sure x is meaningful first.

def add_to_db(prep_func, x):
    if x:
        entry = prep_func(x)
        add_to_db(entry)

'if x' strikes me as better for this case because you might want to accept a non-empty list (or some other objects) but reject non-empty lists. 'if x is None' would not work. It still may be susceptible to the empty iterator problem, depending on what prep_func does.


The function f could use methods appropriate for ints when x is an
int, and for lists when x is an int.

I did downplay this, because frankly, not many programmers use
functional methods this extensively.  But one should also note that
you could pass in the test as well:

def apply_if_condition(func,cond,x):
    if cond(x):
        func(x)

Thus this usage of "if x" arguably could be considered "replaceable
with a simple explicit test".  But in the interests of harmony I
didn't push the point, and it really would have been stretching the
spirit of what I was trying to prove.


Carl Banks
--
http://mail.python.org/mailman/listinfo/python-list


Are you using cond to (a) determine is x is a suitable type to pass to func, or (b) whether or not to call func, based on some other characteristics of x?

If (a), I think using a condition is this way is a little goofy. Why not just allow func to decide is x is an acceptable argument?

(b) is not really what we've been discussing, so I assume not. I would seriously consider refactoring cond outside the function anyway.

-Matt
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to