Hi Linda, Raul’s functions may be input to 13: as shown here:
Raul’s functions:
D=:[: (^~ >:)/ (2 3$0 1 0 1 0 0) +/ .* ]
pmt1200a=:(%<:)@Da * 1 0 1 */ .#
pmta=:pmt1200@(%&1200 1 1)
pmta 5.75 240 12500
87.7604
Revised as input to 13 : (note in the below the space required between ’13’
and ‘:’ and that I have “removed” any tacit addons (such as [:) to exactly
reproduce Raul’s tacit definitions ...
Da=:13 : '(^~ >:)/ (2 3$0 1 0 1 0 0) +/ .* y’ NB. Removed the
leading [: as not required for explicit (I could have left it in, but I’m
trying to exactly reproduce Raul’s tacit definitions above), and added last
term y to the explicit expression
pmt1200a=: 13 : '(%<:)@Da * 1 0 1 */ .# y’ NB. Added last term y
pmta=: 13 : 'pmt1200@(%&1200 1 1) y’ NB. Added last term y
(although this is not required as composition can be applied directly as Raul
did) without requiring explicit)
NB. Let’s compare to Raul’s solution in email below ...
Da
[: (^~ >:)/ (2 3$0 1 0 1 0 0) +/ .* ] NB. Same
definition as Raul
pmt1200a
[: (% <:)@Da [: * 1 0 1 */ .# ] NB. Same
pmta
pmt1200@(%&1200 1 1)
pmta 5.75 240 12500
87.7604
HTH but if still unclear please expand ?
For further reference re [: only having meaning in tacit form (which is why I
removed it for explicit form) it may be helpful to read this link:
https://code.jsoftware.com/wiki/Vocabulary/squarelfco
<https://code.jsoftware.com/wiki/Vocabulary/squarelfco>
Thanks, Rob
> On 13 Sep 2018, at 1:05 am, Linda Alvord <[email protected]> wrote:
>
>
>
> When you'e're done f=: 13 :'...
>
> enter
> f
>
> If the result is tacit there will be no x or y. Instead you get a string of
> separate J symbols which J uses from right to left to follow your
> instructions.
>
> I need a laptop to check. Raul's function.
>
> Linda
>
>
>
> '
>
> Sent from my Verizon, Samsung Galaxy smartphone
> -------- Original message --------
> From: Raul Miller <[email protected] <mailto:[email protected]>>
> Date: 9/10/18 12:55 AM (GMT-05:00)
> To: Programming forum <[email protected]
> <mailto:[email protected]>>
> Subject: Re: [Jprogramming] Tacit form: How to handle intermediate
>
> 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 <[email protected]
> <mailto:[email protected]>> 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 <[email protected]
>> <mailto:[email protected]>> On Behalf Of 'Mike Day'
>> via Programming
>> Sent: Saturday, September 8, 2018 1:45 PM
>> To: [email protected] <mailto:[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&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
>>>>> <https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww>
>>>>> .jsoftware.com
>>>>> <http://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
>>>> <https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww>
>>>> .avast.com
>>>> <http://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
>>>> <https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww>.
>>>> jsoftware.com
>>>> <http://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
>>> <https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.j>
>>> software.com
>>> <http://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
>>
>> <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
>> https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.jsoftware.com%2Fforums.htm&data=02%7C01%7C%7Ce7a73deaeb854a9b4fc208d616d9b2cc%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636721521588434559&sdata=EFzoMQ0co%2BInvoiD40hpSqWLJ6gWZVRGz4EbFGlJOcQ%3D&reserved=0
>>
>> <https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.jsoftware.com%2Fforums.htm&data=02%7C01%7C%7Ce7a73deaeb854a9b4fc208d616d9b2cc%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636721521588434559&sdata=EFzoMQ0co%2BInvoiD40hpSqWLJ6gWZVRGz4EbFGlJOcQ%3D&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%7Ce7a73deaeb854a9b4fc208d616d9b2cc%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636721521588434559&sdata=EFzoMQ0co%2BInvoiD40hpSqWLJ6gWZVRGz4EbFGlJOcQ%3D&reserved=0
>
> <https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.jsoftware.com%2Fforums.htm&data=02%7C01%7C%7Ce7a73deaeb854a9b4fc208d616d9b2cc%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636721521588434559&sdata=EFzoMQ0co%2BInvoiD40hpSqWLJ6gWZVRGz4EbFGlJOcQ%3D&reserved=0>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
> <http://www.jsoftware.com/forums.htm>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm