A hook can save recomputation.

(computation with original data and reused me)  (resuse me)


   test=: [: %: ([: -: +/) * [: */ ([: -: +/) - ]

   NB. play with the half factor
   f=:    4 %~ [: %: [: */ (([ , (- +:))~ +/)

   NB. shorter

   NB.    c o m p u t a t i o n    r e u s e
   g=:    ([: %: [: */ [ , -)~     ([: -: +/)

   g2=:   ([: %: [: */ [ , -)~ -:@:(+/)


   %/ (g , test) 3?@:$0
1


On 09/04/2018 08:00 AM, programming-requ...@forums.jsoftware.com wrote:
Date: Tue, 04 Sep 2018 11:50:43 +0000
From: Martin Kreuzer<i...@airkreuzer.com>
To:programm...@jsoftware.com
Subject: [Jprogramming] Tacit form: How to handle intermediate
        result..?
Message-ID:
        <5b8e71a5.1c69fb81.65e5c.4a9esmtpin_added_miss...@mx.google.com>
Content-Type: text/plain; charset="us-ascii"; format=flowed

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

Reply via email to