Re: Re: doing things on a procedural way and doing them on a functional way
- To: mathgroup at smc.vnet.net
- Subject: [mg47006] Re: [mg47001] Re: doing things on a procedural way and doing them on a functional way
- From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
- Date: Sat, 20 Mar 2004 03:50:20 -0500 (EST)
- References: <200403170729.CAA16380@smc.vnet.net> <c3bgd8$7q2$1@smc.vnet.net> <200403190635.BAA27086@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
You are right, you need to add:
DeleteCases[%, _?(Not[FreeQ[#, g[x__ /; Length[{x}] ³ 3]]] &), 1]
This is indeed done in the article later on, although I just noticed a
"bug": I have
Union[Flatten[ DeleteCases[%, _?(Not[FreeQ[#, g[x__ /; Length[{x}] ³
3]]] &), 1]]]
where Flatten and Union are quite unnecessary. (They somehow survived
form a previous version of the code in which they were needed).
Andrzej
On 19 Mar 2004, at 07:35, Bobby R. Treat wrote:
> There are a lot of really good ideas in the AlgebraicProgramming
> notebook. Thanks for sharing! However...
>
> I think you mean your answer to "Suppose g is a nonassociative
> noncommutative product..." to be a solution to the posted problem.
>
> ClearAll[f]; SetAttributes[f, {Flat, OneIdentity}]
> FixedPoint[Union[Flatten[ReplaceAllList[#1, f[a_, b_] -> g[a, b]]]] &
> ,
> f[a, b, c, d]];
> Union[% /. f -> g]
> {g[a, g[b, g[c, d]]],
> g[a, g[g[b, c], d]],
> g[a, g[b, c, d]],
> g[g[a, b], g[c, d]],
> g[g[a, g[b, c]], d],
> g[g[g[a, b], c], d],
> g[g[a, b, c], d]}
>
> But this result includes g[a,b,c] and g[b,c,d] which are not binary
> products. Do you mean us to remove elements that include more than
> binary products?
>
> Bobby
>
> Andrzej Kozlowski <akoz at mimuw.edu.pl> wrote in message
> news:<c3bgd8$7q2$1 at smc.vnet.net>...
>> I guess a little self-advertisement is not a major offence on this
>> list, so I suggest looking at my article in the forthcoming
>> Mathematica
>> Journal. If you can't wait you or don't have a subscription you can
>> download it form
>>
>> <http://www.mimuw.edu.pl/~akoz/Mathematica/AlgebraicProgramming.nb>
>>
>> Andrzej Kozlowski
>>
>> On 17 Mar 2004, at 08:29, Pedrito wrote:
>>
>>> Hello Mathgroup!
>>>
>>>
>>> I wanted to figure how to obtain all the possible combinations of
>>> five
>>> numbers and four non-conmutative non-asociative operations.
>>>
>>> This means:
>>> if we have numbers: a b c d e
>>> and the non-conmutative non-asociative operation: ?
>>>
>>> it's possible to make the following (different) expressions:
>>> a ? (b ? (c ? (d ? e)))
>>> a ? (b ? (c ? d) ? e))
>>> ...
>>> (a ? b) ? (c ? d) ? e
>>>
>>>
>>> For practical reasons you can think that the operation ? is ^
>>> (power).
>>>
>>>
>>>
>>> I have already obtained (by hand) all the possible combinations:
>>> lst={{a, {b, {c, {d, e}}}}, {a, {b, {{c, d}, e}}}, {a, {{b, c},
>>> {d,
>>> e}}}, {a, {{b, {c, d}}, e}}, {a, {{{b, c}, d}, e}}, {{a, b}, {c, {d,
>>> e}}},
>>> {{a, b}, {{c, d}, e}}, {{a, {b, c}}, {d, e}}, {{{a, b}, c}, {d, e}},
>>> {{a,
>>> {b, {c, d}}}, e}, {{a, {{b, c}, d}}, e}, {{{a, b}, {c, d}}, e}, {{{a,
>>> {b,
>>> c}}, d}, e}, {{{{a, b}, c}, d}, e}}
>>>
>>> And then I transformed them into an expressions by:
>>> Module[{x = 1},
>>> ToExpression[
>>> StringReplace[
>>> ToString[#1], {"{" -> "(", "}" -> ")",
>>> "," :> {"^", "^", "^", "^"}\[LeftDoubleBracket]
>>> x++\[RightDoubleBracket]}]]] & /@ lst
>>>
>>>
>>> If you can help me to do it better...
>>>
>>>
>>> Pedro L.
>>>
>>>
>
>
- References:
- doing things on a procedural way and doing them on a functional way
- From: Pedrito <pedrito6@softhome.net>
- Re: doing things on a procedural way and doing them on a functional way
- From: drbob@bigfoot.com (Bobby R. Treat)
- doing things on a procedural way and doing them on a functional way