Fair enough,  it looks neat,  but doesn't deal with Martin Kreuzer's original requirement to apply
s just the once, ie how should we handle the intermediate result, s?

On the other hand, David Lambert and others propose variations on how to factor the formula so
as to use the result of s.

It's usually easy in explicit form,  harder in tacit form.  It seems to me that using 13 : ... is very helpful in developing a tacit form,  but it often fails to spot opportunities to save intermediate results.  13 : ... isn't an optimising compiler - or is it? It certainly doesn't spot the opportunity
to save the repeated (s y) in Linda's example.

Somewhat to my surprise,  a minor change to Linda's explicit expression does result in a
single applicaton of s in a quite elegant tacit form:

    herona=: 13 :'%:*/sy,(sy=.s y)-y'

    herona 3 4 5

6

    herona 5 12 13

30

    herona

[: %: [: */ s ([ , -) ]


Cheers,

Mike

On 07/09/2018 08:19, Linda Alvord wrote:
It keeps getting simpler:

s=: 13 :'-:+/y'
heron=: 13 :'%:*/(s y),(s y)-y'
heron 3 4 5
heron 4 5 6
d


;:'[: -: +/'

heron

;:'[: %: [: */ s , s - ]'
Explisit sentences are like English and the new language is the computers J 
anguage.  First learn the words and then learn to read ghe ords in sentences. 
And just as you might when learning Spanish, you might in time begin to speak 
it.

Linda


-----Original Message-----
From: Programming <programming-boun...@forums.jsoftware.com> On Behalf Of David 
Lambert
Sent: Thursday, September 6, 2018 6:11 PM
To: programming <programm...@jsoftware.com>
Subject: Re: [Jprogramming] Tacit form: How to handle intermediate

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 
https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.jsoftware.com%2Fforums.htm&amp;data=02%7C01%7C%7C8d2147240443485c7f8c08d61445ac18%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636718686798916834&amp;sdata=Yuys8QE3yMvBtUraCohR9dRgPugZDeNaNh3BoBCzJjU%3D&amp;reserved=0
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm



---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to