Listable vs. Thread

*To*: mathgroup at yoda.physics.unc.edu*Subject*: Listable vs. Thread*From*: gaylord at ux1.cso.uiuc.edu*Date*: Thu, 29 Oct 1992 15:06:54 -0600

on Tuesday, i posted the question as to why i got the error message below. voteTuesday[1,0] := a voteTuesday[0,1] := b voteTuesday[x_,y_] := c Attributes[voteTuesday] = Listable; dog = {{1,1,0},{1,0,0}}; cat = {{1,0,0},{0,1,0}}; voteTuesday[cat,dog] {{c, b, c}, {b, a, c}} voteTwice[1,0] := a voteTwice[0,1] := b voteTwice[x_,y_] := c Thread[voteTwice[cat,dog]] Thread::normal: Normal expression expected at position 1 in Thread[c]. Thread[c] ============== dan scott (thanks dan) pointed out that mathematica is pattern-matching the entire expression voteTwice[cat,dog] to give c and of course, Thread[c] then produces the message. i thought i might avoid the problem using the following rule set: vote[1,0] := a vote[0,1] := b vote[x_Integer,y_Integer] := c but this produces: Thread[vote[cat,dog]] {vote[{1, 0, 0}, {1, 1, 0}], vote[{0, 1, 0}, {1, 0, 0}]} so what i've come up with is the incredibly ugly Map[(Thread[#])&,Thread[vote[cat,dog]]] {{c, b, c}, {b, a, c}} so Listable is really different than just automatically Threading, i guess. "if you're not programming functionally, then you must be programming dysfunctionally"