Similar result to Ric's, but maybe instructive, with line-by-line
development:-
Work with the monthly rate to start with, as suggested by Raul:
'r t b'=. rtb =. 5.75 240 12500%1200 1 1 NB. r as monthly rate
t^~1+r NB. (1+r)^t
3.14953
t (^~>:) r NB. same
3.14953
(%<:) t (^~>:) r NB.((1+r)^t)/(1+r)^t
1.46522
t (%<:)@ (^~>:) rNB. same
1.46522
r * t (%<:)@ (^~>:) r NB. r * ((1+r)^t)/(1+r)^t
0.00702084
t (]*(%<:)@ (^~>:)) r NB. same
0.00702084
(]*(%<:)@ (^~>:))/ t,rNB. same with t,r as rh arg
0.00702084
b* (]*(%<:)@ (^~>:))/ t,r NB. whole expression
87.7604
* ` (]*(%<:)@ (^~>:))/ b,t,r NB. same on b,t,r as rh arg
87.7604
*`(]*(%<:)@ (^~>:))/@:|. r,t,b NB. same on r,t,b as rh arg
87.7604
NB. Return to Linda's original values:
*`(]*(%<:)@ (^~>:))/@:(1 1 1200%~|.) 5.75 240 12500
87.7604
Might be useful,
Mike
On 10/09/2018 07:11, Ric Sherlock wrote:
The following is a simple refactoring of the original:
pmt=: {: * 1&{ ((% <:)@(^~ >:) * ]) 1200 %~ {.
pmt 5.75 240 12500
87.7604
The steps to get there went something like this:
pmt
=: 3 : 0
'
r t b'=. y
d=. (1 +
r % 1200) ^ t
b*(r % 1200) * d % d - 1
)
pmt=: 3 : 0
'r t b'=. y
b *
r (%&1200@[ * ((1 + %&1200)@[ ^ ]) % (1 -~ (1 + %&1200)@[ ^ ]) ) t
)
pmt=: 3 : 0
'
r t b'=. y
b * t ( %&1200@] * (^~ 1 + %&1200) % <:@(^~ 1 + %&1200) ) r
)
pmt=: {: * 1&{ ( %&1200@] * (^~ 1 + %&1200) % <:@(^~ 1 + %&1200) ) {.
pmt=: {: * 1&{ ( %&1200@] * (% <:)@(^~ 1 + %&1200) ) {.
pmt=: {: * 1&{ ( (% <:)@(^~ 1 + %&1200) * %&1200@] ) {.
pmt=: {: * 1&{ ((% <:)@(^~ 1 + %&1200) * %&1200@]) {.
pmt=: {: * 1&{ ((% <:)@(^~ >:) * ]) 1200 %~ {.
On Mon, Sep 10, 2018 at 4:55 PM Raul Miller <rauldmil...@gmail.com> wrote:
x=:0 is bad form, so I am going to ignore that part.
In fact, I'd eliminate all internal =: from that definition and start with:
pmt=: 3 : 0
0 pmt y
:
'r t b'=. y
D=.(1 + r % 1200) ^ t
b*(r % 1200) * D % D - 1
)
And our paranoia test is:
pmt 5.75 240 12500
87.7604
The next issue is that we're working with more than two values, that
makes it a bit complicated.
On the other hand, we never use x - if it's provide we ignore it. So
I'm going to ignore it here. If that bothers you, use pmt=: pmt&] f.
after we've got the tacit expression. (Using f. on the final
expression will also protect from some damage if you happen to run the
original with it's D=: expression...).
Anyways...
To simplify this slightly, notice that we never want to use the value
of r. Instead, we always want r%1200. So we can divide y by 1200 1 1
and work the remainder of the dyadic expression becomes:
pmt1200=: 3 : 0
'r t b'=. y
D=.(1 + r) ^ t
b*r * D % D - 1
)
A tacit expression to compute D directly from this y would be:
D=: [: (^~ >:)/ (2 3$0 1 0 1 0 0) +/ .* ]
with that definition of D, pmt1200 can be
pmt1200 =: (%<:)@D * 1 0 1 */ .# ]
and our tacit pmt becomes
pmt=: pmt1200@(%&1200 1 1)
Trying it out:
pmt 5.75 240 12500
87.7604
Good enough?
--
Raul
On Sun, Sep 9, 2018 at 9:55 PM Linda Alvord <lindaalvor...@outlook.com>
wrote:
Here's a classic. Can anyone write this in tacit?
NB. Mortgage is Rate Months Loan
pmt=: 3 : 0
(x =: 0) pmt y
:
'r t b'=:y
D=:(1 + r % 1200) ^ t
b*(r % 1200) * D % D - 1
)
pmt 5.75 240 12500
In 1961 I bought a house for $17,000. With a loan of $12,000 at 5.75
interest for 20 years. As a tenured teacher and a woman no bank would give
me a mortgage but for 20 years I payed the previous woman owner $87.77. At
the last payment it just so happened that I sold it.
Linda
-----Original Message-----
From: Programming <programming-boun...@forums.jsoftware.com> On Behalf
Of 'Mike Day' via Programming
Sent: Saturday, September 8, 2018 1:45 PM
To: programm...@jsoftware.com
Subject: Re: [Jprogramming] Tacit form: How to handle intermediate
Agreed on the "strong hint" in herona below. I got into that habit
years ago in Fortran....
And Sorry for the unintentional extra characters. (I'm seeing
A-circumflex where I'd typed space!) Just as well we're not talking APL!
Mike
On 08/09/2018 09:40, Martin Kreuzer wrote:
@Linda
I think that your
heron=: 13 :'%:*/(s y),(s y)-y'
looks superior to my initial approach as it gathers _all four_ factors
under the (*/) Times Insert.
btw "Hope you have good classes!"
For quite some time, I don't have classes any more, but once in a
while do private tutoring; my last two students finished their
'matura' at Easter this year (and one of them is on 'work & travel' in
New Zealand presently).
@Mike
Looking at your 'minor change' and the resulting tacit code, methinks
that (sy=. s - y) is giving the interpreter a much stronger hint that
there's a re-used intemediate result than the construct (' ... [ s2=.
.... ') I used initially.
-M
At 2018-09-07 09:43, you wrote:
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%7C8d2147240443485c7f
8c08d61445ac18%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C63671868
6798916834&sdata=Yuys8QE3yMvBtUraCohR9dRgPugZDeNaNh3BoBCzJjU%3D&
amp;reserved=0
--------------------------------------------------------------------
-- For information about J forums see
https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww
.jsoftware.com%2Fforums.htm&data=02%7C01%7C%7Cfbcf68689bed4e31e2
8108d615b2cfcc%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C63672025
5064176871&sdata=0sleKYElksLSP%2BOT8BYYtyzcuL3GTBuL14taSrgJQS8%3
D&reserved=0
---
This email has been checked for viruses by Avast antivirus software.
https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww
.avast.com%2Fantivirus&data=02%7C01%7C%7Cfbcf68689bed4e31e28108d6
15b2cfcc%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636720255064176
871&sdata=kMQGWHLjMejRbJOuSn5EvWU4j39TqVPCX73QNKV6k7g%3D&rese
rved=0
---------------------------------------------------------------------
- For information about J forums see
https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.
jsoftware.com%2Fforums.htm&data=02%7C01%7C%7Cfbcf68689bed4e31e281
08d615b2cfcc%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C63672025506
4176871&sdata=0sleKYElksLSP%2BOT8BYYtyzcuL3GTBuL14taSrgJQS8%3D&am
p;reserved=0
----------------------------------------------------------------------
For information about J forums see
https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.j
software.com%2Fforums.htm&data=02%7C01%7C%7Cfbcf68689bed4e31e28108
d615b2cfcc%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C63672025506417
6871&sdata=0sleKYElksLSP%2BOT8BYYtyzcuL3GTBuL14taSrgJQS8%3D&re
served=0
----------------------------------------------------------------------
For information about J forums see
https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.jsoftware.com%2Fforums.htm&data=02%7C01%7C%7Cfbcf68689bed4e31e28108d615b2cfcc%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636720255064176871&sdata=0sleKYElksLSP%2BOT8BYYtyzcuL3GTBuL14taSrgJQS8%3D&reserved=0
----------------------------------------------------------------------
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
---
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