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
   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&data=02%7C01%7C%7C8d2147240443485c7f8c08d61445ac18%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636718686798916834&sdata=Yuys8QE3yMvBtUraCohR9dRgPugZDeNaNh3BoBCzJjU%3D&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