Re: confusion about Thread[]
- To: mathgroup at smc.vnet.net
- Subject: [mg56047] Re: [mg56007] confusion about Thread[]
- From: "David Park" <djmp at earthlink.net>
- Date: Thu, 14 Apr 2005 08:54:49 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Torsten, You want to use MapThread. wLst = {w1, w2, w3}; zLst = {z1, z2, z3}; cLst = {c1, c2, c3}; MapThread[#1 && #2 || #1 && #3 || #2 && #3 & , {wLst, zLst, cLst}] {w1 && z1 || w1 && c1 || z1 && c1, w2 && z2 || w2 && c2 || z2 && c2, w3 && z3 || w3 && c3 || z3 && c3} David Park djmp at earthlink.net http://home.earthlink.net/~djmp/ From: Torsten Coym [mailto:torsten.coym at eas.iis.fraunhofer.de] To: mathgroup at smc.vnet.net Hi group, given three lists wLst = {w1, w2, w3} zLst = {z1, z2, z3} cLst = {c1, c2, c3} with each element representing a boolean value I want to calculate a list of the same function applied to the corresponding elements of wLst, zLst, cLst respectively. While the expression Thread[Thread[wLst && zLst] || Thread[wLst && cLst] || Thread[zLst && cLst]] {(w1 && z1) || (w1 && c1) || (z1 && c1), (w2 && z2) || (w2 && c2) || (z2 && c2), (w3 && z3) || (w3 && c3) || (z3 && c3)} does exactly what I want, I wonder why the following approach using a pure function with three input arguments and a single call of Thread[] does not give the desired result: Thread[((#1 && #2) || (#1 && #3) || (#2 && #3) & )[wLst, zLst, cLst]] ({w1, w2, w3} && {z1, z2, z3}) || ({w1, w2, w3} && {c1, c2, c3}) || ({z1, z2, z3} && {c1, c2, c3}) although ((#1 && #2) || (#1 && #3) || (#2 && #3) & )[w1, z1, c1] (w1 && z1) || (w1 && c1) || (z1 && c1) implements the desired logical expression and Thread[f[wLst, zLst, cLst]] {f[w1, z1, c1], f[w2, z2, c2], f[w3, z3, c3]} works the way I expect it. It seems I am a bit disconnected here ... Torsten