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 <[email protected]> On Behalf Of 'Mike 
Day' via Programming
Sent: Saturday, September 8, 2018 1:45 PM
To: [email protected]
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 <[email protected]> On 
>>> Behalf Of David Lambert
>>> Sent: Thursday, September 6, 2018 6:11 PM
>>> To: programming <[email protected]>
>>> 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, [email protected] wrote:
>>>> Date: Tue, 04 Sep 2018 11:50:43 +0000
>>>> From: Martin Kreuzer<[email protected]> 
>>>> To:[email protected]
>>>> Subject: [Jprogramming] Tacit form: How to handle intermediate
>>>>         result..?
>>>> Message-ID:
>>>> <[email protected]>
>>>> 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%7C8d2147240443485c7f
>>> 8c08d61445ac18%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C63671868
>>> 6798916834&amp;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&amp;data=02%7C01%7C%7Cfbcf68689bed4e31e2
>>> 8108d615b2cfcc%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C63672025
>>> 5064176871&amp;sdata=0sleKYElksLSP%2BOT8BYYtyzcuL3GTBuL14taSrgJQS8%3
>>> D&amp;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&amp;data=02%7C01%7C%7Cfbcf68689bed4e31e28108d6
>> 15b2cfcc%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636720255064176
>> 871&amp;sdata=kMQGWHLjMejRbJOuSn5EvWU4j39TqVPCX73QNKV6k7g%3D&amp;rese
>> rved=0
>> ---------------------------------------------------------------------
>> - For information about J forums see 
>> https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.
>> jsoftware.com%2Fforums.htm&amp;data=02%7C01%7C%7Cfbcf68689bed4e31e281
>> 08d615b2cfcc%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C63672025506
>> 4176871&amp;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&amp;data=02%7C01%7C%7Cfbcf68689bed4e31e28108
> d615b2cfcc%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C63672025506417
> 6871&amp;sdata=0sleKYElksLSP%2BOT8BYYtyzcuL3GTBuL14taSrgJQS8%3D&amp;re
> served=0

----------------------------------------------------------------------
For information about J forums see 
https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.jsoftware.com%2Fforums.htm&amp;data=02%7C01%7C%7Cfbcf68689bed4e31e28108d615b2cfcc%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636720255064176871&amp;sdata=0sleKYElksLSP%2BOT8BYYtyzcuL3GTBuL14taSrgJQS8%3D&amp;reserved=0
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to