Did you mean something like this? f=: -:@(+/) %:@([* */@:-) ] f 3 4 5 6
On Tue, Sep 4, 2018, 10:01 AM Raul Miller, <rauldmil...@gmail.com> wrote: > I was about to suggest something similar: > > 13 : '(%: x * */ x-y)' > [: %: [ * [: */ - > 13 : '(%: y * */ y-x)' > [: %: ] * [: */ -~ > 13 :'y ([: %: ] * [: */ -~)-:+/y' > ] ([: %: ] * [: */ -~) [: -: +/ > taher=: ] ([: %: ] * [: */ -~) [: -: +/ > taher 3 4 5 > 6 > > Variations are possible, of course. For example: > taher=: %:@(] * +/@:-~) +/@:-: > > Thanks, > > -- > Raul > On Tue, Sep 4, 2018 at 9:46 AM 'Mike Day' via Programming > <programm...@jsoftware.com> wrote: > > > > Does this help? > > Each line is a small amendment to the preceding one... > > (-:@(+/))3 4 5 NB. Semiperimeter, s > > 6 > > (-:@(+/)-0&,)3 4 5 NB. s - 0, a, b, c > > 6 3 2 1 > > (-:@(+/)*/@:-0&,)3 4 5 NB. s * (s - a) * ... > > 36 > > (-:@(+/)%:@(*/)@:-0&,)3 4 5 NB. Heron’s formula applied to 3 4 5 > > 6 > > (-:@(+/)%:@(*/)@:-0&,) NB. Let interpreter remove unnecessary > brackets... > > -:@(+/) %:@(*/)@:- 0&, > > So the semiperimeter is calculated just the once. It relies on > converting the triplet a,b,c to the quadruplet 0, a, b, c, rather than > doing particularly smart bracketing. > > > > I don’t often use [: but if you prefer it, the following arises from a > similar building process using [: rather than @ and @: > > > > ([:-:(+/))3 4 5 > > 6 > > (([:-:(+/)) - 0&,)3 4 5 > > 6 3 2 1 > > (([:-:(+/))( [: */ - )0&,)3 4 5 > > 36 > > (([:-:(+/))( [: %: [: */ - )0&,)3 4 5 > > 6 > > (([:-:(+/))( [: %: [: */ - )0&,) NB. Get rid of extra brackets > > ([: -: +/) ([: %: [: */ -) 0&, > > > > Cheers, > > Mike > > > > > > > > Sent from my iPad > > > > > On 4 Sep 2018, at 12:50, Martin Kreuzer <i...@airkreuzer.com> wrote: > > > > > > Hi all - > > > > > > To calculate the area of a flat triangle, using Heron's formula, > > > A(a,b,c)= sqrt( s2*(s2-a)*(s2-b)*(s2-c) ) > > > I wrote a simple function doing this: > > > > > > * get the three sides (as list input y) > > > * compute the half perimeter s2 > > > * build the differences s2-y > > > * build product > > > * take square root > > > > > > My explicit solution looks like this > > > > > > taher=: 13 : '%: s2 * */ s2-y [ s2=. -: +/ y' > > > > > > and works > > > > > > taher 3 4 5 > > > 6 > > > > > > Suggested tacit version looks like this (and works too) > > > > > > tahert=: [: %: ([: -: +/) * [: */ ([: -: +/) - ] > > > > > > Q: Is there a way to reference the intermediate result of ([: -: +/) > the half perimeter s2 > > > within the tacit expression, as has been done in the explicit..? > > > [Guess the interpreter takes care of this anyway; my question aims at > whether a shorter formulation could be reached.] > > > > > > Thanks > > > -M > > > > > > ---------------------------------------------------------------------- > > > For information about J forums see http://www.jsoftware.com/forums.htm > > ---------------------------------------------------------------------- > > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm